Clean up dead clear() code in SkRecord.
This removes the SkRecords::Clear struct and everything that refers to it.
Notice there is nothing actually creating a Clear, which means this is all
dead code.
Now that all ops obey the clip, I don't think we need the weird
inflate-empty-to-epsilon hack for BBH queries.
BUG=skia:
Review URL: https://codereview.chromium.org/835813002
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp
index 08c9154..6b1de4c 100644
--- a/src/core/SkRecordDraw.cpp
+++ b/src/core/SkRecordDraw.cpp
@@ -26,9 +26,7 @@
// lets us query the BBH.
SkRect query;
if (!canvas->getClipBounds(&query)) {
- // We want to make sure our query rectangle is never totally empty.
- // Clear ignores the clip, so it must draw even if the clip is logically empty.
- query = SkRect::MakeWH(SK_ScalarNearlyZero, SK_ScalarNearlyZero);
+ query.setEmpty();
}
SkTDArray<unsigned> ops;
@@ -81,7 +79,6 @@
DRAW(Restore, restore());
DRAW(Save, save());
DRAW(SaveLayer, saveLayer(r.bounds, r.paint, r.flags));
-DRAW(Clear, clear(r.color));
DRAW(SetMatrix, setMatrix(SkMatrix::Concat(fInitialCTM, r.matrix)));
DRAW(ClipPath, clipPath(r.path, r.opAA.op, r.opAA.aa));
@@ -218,7 +215,6 @@
fCTM->mapRect(&rect);
// Nothing can draw outside the current clip.
- // (Only bounded ops call into this method, so oddballs like Clear don't matter here.)
if (!rect.intersect(fCurrentClipBounds)) {
return Bounds::MakeEmpty();
}
@@ -388,7 +384,6 @@
// FIXME: this method could use better bounds
Bounds bounds(const DrawText&) const { return fCurrentClipBounds; }
- Bounds bounds(const Clear&) const { return fCullRect; } // Ignores the clip.
Bounds bounds(const DrawPaint&) const { return fCurrentClipBounds; }
Bounds bounds(const NoOp&) const { return Bounds::MakeEmpty(); } // NoOps don't draw.
diff --git a/src/core/SkRecords.h b/src/core/SkRecords.h
index 1cf29f2..aab3949 100644
--- a/src/core/SkRecords.h
+++ b/src/core/SkRecords.h
@@ -35,7 +35,6 @@
M(ClipRRect) \
M(ClipRect) \
M(ClipRegion) \
- M(Clear) \
M(BeginCommentGroup) \
M(AddComment) \
M(EndCommentGroup) \
@@ -236,9 +235,6 @@
RECORD3(ClipRect, SkIRect, devBounds, SkRect, rect, RegionOpAndAA, opAA);
RECORD3(ClipRegion, SkIRect, devBounds, SkRegion, region, SkRegion::Op, op);
-// Picture version 37 was last to record this op-code; clear is now non-virtual
-RECORD1(Clear, SkColor, color);
-
RECORD1(BeginCommentGroup, PODArray<char>, description);
RECORD2(AddComment, PODArray<char>, key, PODArray<char>, value);
RECORD0(EndCommentGroup);
diff --git a/tests/PictureBBHTest.cpp b/tests/PictureBBHTest.cpp
index 562d9b5..ac16dbb 100644
--- a/tests/PictureBBHTest.cpp
+++ b/tests/PictureBBHTest.cpp
@@ -63,7 +63,7 @@
};
// Test to verify the playback of an empty picture
-//
+//
class DrawEmptyPictureBBHTest : public PictureBBHTestBase {
public:
DrawEmptyPictureBBHTest()
@@ -78,7 +78,7 @@
//
class EmptyClipPictureBBHTest : public PictureBBHTestBase {
public:
- EmptyClipPictureBBHTest()
+ EmptyClipPictureBBHTest()
: PictureBBHTestBase(2, 2, 3, 3) { }
virtual void doTest(SkCanvas& playbackCanvas, SkCanvas& recordingCanvas) SK_OVERRIDE {
@@ -101,35 +101,3 @@
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);
- SkAutoTUnref<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);
- SkAutoTUnref<SkPicture> dstPic(dst.endRecording());
-
- // Should be Clip - Save - Clear - Restore.
- // Buggy implementations might return 1 (just Clip) or 3 (Clip - Save - Restore).
- // TODO: can we just search that it contains "clear"? <reed>
- REPORTER_ASSERT(r, dstPic->approximateOpCount() == 4 || dstPic->approximateOpCount() == 2);
-}
-
-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);
-}