Changing SkDeferredCanvas to use factories for creation

The objective of this change is to remove all calls to 
SkCanvas::setDevice. The factory API is hidden behind
a build flag in order to ease the roll into chromium.

A side-effect of the factory pattern is that it will
no longer be possible to allocate a SkDeferredCanvas on
the stack.  This changes nothing for chrome, but it
impacts skia test programs.

Review URL: https://codereview.chromium.org/16040002

git-svn-id: http://skia.googlecode.com/svn/trunk@9298 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/DeferredSurfaceCopyBench.cpp b/bench/DeferredSurfaceCopyBench.cpp
index ac58856..483507b 100644
--- a/bench/DeferredSurfaceCopyBench.cpp
+++ b/bench/DeferredSurfaceCopyBench.cpp
@@ -53,21 +53,26 @@
         {
             surface = SkSurface::NewRaster(info);
         }
-        SkDeferredCanvas drawingCanvas(surface);
+        SkAutoTUnref<SkDeferredCanvas> drawingCanvas(
+#if SK_DEFERRED_CANVAS_USES_FACTORIES
+            SkDeferredCanvas::Create(surface));
+#else
+            SkNEW_ARGS(SkDeferredCanvas, (surface)));
+#endif
         surface->unref();
 
         for (int iteration = 0; iteration < N; iteration++) {
-            drawingCanvas.clear(0);
-            SkAutoTUnref<SkImage> image(drawingCanvas.newImageSnapshot());
+            drawingCanvas->clear(0);
+            SkAutoTUnref<SkImage> image(drawingCanvas->newImageSnapshot());
             SkPaint paint;
             if (!fDiscardableContents) {
                 // If paint is not opaque, prior canvas contents are
                 // not discardable because they are needed for compositing.
                 paint.setAlpha(127);
             }
-            drawingCanvas.drawRect(fullCanvasRect, paint);
+            drawingCanvas->drawRect(fullCanvasRect, paint);
             // Trigger copy on write, which should be faster in the discardable case.
-            drawingCanvas.flush();
+            drawingCanvas->flush();
         }
     }