aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar fmalita <fmalita@chromium.org>2015-08-20 12:08:18 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-08-20 12:08:18 -0700
commitd028180f0310cf2b23f9744256a41697b0683e67 (patch)
tree4814cf742984b3b2219163d6d9e07470fbf24e1a /src/core
parent0abdf766d395ed3b7059511425f431589eca05f6 (diff)
SkCanvas::onDrawPicture() quick-reject
R=reed@google.com,mtklein@google.com Review URL: https://codereview.chromium.org/1264133003
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkCanvas.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 02afe92e33..daf8425f57 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -2774,6 +2774,19 @@ void SkCanvas::drawPicture(const SkPicture* picture, const SkMatrix* matrix, con
void SkCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
const SkPaint* paint) {
+ if (!paint || paint->canComputeFastBounds()) {
+ SkRect bounds = picture->cullRect();
+ if (paint) {
+ paint->computeFastBounds(bounds, &bounds);
+ }
+ if (matrix) {
+ matrix->mapRect(&bounds);
+ }
+ if (this->quickReject(bounds)) {
+ return;
+ }
+ }
+
SkBaseDevice* device = this->getTopDevice();
if (device) {
// Canvas has to first give the device the opportunity to render