diff options
author | mtklein <mtklein@chromium.org> | 2014-09-02 12:03:31 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-02 12:03:31 -0700 |
commit | 00f30bdc9e34b013da54b4406f36556c5be8d041 (patch) | |
tree | bc3dac91df9e6d0f2e610855a0ca21fb97594c6a /tests/RecordDrawTest.cpp | |
parent | aca21d6d2f9984da8f941b76f4ee11772d0e48ec (diff) |
SkRecordPartialDraw with less code duplication
BUG=skia:
R=robertphillips@google.com, mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/527423002
Diffstat (limited to 'tests/RecordDrawTest.cpp')
-rw-r--r-- | tests/RecordDrawTest.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/RecordDrawTest.cpp b/tests/RecordDrawTest.cpp index 80f645defd..11b835b0ca 100644 --- a/tests/RecordDrawTest.cpp +++ b/tests/RecordDrawTest.cpp @@ -143,3 +143,55 @@ DEF_TEST(RecordDraw_BBH, r) { REPORTER_ASSERT(r, !SkRect::MakeLTRB(+1, +1, 399, 479).contains(bbh.entries[i].bounds)); } } + +// Base test to ensure start/stop range is respected +DEF_TEST(RecordDraw_PartialStartStop, r) { + static const int kWidth = 10, kHeight = 10; + + SkRect r1 = { 0, 0, kWidth, kHeight }; + SkRect r2 = { 0, 0, kWidth, kHeight/2 }; + SkRect r3 = { 0, 0, kWidth/2, kHeight }; + SkPaint p; + + SkRecord record; + SkRecorder recorder(&record, kWidth, kHeight); + recorder.drawRect(r1, p); + recorder.drawRect(r2, p); + recorder.drawRect(r3, p); + + SkRecord rerecord; + SkRecorder canvas(&rerecord, kWidth, kHeight); + SkRecordPartialDraw(record, &canvas, r1, 1, 2); // replay just drawRect of r2 + + REPORTER_ASSERT(r, 3 == rerecord.count()); + assert_type<SkRecords::Save> (r, rerecord, 0); + assert_type<SkRecords::DrawRect> (r, rerecord, 1); + assert_type<SkRecords::Restore> (r, rerecord, 2); + + const SkRecords::DrawRect* drawRect = assert_type<SkRecords::DrawRect>(r, rerecord, 1); + REPORTER_ASSERT(r, drawRect->rect == r2); +} + +// Check that clears are converted to drawRects +DEF_TEST(RecordDraw_PartialClear, r) { + static const int kWidth = 10, kHeight = 10; + + SkRect rect = { 0, 0, kWidth, kHeight }; + + SkRecord record; + SkRecorder recorder(&record, kWidth, kHeight); + recorder.clear(SK_ColorRED); + + SkRecord rerecord; + SkRecorder canvas(&rerecord, kWidth, kHeight); + SkRecordPartialDraw(record, &canvas, rect, 0, 1); // replay just the clear + + REPORTER_ASSERT(r, 3 == rerecord.count()); + assert_type<SkRecords::Save> (r, rerecord, 0); + assert_type<SkRecords::DrawRect>(r, rerecord, 1); + assert_type<SkRecords::Restore> (r, rerecord, 2); + + const SkRecords::DrawRect* drawRect = assert_type<SkRecords::DrawRect>(r, rerecord, 1); + REPORTER_ASSERT(r, drawRect->rect == rect); + REPORTER_ASSERT(r, drawRect->paint.getColor() == SK_ColorRED); +} |