diff options
Diffstat (limited to 'tests/PictureBBHTest.cpp')
-rw-r--r-- | tests/PictureBBHTest.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/tests/PictureBBHTest.cpp b/tests/PictureBBHTest.cpp index 3ff5625686..fa02437432 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); +} |