diff --git a/dm/DMRecordTask.cpp b/dm/DMRecordTask.cpp
index 8241ac5..28633f2 100644
--- a/dm/DMRecordTask.cpp
+++ b/dm/DMRecordTask.cpp
@@ -30,8 +30,7 @@
 void RecordTask::draw() {
     // Record into an SkRecord.
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record,
-                        fReference.width(), fReference.height());
+    SkRecorder recorder(&record, fReference.width(), fReference.height());
 
     if (fGM.get()) {
         recorder.concat(fGM->getInitialTransform());
diff --git a/src/record/SkRecorder.cpp b/src/record/SkRecorder.cpp
index d296184..74101c1 100644
--- a/src/record/SkRecorder.cpp
+++ b/src/record/SkRecorder.cpp
@@ -9,8 +9,8 @@
 #include "SkPicture.h"
 
 // SkCanvas will fail in mysterious ways if it doesn't know the real width and height.
-SkRecorder::SkRecorder(SkRecorder::Mode mode, SkRecord* record, int width, int height)
-    : SkCanvas(width, height), fMode(mode), fRecord(record) {}
+SkRecorder::SkRecorder(SkRecord* record, int width, int height)
+    : SkCanvas(width, height), fRecord(record) {}
 
 void SkRecorder::forgetRecord() {
     fRecord = NULL;
@@ -20,8 +20,8 @@
 #define APPEND(T, ...) \
         SkNEW_PLACEMENT_ARGS(fRecord->append<SkRecords::T>(), SkRecords::T, (__VA_ARGS__))
 
-// For methods which must call back into SkCanvas in kReadWrite_Mode.
-#define INHERITED(method, ...) if (fMode == kReadWrite_Mode) this->SkCanvas::method(__VA_ARGS__)
+// For methods which must call back into SkCanvas.
+#define INHERITED(method, ...) this->SkCanvas::method(__VA_ARGS__)
 
 // The structs we're creating all copy their constructor arguments.  Given the way the SkRecords
 // framework works, sometimes they happen to technically be copied twice, which is fine and elided
diff --git a/src/record/SkRecorder.h b/src/record/SkRecorder.h
index e6bddd7..cee25c1 100644
--- a/src/record/SkRecorder.h
+++ b/src/record/SkRecorder.h
@@ -16,17 +16,8 @@
 
 class SkRecorder : public SkCanvas {
 public:
-    // SkRecorder can work in two modes:
-    //   write-only: only a core subset of SkCanvas operations (save/restore, clip, transform, draw)
-    //   are supported, and all of the readback methods on SkCanvas will probably fail or lie.
-    //
-    //   read-write: all methods should behave with similar semantics to SkCanvas.
-    //
-    // Write-only averages 10-20% faster, but you can't sensibly inspect the canvas while recording.
-    enum Mode { kWriteOnly_Mode, kReadWrite_Mode };
-
     // Does not take ownership of the SkRecord.
-    SkRecorder(Mode mode, SkRecord*, int width, int height);
+    SkRecorder(SkRecord*, int width, int height);
 
     // Make SkRecorder forget entirely about its SkRecord*; all calls to SkRecorder will fail.
     void forgetRecord();
@@ -114,7 +105,6 @@
     template <typename T>
     T* copy(const T[], unsigned count);
 
-    const Mode fMode;
     SkRecord* fRecord;
 };
 
diff --git a/src/record/SkRecording.cpp b/src/record/SkRecording.cpp
index 5774362..ad57aa2 100644
--- a/src/record/SkRecording.cpp
+++ b/src/record/SkRecording.cpp
@@ -25,7 +25,7 @@
 
 SkRecording::SkRecording(int width, int height)
     : fRecord(SkNEW(SkRecord))
-    , fRecorder(SkNEW_ARGS(SkRecorder, (SkRecorder::kReadWrite_Mode, fRecord.get(), width, height)))
+    , fRecorder(SkNEW_ARGS(SkRecorder, (fRecord.get(), width, height)))
     {}
 
 SkPlayback* SkRecording::releasePlayback() {
diff --git a/tests/RecordDrawTest.cpp b/tests/RecordDrawTest.cpp
index b0e55a6..b13b3a1 100644
--- a/tests/RecordDrawTest.cpp
+++ b/tests/RecordDrawTest.cpp
@@ -29,14 +29,14 @@
 // Rerecord into another SkRecord using full SkCanvas semantics,
 // tracking clips and allowing SkRecordDraw's quickReject() calls to work.
 static void record_clipped(const SkRecord& record, SkRect clip, SkRecord* clipped) {
-    SkRecorder recorder(SkRecorder::kReadWrite_Mode, clipped, W, H);
+    SkRecorder recorder(clipped, W, H);
     recorder.clipRect(clip);
     SkRecordDraw(record, &recorder);
 }
 
 DEF_TEST(RecordDraw_PosTextHQuickReject, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     draw_pos_text_h(&recorder, "This will draw.", 20);
     draw_pos_text_h(&recorder, "This won't.", 5000);
@@ -53,7 +53,7 @@
 DEF_TEST(RecordDraw_Culling, r) {
     // Record these 7 drawing commands verbatim.
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     recorder.pushCull(SkRect::MakeWH(100, 100));
         recorder.drawRect(SkRect::MakeWH(10, 10), SkPaint());
@@ -78,14 +78,14 @@
 DEF_TEST(RecordDraw_SetMatrixClobber, r) {
     // Set up an SkRecord that just scales by 2x,3x.
     SkRecord scaleRecord;
-    SkRecorder scaleCanvas(SkRecorder::kReadWrite_Mode, &scaleRecord, W, H);
+    SkRecorder scaleCanvas(&scaleRecord, W, H);
     SkMatrix scale;
     scale.setScale(2, 3);
     scaleCanvas.setMatrix(scale);
 
     // Set up an SkRecord with an initial +20, +20 translate.
     SkRecord translateRecord;
-    SkRecorder translateCanvas(SkRecorder::kReadWrite_Mode, &translateRecord, W, H);
+    SkRecorder translateCanvas(&translateRecord, W, H);
     SkMatrix translate;
     translate.setTranslate(20, 20);
     translateCanvas.setMatrix(translate);
diff --git a/tests/RecordOptsTest.cpp b/tests/RecordOptsTest.cpp
index d4ad739..6a9f08a 100644
--- a/tests/RecordOptsTest.cpp
+++ b/tests/RecordOptsTest.cpp
@@ -18,7 +18,7 @@
 
 DEF_TEST(RecordOpts_Culling, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     recorder.drawRect(SkRect::MakeWH(1000, 10000), SkPaint());
 
@@ -38,7 +38,7 @@
 
 DEF_TEST(RecordOpts_NoopCulls, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     // All should be nooped.
     recorder.pushCull(SkRect::MakeWH(200, 200));
@@ -77,7 +77,7 @@
 
 DEF_TEST(RecordOpts_StrengthReduction, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     // We can convert a drawPosText into a drawPosTextH when all the Ys are the same.
     draw_pos_text(&recorder, "This will be reduced to drawPosTextH.", true);
@@ -91,7 +91,7 @@
 
 DEF_TEST(RecordOpts_TextBounding, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     // First, get a drawPosTextH.  Here's a handy way.  Its text size will be the default (12).
     draw_pos_text(&recorder, "This will be reduced to drawPosTextH.", true);
@@ -114,7 +114,7 @@
 
 DEF_TEST(RecordOpts_NoopDrawSaveRestore, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     // The save and restore are pointless if there's only draw commands in the middle.
     recorder.save();
@@ -136,7 +136,7 @@
 
 DEF_TEST(RecordOpts_SingleNoopSaveRestore, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     recorder.save();
         recorder.clipRect(SkRect::MakeWH(200, 200));
@@ -150,7 +150,7 @@
 
 DEF_TEST(RecordOpts_NoopSaveRestores, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     // The second pass will clean up this pair after the first pass noops all the innards.
     recorder.save();
@@ -187,7 +187,7 @@
 
 DEF_TEST(RecordOpts_NoopSaveLayerDrawRestore, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, W, H);
+    SkRecorder recorder(&record, W, H);
 
     SkRect bounds = SkRect::MakeWH(100, 200);
     SkRect   draw = SkRect::MakeWH(50, 60);
diff --git a/tests/RecordPatternTest.cpp b/tests/RecordPatternTest.cpp
index b0904ab..5f4d006 100644
--- a/tests/RecordPatternTest.cpp
+++ b/tests/RecordPatternTest.cpp
@@ -17,7 +17,7 @@
     SkRecord record;
     REPORTER_ASSERT(r, !pattern.match(&record, 0));
 
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1200);
+    SkRecorder recorder(&record, 1920, 1200);
 
     // Build up a save-clip-restore block.  The pattern will match only it's complete.
     recorder.save();
@@ -37,7 +37,7 @@
     SaveClipRectRestore pattern;
 
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1200);
+    SkRecorder recorder(&record, 1920, 1200);
 
     // There will be two save-clipRect-restore blocks [0,3) and [3,6).
     for (int i = 0; i < 2; i++) {
@@ -60,7 +60,7 @@
     SaveClipRectRestore pattern;
 
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1200);
+    SkRecorder recorder(&record, 1920, 1200);
 
     recorder.save();
         recorder.clipRect(SkRect::MakeWH(300, 200));
@@ -74,7 +74,7 @@
     Pattern3<Is<Save>, Star<Is<ClipRect> >, Is<Restore> > pattern;
 
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1200);
+    SkRecorder recorder(&record, 1920, 1200);
 
     recorder.save();
     recorder.restore();
@@ -96,7 +96,7 @@
     Pattern3<Is<Save>, IsDraw, Is<Restore> > pattern;
 
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1200);
+    SkRecorder recorder(&record, 1920, 1200);
 
     recorder.save();
         recorder.clipRect(SkRect::MakeWH(300, 200));
@@ -135,7 +135,7 @@
              Is<Restore> > pattern;
 
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1200);
+    SkRecorder recorder(&record, 1920, 1200);
 
     recorder.save();
     recorder.restore();
@@ -192,7 +192,7 @@
     Pattern1<IsDraw> pattern;
 
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1200);
+    SkRecorder recorder(&record, 1920, 1200);
     recorder.saveLayer(NULL, NULL);
 
     REPORTER_ASSERT(r, !pattern.match(&record, 0));
diff --git a/tests/RecorderTest.cpp b/tests/RecorderTest.cpp
index 8fa198c..c1d9638 100644
--- a/tests/RecorderTest.cpp
+++ b/tests/RecorderTest.cpp
@@ -40,7 +40,7 @@
 
 DEF_TEST(Recorder, r) {
     SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1080);
+    SkRecorder recorder(&record, 1920, 1080);
 
     recorder.drawRect(SkRect::MakeWH(10, 10), SkPaint());
 
@@ -62,7 +62,7 @@
     REPORTER_ASSERT(r, paint.getShader()->unique());
     {
         SkRecord record;
-        SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1080);
+        SkRecorder recorder(&record, 1920, 1080);
         recorder.saveLayer(&bounds, &paint);
         REPORTER_ASSERT(r, !paint.getShader()->unique());
     }
diff --git a/tools/bench_playback.cpp b/tools/bench_playback.cpp
index 4e71995..435dd77 100644
--- a/tools/bench_playback.cpp
+++ b/tools/bench_playback.cpp
@@ -12,9 +12,7 @@
 #include "SkOSFile.h"
 #include "SkPicture.h"
 #include "SkPictureRecorder.h"
-#include "SkRecordDraw.h"
-#include "SkRecordOpts.h"
-#include "SkRecorder.h"
+#include "SkRecording.h"
 #include "SkStream.h"
 #include "SkString.h"
 
@@ -33,14 +31,28 @@
     return ms;
 }
 
-static void bench(SkPMColor* scratch, SkPicture& src, const char* name) {
-    // We don't use the public SkRecording interface here because we need kWriteOnly_Mode.
-    // (We don't want SkPicturePlayback to be able to optimize playing into our SkRecord.)
-    SkRecord record;
-    SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, src.width(), src.height());
-    src.draw(&recorder);
+static SkPicture* rerecord_with_tilegrid(SkPicture& src) {
+    SkTileGridFactory::TileGridInfo info;
+    info.fTileInterval.set(FLAGS_tile, FLAGS_tile);
+    info.fMargin.setEmpty();
+    info.fOffset.setZero();
+    SkTileGridFactory factory(info);
 
-    SkRecordOptimize(&record);
+    SkPictureRecorder recorder;
+    src.draw(recorder.beginRecording(src.width(), src.height(), &factory,
+                                     SkPicture::kUsePathBoundsForClip_RecordingFlag));
+    return recorder.endRecording();
+}
+
+static EXPERIMENTAL::SkPlayback* rerecord_with_skr(SkPicture& src) {
+    EXPERIMENTAL::SkRecording recording(src.width(), src.height());
+    src.draw(recording.canvas());
+    return recording.releasePlayback();
+}
+
+static void bench(SkPMColor* scratch, SkPicture& src, const char* name) {
+    SkAutoTUnref<SkPicture> picture(rerecord_with_tilegrid(src));
+    SkAutoTDelete<EXPERIMENTAL::SkPlayback> record(rerecord_with_skr(src));
 
     SkAutoTDelete<SkCanvas> canvas(SkCanvas::NewRasterDirectN32(src.width(),
                                                                 src.height(),
@@ -52,9 +64,9 @@
     timer.start();
     for (int i = 0; i < FLAGS_loops; i++) {
         if (FLAGS_skr) {
-            SkRecordDraw(record, canvas.get());
+            record->draw(canvas.get());
         } else {
-            src.draw(canvas.get());
+            picture->draw(canvas.get());
         }
     }
     timer.end();
@@ -102,21 +114,7 @@
             continue;
         }
 
-        // Rerecord into a picture using a tile grid.
-        SkTileGridFactory::TileGridInfo info;
-        info.fTileInterval.set(FLAGS_tile, FLAGS_tile);
-        info.fMargin.setEmpty();
-        info.fOffset.setZero();
-        SkTileGridFactory factory(info);
-
-        SkPictureRecorder recorder;
-        SkCanvas* canvas = recorder.beginRecording(src->width(), src->height(),
-                                                   &factory,
-                                                   SkPicture::kUsePathBoundsForClip_RecordingFlag);
-        src->draw(canvas);
-        SkAutoTUnref<SkPicture> replay(recorder.endRecording());
-
-        bench(scratch.get(), *replay, filename.c_str());
+        bench(scratch.get(), *src, filename.c_str());
     }
     return failed ? 1 : 0;
 }
diff --git a/tools/dump_record.cpp b/tools/dump_record.cpp
index 14b1a5b..4fb1cf5 100644
--- a/tools/dump_record.cpp
+++ b/tools/dump_record.cpp
@@ -60,10 +60,9 @@
         const int w = src->width(), h = src->height();
 
         SkRecord record;
-        SkRecorder canvas(SkRecorder::kWriteOnly_Mode, &record, w, h);
+        SkRecorder canvas(&record, w, h);
         src->draw(&canvas);
 
-
         if (FLAGS_optimize) {
             SkRecordOptimize(&record);
         }
