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: Decouple 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
« no previous file with comments | « 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..fa02437432bb4aa621e67904d6c28f315fd79dbe 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,34 @@ DEF_TEST(PictureBBH, reporter) {
EmptyClipPictureBBHTest emptyClipPictureTest;
emptyClipPictureTest.run(reporter);
}
+
+static void test_clear(skiatest::Reporter* r, SkBBHFactory* factory) {
+ // SkPicture should always call clear()s on the target canvas, even if its clip is empty.
+ SkPictureRecorder src, dst;
+
+ // A picture that's just clear().
+ src.beginRecording(1,1, factory)
+ ->clear(SK_ColorGREEN);
+ SkAutoTDelete<SkPicture> srcPic(src.endRecording());
+
+ // A target canvas with an empty clip.
+ SkCanvas* c = dst.beginRecording(1,1, NULL);
+ c->clipRect(SkRect::MakeEmpty());
+ srcPic->playback(c);
+ SkAutoTDelete<SkPicture> dstPic(dst.endRecording());
+
+ // Should be Clip - Save - Clear - Restore.
+ // Buggy implementations might return 1 (just Clip) or 3 (Clip - Save - Restore).
+ REPORTER_ASSERT(r, dstPic->approximateOpCount() == 4);
+}
+
+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);
+}
« no previous file with comments | « src/core/SkRecordDraw.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698