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);
-}
