Use smart pointers to make SkPictureRecorder lifetimes less manual.

BUG=skia:
R=robertphillips@google.com

Review URL: https://codereview.chromium.org/344253005
diff --git a/include/core/SkPictureRecorder.h b/include/core/SkPictureRecorder.h
index cf17e1a..bd22d55 100644
--- a/include/core/SkPictureRecorder.h
+++ b/include/core/SkPictureRecorder.h
@@ -25,7 +25,7 @@
 
 class SK_API SkPictureRecorder : SkNoncopyable {
 public:
-    SkPictureRecorder() : fPictureRecord(NULL), fRecorder(NULL), fRecord(NULL) { }
+    SkPictureRecorder();
     ~SkPictureRecorder();
 
     /** Returns the canvas that records the drawing commands.
@@ -77,15 +77,15 @@
     friend class SkPictureRecorderReplayTester; // for unit testing
     void partialReplay(SkCanvas* canvas) const;
 
-    int                     fWidth;
-    int                     fHeight;
+    int fWidth;
+    int fHeight;
 
-    // Both ref counted.  One of these two will be non-null:
-    SkPictureRecord*        fPictureRecord;   // beginRecording()
-    SkRecorder*             fRecorder;        // EXPERIMENTAL_beginRecording()
+    // One of these two canvases will be non-NULL.
+    SkAutoTUnref<SkPictureRecord> fPictureRecord;  // beginRecording()
+    SkAutoTUnref<SkRecorder>      fRecorder;       // EXPERIMENTAL_beginRecording()
 
-    // Not refcounted.  Used by EXPERIMENTAL_beginRecording().
-    SkRecord* fRecord;
+    // Used by EXPERIMENTAL_beginRecording().
+    SkAutoTDelete<SkRecord> fRecord;
 
     typedef SkNoncopyable INHERITED;
 };
diff --git a/src/core/SkPictureRecorder.cpp b/src/core/SkPictureRecorder.cpp
index f1423e3..d0ce0a1 100644
--- a/src/core/SkPictureRecorder.cpp
+++ b/src/core/SkPictureRecorder.cpp
@@ -14,21 +14,13 @@
 #include "SkRecorder.h"
 #include "SkTypes.h"
 
-SkPictureRecorder::~SkPictureRecorder() {
-    this->reset();
-}
+SkPictureRecorder::SkPictureRecorder() {}
 
-void SkPictureRecorder::reset() {
-    SkSafeSetNull(fPictureRecord);
-    SkSafeSetNull(fRecorder);
-    SkDELETE(fRecord);
-    fRecord = NULL;
-}
+SkPictureRecorder::~SkPictureRecorder() {}
 
 SkCanvas* SkPictureRecorder::beginRecording(int width, int height,
                                             SkBBHFactory* bbhFactory /* = NULL */,
                                             uint32_t recordFlags /* = 0 */) {
-    this->reset();  // terminate any prior recording(s)
     fWidth = width;
     fHeight = height;
 
@@ -37,9 +29,9 @@
     if (NULL != bbhFactory) {
         SkAutoTUnref<SkBBoxHierarchy> tree((*bbhFactory)(width, height));
         SkASSERT(NULL != tree);
-        fPictureRecord = SkNEW_ARGS(SkBBoxHierarchyRecord, (size, recordFlags, tree.get()));
+        fPictureRecord.reset(SkNEW_ARGS(SkBBoxHierarchyRecord, (size, recordFlags, tree.get())));
     } else {
-        fPictureRecord = SkNEW_ARGS(SkPictureRecord, (size, recordFlags));
+        fPictureRecord.reset(SkNEW_ARGS(SkPictureRecord, (size, recordFlags)));
     }
 
     fPictureRecord->beginRecording();
@@ -48,43 +40,40 @@
 
 SkCanvas* SkPictureRecorder::EXPERIMENTAL_beginRecording(int width, int height,
                                                          SkBBHFactory* bbhFactory /* = NULL */) {
-    this->reset();
     fWidth = width;
     fHeight = height;
 
     // TODO: plumb bbhFactory through
-    fRecord   = SkNEW(SkRecord);
-    fRecorder = SkNEW_ARGS(SkRecorder, (fRecord, width, height));
+    fRecord.reset(SkNEW(SkRecord));
+    fRecorder.reset(SkNEW_ARGS(SkRecorder, (fRecord.get(), width, height)));
     return this->getRecordingCanvas();
 }
 
 SkCanvas* SkPictureRecorder::getRecordingCanvas() {
-    if (NULL != fRecorder) {
-        return fRecorder;
+    if (NULL != fRecorder.get()) {
+        return fRecorder.get();
     }
-    return fPictureRecord;
+    return fPictureRecord.get();
 }
 
 SkPicture* SkPictureRecorder::endRecording() {
     SkPicture* picture = NULL;
 
-    if (NULL != fRecorder) {
-        // TODO: picture = SkNEW_ARGS(SkPicture, (fWidth, fHeight, fRecord));
-        //       fRecord = NULL;
+    if (NULL != fRecord.get()) {
+        // TODO: picture = SkNEW_ARGS(SkPicture, (fWidth, fHeight, fRecord.detach()));
     }
 
-    if (NULL != fPictureRecord) {
+    if (NULL != fPictureRecord.get()) {
         fPictureRecord->endRecording();
         const bool deepCopyOps = false;
-        picture = SkNEW_ARGS(SkPicture, (fWidth, fHeight, *fPictureRecord, deepCopyOps));
+        picture = SkNEW_ARGS(SkPicture, (fWidth, fHeight, *fPictureRecord.get(), deepCopyOps));
     }
 
-    this->reset();
     return picture;
 }
 
 void SkPictureRecorder::internalOnly_EnableOpts(bool enableOpts) {
-    if (NULL != fPictureRecord) {
+    if (NULL != fPictureRecord.get()) {
         fPictureRecord->internalOnly_EnableOpts(enableOpts);
     }
 }
@@ -94,13 +83,13 @@
         return;
     }
 
-    if (NULL != fRecorder) {
+    if (NULL != fRecord.get()) {
         SkRecordDraw(*fRecord, canvas);
     }
 
-    if (NULL != fPictureRecord) {
+    if (NULL != fPictureRecord.get()) {
         const bool deepCopyOps = true;
-        SkPicture picture(fWidth, fHeight, *fPictureRecord, deepCopyOps);
+        SkPicture picture(fWidth, fHeight, *fPictureRecord.get(), deepCopyOps);
         picture.draw(canvas);
     }
 }