Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4235)

Unified Diff: cc/raster/image_hijack_canvas.cc

Issue 2842333003: cc: Update discardable image metadata generation to get PaintImages. (Closed)
Patch Set: win Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/raster/image_hijack_canvas.h ('k') | cc/raster/image_hijack_canvas_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/raster/image_hijack_canvas.cc
diff --git a/cc/raster/image_hijack_canvas.cc b/cc/raster/image_hijack_canvas.cc
index 150be23fa5d98fba9636920d54a09ccc19e44188..ea03dfbf6364419dfee5209518ce7af6576e7ee4 100644
--- a/cc/raster/image_hijack_canvas.cc
+++ b/cc/raster/image_hijack_canvas.cc
@@ -156,6 +156,11 @@ void ImageHijackCanvas::onDrawImage(const SkImage* image,
const SkPaint* paint) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ImageHijackCanvas::onDrawImage");
+ SkRect rect = SkRect::MakeXYWH(x, y, SkIntToScalar(image->width()),
+ SkIntToScalar(image->height()));
+ if (QuickRejectDraw(rect, paint))
+ return;
+
if (!image->isLazyGenerated()) {
DCHECK(!ShouldSkipImage(image));
SkNWayCanvas::onDrawImage(image, x, y, paint);
@@ -197,6 +202,9 @@ void ImageHijackCanvas::onDrawImageRect(const SkImage* image,
SrcRectConstraint constraint) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ImageHijackCanvas::onDrawImageRect");
+ if (QuickRejectDraw(dst, paint))
+ return;
+
if (!image->isLazyGenerated()) {
DCHECK(!ShouldSkipImage(image));
SkNWayCanvas::onDrawImageRect(image, src, dst, paint, constraint);
@@ -240,6 +248,9 @@ void ImageHijackCanvas::onDrawImageRect(const SkImage* image,
void ImageHijackCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ImageHijackCanvas::onDrawRect");
+ if (QuickRejectDraw(r, &paint))
+ return;
+
if (ShouldSkipImageInPaint(paint))
return;
@@ -255,6 +266,9 @@ void ImageHijackCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) {
void ImageHijackCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ImageHijackCanvas::onDrawPath");
+ if (QuickRejectDraw(path.getBounds(), &paint))
+ return;
+
if (ShouldSkipImageInPaint(paint))
return;
@@ -270,6 +284,9 @@ void ImageHijackCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
void ImageHijackCanvas::onDrawOval(const SkRect& r, const SkPaint& paint) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ImageHijackCanvas::onDrawOval");
+ if (QuickRejectDraw(r, &paint))
+ return;
+
if (ShouldSkipImageInPaint(paint))
return;
@@ -289,6 +306,9 @@ void ImageHijackCanvas::onDrawArc(const SkRect& r,
const SkPaint& paint) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ImageHijackCanvas::onDrawArc");
+ if (QuickRejectDraw(r, &paint))
+ return;
+
if (ShouldSkipImageInPaint(paint))
return;
@@ -305,6 +325,9 @@ void ImageHijackCanvas::onDrawArc(const SkRect& r,
void ImageHijackCanvas::onDrawRRect(const SkRRect& rr, const SkPaint& paint) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ImageHijackCanvas::onDrawRRect");
+ if (QuickRejectDraw(rr.rect(), &paint))
+ return;
+
if (ShouldSkipImageInPaint(paint))
return;
@@ -339,4 +362,16 @@ bool ImageHijackCanvas::ShouldSkipImageInPaint(const SkPaint& paint) const {
return image ? ShouldSkipImage(image) : false;
}
+bool ImageHijackCanvas::QuickRejectDraw(const SkRect& rect,
+ const SkPaint* paint) const {
+ if (nullptr == paint || paint->canComputeFastBounds()) {
+ SkRect tmp = rect;
+ if (paint)
+ paint->computeFastBounds(tmp, &tmp);
+ return quickReject(tmp);
+ }
+
+ return false;
+}
+
} // namespace cc
« no previous file with comments | « cc/raster/image_hijack_canvas.h ('k') | cc/raster/image_hijack_canvas_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698