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

Unified Diff: cc/playback/image_hijack_canvas.cc

Issue 2668873002: cc: Add checker-imaging support to TileManager. (Closed)
Patch Set: remove include Created 3 years, 10 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/playback/image_hijack_canvas.h ('k') | cc/playback/image_hijack_canvas_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/playback/image_hijack_canvas.cc
diff --git a/cc/playback/image_hijack_canvas.cc b/cc/playback/image_hijack_canvas.cc
index 8262d51bdbfe3d720bcf0096615ab04690e8c61f..bd26d3237c31fa9e9864a6317bcb6978344da80f 100644
--- a/cc/playback/image_hijack_canvas.cc
+++ b/cc/playback/image_hijack_canvas.cc
@@ -119,12 +119,20 @@ class ScopedImagePaint {
SkPaint paint_;
};
+const SkImage* GetImageInPaint(const SkPaint& paint) {
+ SkShader* shader = paint.getShader();
+ return shader ? shader->isAImage(nullptr, nullptr) : nullptr;
+}
+
} // namespace
ImageHijackCanvas::ImageHijackCanvas(int width,
int height,
- ImageDecodeCache* image_decode_cache)
- : SkNWayCanvas(width, height), image_decode_cache_(image_decode_cache) {}
+ ImageDecodeCache* image_decode_cache,
+ const ImageIdFlatSet* images_to_skip)
+ : SkNWayCanvas(width, height),
+ image_decode_cache_(image_decode_cache),
+ images_to_skip_(images_to_skip) {}
void ImageHijackCanvas::onDrawPicture(const SkPicture* picture,
const SkMatrix* matrix,
@@ -139,10 +147,14 @@ void ImageHijackCanvas::onDrawImage(const SkImage* image,
SkScalar y,
const SkPaint* paint) {
if (!image->isLazyGenerated()) {
+ DCHECK(!ShouldSkipImage(image));
SkNWayCanvas::onDrawImage(image, x, y, paint);
return;
}
+ if (ShouldSkipImage(image))
+ return;
+
SkMatrix ctm = getTotalMatrix();
ScopedDecodedImageLock scoped_lock(
@@ -173,10 +185,14 @@ void ImageHijackCanvas::onDrawImageRect(const SkImage* image,
const SkPaint* paint,
SrcRectConstraint constraint) {
if (!image->isLazyGenerated()) {
+ DCHECK(!ShouldSkipImage(image));
SkNWayCanvas::onDrawImageRect(image, src, dst, paint, constraint);
return;
}
+ if (ShouldSkipImage(image))
+ return;
+
SkRect src_storage;
if (!src) {
src_storage = SkRect::MakeIWH(image->width(), image->height());
@@ -209,6 +225,9 @@ void ImageHijackCanvas::onDrawImageRect(const SkImage* image,
}
void ImageHijackCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) {
+ if (ShouldSkipImageInPaint(paint))
+ return;
+
base::Optional<ScopedImagePaint> image_paint =
ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint);
if (!image_paint.has_value()) {
@@ -219,6 +238,9 @@ void ImageHijackCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) {
}
void ImageHijackCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
+ if (ShouldSkipImageInPaint(paint))
+ return;
+
base::Optional<ScopedImagePaint> image_paint =
ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint);
if (!image_paint.has_value()) {
@@ -229,6 +251,9 @@ void ImageHijackCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
}
void ImageHijackCanvas::onDrawOval(const SkRect& r, const SkPaint& paint) {
+ if (ShouldSkipImageInPaint(paint))
+ return;
+
base::Optional<ScopedImagePaint> image_paint =
ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint);
if (!image_paint.has_value()) {
@@ -243,6 +268,9 @@ void ImageHijackCanvas::onDrawArc(const SkRect& r,
SkScalar sweep_angle,
bool use_center,
const SkPaint& paint) {
+ if (ShouldSkipImageInPaint(paint))
+ return;
+
base::Optional<ScopedImagePaint> image_paint =
ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint);
if (!image_paint.has_value()) {
@@ -254,6 +282,9 @@ void ImageHijackCanvas::onDrawArc(const SkRect& r,
}
void ImageHijackCanvas::onDrawRRect(const SkRRect& rr, const SkPaint& paint) {
+ if (ShouldSkipImageInPaint(paint))
+ return;
+
base::Optional<ScopedImagePaint> image_paint =
ScopedImagePaint::TryCreate(image_decode_cache_, getTotalMatrix(), paint);
if (!image_paint.has_value()) {
@@ -271,4 +302,13 @@ void ImageHijackCanvas::onDrawImageNine(const SkImage* image,
NOTREACHED();
}
+bool ImageHijackCanvas::ShouldSkipImage(const SkImage* image) const {
+ return images_to_skip_->find(image->uniqueID()) != images_to_skip_->end();
+}
+
+bool ImageHijackCanvas::ShouldSkipImageInPaint(const SkPaint& paint) const {
+ const SkImage* image = GetImageInPaint(paint);
+ return image ? ShouldSkipImage(image) : false;
+}
+
} // namespace cc
« no previous file with comments | « cc/playback/image_hijack_canvas.h ('k') | cc/playback/image_hijack_canvas_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698