Index: tests/RecordDrawTest.cpp |
diff --git a/tests/RecordDrawTest.cpp b/tests/RecordDrawTest.cpp |
index 6105c00f7f1093842d9fc2e808a753f2c7595f7b..1dcd1331311f969901053e739d9b3dc2075e3bfe 100644 |
--- a/tests/RecordDrawTest.cpp |
+++ b/tests/RecordDrawTest.cpp |
@@ -137,7 +137,7 @@ DEF_TEST(RecordDraw_BBH, r) { |
recorder.restore(); |
TestBBH bbh; |
- SkRecordFillBounds(record, &bbh); |
+ SkRecordFillBounds(SkRect::MakeWH(SkIntToScalar(W), SkIntToScalar(H)), record, &bbh); |
REPORTER_ASSERT(r, bbh.fEntries.count() == 5); |
for (int i = 0; i < bbh.fEntries.count(); i++) { |
@@ -163,14 +163,14 @@ DEF_TEST(RecordDraw_TextBounds, r) { |
recorder.drawPosText(text, bytes, pos, SkPaint()); |
TestBBH bbh; |
- SkRecordFillBounds(record, &bbh); |
+ SkRecordFillBounds(SkRect::MakeWH(SkIntToScalar(W), SkIntToScalar(H)), record, &bbh); |
REPORTER_ASSERT(r, bbh.fEntries.count() == 2); |
// We can make these next assertions confidently because SkRecordFillBounds |
// builds its bounds by overestimating font metrics in a platform-independent way. |
// If that changes, these tests will need to be more flexible. |
- REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(-110, 0, 140, 60))); |
- REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(-80, 20, 180, 100))); |
+ REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(0, 0, 140, 60))); |
+ REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(0, 20, 180, 100))); |
} |
// Base test to ensure start/stop range is respected |
@@ -251,7 +251,7 @@ DEF_TEST(RecordDraw_SaveLayerAffectsClipBounds, r) { |
// The second bug showed up as adjusting the picture bounds (0,0,50,50) by the drop shadow too. |
// The saveLayer, clipRect, and restore bounds were incorrectly (0,0,70,50). |
TestBBH bbh; |
- SkRecordFillBounds(record, &bbh); |
+ SkRecordFillBounds(SkRect::MakeWH(50, 50), record, &bbh); |
REPORTER_ASSERT(r, bbh.fEntries.count() == 4); |
REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(0, 0, 50, 50))); |
REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(0, 0, 50, 50))); |
@@ -259,6 +259,29 @@ DEF_TEST(RecordDraw_SaveLayerAffectsClipBounds, r) { |
REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[3].bounds, SkRect::MakeLTRB(0, 0, 50, 50))); |
} |
+// When a saveLayer provides an explicit bound and has a complex paint (e.g., one that |
+// affects transparent black), that bound should serve to shrink the area of the required |
+// backing store. |
+DEF_TEST(RecordDraw_SaveLayerBoundsAffectsClipBounds, r) { |
+ SkRecord record; |
+ SkRecorder recorder(&record, 50, 50); |
+ |
+ SkPaint p; |
+ p.setXfermodeMode(SkXfermode::kSrc_Mode); |
+ |
+ SkRect bounds = SkRect::MakeLTRB(10, 10, 40, 40); |
+ recorder.saveLayer(&bounds, &p); |
+ recorder.drawRect(SkRect::MakeLTRB(20, 20, 30, 30), SkPaint()); |
+ recorder.restore(); |
+ |
+ TestBBH bbh; |
+ SkRecordFillBounds(SkRect::MakeWH(50, 50), record, &bbh); |
+ REPORTER_ASSERT(r, bbh.fEntries.count() == 3); |
+ REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(10, 10, 40, 40))); |
+ REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(20, 20, 30, 30))); |
+ REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[2].bounds, SkRect::MakeLTRB(10, 10, 40, 40))); |
+} |
+ |
DEF_TEST(RecordDraw_drawImage, r){ |
class SkCanvasMock : public SkCanvas { |
public: |