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

Unified Diff: tests/PictureBBHTest.cpp

Issue 732723004: Make sure pictures draw Clears even when the clip is empty. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: only if empty Created 6 years, 1 month 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
« src/core/SkRecordDraw.cpp ('K') | « src/core/SkRecordDraw.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/PictureBBHTest.cpp
diff --git a/tests/PictureBBHTest.cpp b/tests/PictureBBHTest.cpp
index 3ff5625686b298fdcd99357222d1b9daa066ab9c..2caa4b3886b4543048b264f91c91db4fbf4c0bb3 100644
--- a/tests/PictureBBHTest.cpp
+++ b/tests/PictureBBHTest.cpp
@@ -49,7 +49,9 @@ private:
SkCanvas playbackCanvas(fResultBitmap);
playbackCanvas.clear(SK_ColorGREEN);
SkPictureRecorder recorder;
- SkCanvas* recordCanvas = recorder.beginRecording(SkIntToScalar(fPictureWidth), SkIntToScalar(fPictureHeight), factory);
+ SkCanvas* recordCanvas = recorder.beginRecording(SkIntToScalar(fPictureWidth),
+ SkIntToScalar(fPictureHeight),
+ factory);
this->doTest(playbackCanvas, *recordCanvas);
SkAutoTUnref<SkPicture> picture(recorder.endRecording());
playbackCanvas.drawPicture(picture);
@@ -99,3 +101,37 @@ DEF_TEST(PictureBBH, reporter) {
EmptyClipPictureBBHTest emptyClipPictureTest;
emptyClipPictureTest.run(reporter);
}
+
+static void test_clear(skiatest::Reporter* r, SkBBHFactory* factory) {
+ // Make a single red pixel.
+ SkBitmap bm;
+ bm.allocN32Pixels(1,1);
+ SkCanvas dst(bm);
+ dst.clear(SK_ColorRED);
+
+ // Clip our canvas down to empty.
+ dst.clipRect(SkRect::MakeWH(0,0));
+
+ // clear() should still set that pixel to true, because it ignores the clip.
+ dst.clear(SK_ColorBLUE);
+ REPORTER_ASSERT(r, SK_ColorBLUE == bm.getColor(0,0));
+
+ // Should also work if we do the draw via an SkPicture.
+ SkPictureRecorder rec;
+ SkCanvas* src = rec.beginRecording(1,1, factory);
+ src->clear(SK_ColorGREEN);
+ SkAutoTDelete<SkPicture> pic(rec.endRecording());
+ pic->playback(&dst);
+ REPORTER_ASSERT(r, SK_ColorGREEN == bm.getColor(0,0));
+}
+
+DEF_TEST(PictureBBH_Clear, r) {
+ test_clear(r, NULL);
+
+ SkTileGridFactory::TileGridInfo grid = { {1,1}, {0,0}, {0,0} };
+ SkTileGridFactory tilegrid(grid);
+ test_clear(r, &tilegrid);
+
+ SkRTreeFactory rtree;
+ test_clear(r, &rtree);
+}
« src/core/SkRecordDraw.cpp ('K') | « src/core/SkRecordDraw.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698