Fix bug & add code to catch ImageFilter clearing bugs
authorrobertphillips <robertphillips@google.com>
Thu, 12 May 2016 17:46:39 +0000 (10:46 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 12 May 2016 17:46:40 +0000 (10:46 -0700)
Follow on to https://codereview.chromium.org/1969193002/ (SkPictureImageFilter - clear local canvas before use)

BUG=610667

GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1972213002

Review-Url: https://codereview.chromium.org/1972213002

gm/pictureimagefilter.cpp
src/core/SkSpecialSurface.cpp
src/effects/SkXfermodeImageFilter.cpp

index 30586b3..244ed87 100644 (file)
@@ -26,7 +26,6 @@ static void fill_rect_filtered(SkCanvas* canvas,
 static sk_sp<SkPicture> make_picture() {
     SkPictureRecorder recorder;
     SkCanvas* canvas = recorder.beginRecording(100, 100, nullptr, 0);
-    canvas->clear(SK_ColorBLACK);
     SkPaint paint;
     paint.setAntiAlias(true);
     sk_tool_utils::set_portable_typeface(&paint);
index 335e206..dee9811 100644 (file)
@@ -74,6 +74,9 @@ public:
 
         fCanvas.reset(new SkCanvas(fBitmap, this->props()));
         fCanvas->clipRect(SkRect::Make(subset));
+#ifdef SK_IS_BOT
+        fCanvas->clear(SK_ColorRED);  // catch any imageFilter sloppiness
+#endif
     }
 
     ~SkSpecialSurface_Raster() override { }
@@ -130,6 +133,9 @@ public:
 
         fCanvas.reset(new SkCanvas(device.get()));
         fCanvas->clipRect(SkRect::Make(subset));
+#ifdef SK_IS_BOT
+        fCanvas->clear(SK_ColorRED);  // catch any imageFilter sloppiness
+#endif
     }
 
     ~SkSpecialSurface_Gpu() override { }
index 99ce24f..d4756e8 100644 (file)
@@ -104,6 +104,8 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter::onFilterImage(SkSpecialImage* sourc
     SkCanvas* canvas = surf->getCanvas();
     SkASSERT(canvas);
 
+    canvas->clear(0x0); // can't count on background to fully clear the background
+
     canvas->translate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.top()));
 
     SkPaint paint;