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/DeferredCanvasBench.cpp b/bench/DeferredCanvasBench.cpp
index 98a1e60..5ef64db 100644
--- a/bench/DeferredCanvasBench.cpp
+++ b/bench/DeferredCanvasBench.cpp
@@ -29,8 +29,12 @@
SkDevice *device = canvas->getDevice()->createCompatibleDevice(
SkBitmap::kARGB_8888_Config, CANVAS_WIDTH, CANVAS_HEIGHT, false);
- SkDeferredCanvas deferredCanvas(device);
-
+ SkAutoTUnref<SkDeferredCanvas> deferredCanvas(
+#if SK_DEFERRED_CANVAS_USES_FACTORIES
+ SkDeferredCanvas::Create(device));
+#else
+ SkNEW_ARGS(SkDeferredCanvas, (device)));
+#endif
device->unref();
initDeferredCanvas(deferredCanvas);
@@ -40,12 +44,12 @@
}
finalizeDeferredCanvas(deferredCanvas);
- deferredCanvas.flush();
+ deferredCanvas->flush();
}
- virtual void initDeferredCanvas(SkDeferredCanvas& canvas) = 0;
- virtual void drawInDeferredCanvas(SkDeferredCanvas& canvas) = 0;
- virtual void finalizeDeferredCanvas(SkDeferredCanvas& canvas) = 0;
+ virtual void initDeferredCanvas(SkDeferredCanvas* canvas) = 0;
+ virtual void drawInDeferredCanvas(SkDeferredCanvas* canvas) = 0;
+ virtual void finalizeDeferredCanvas(SkDeferredCanvas* canvas) = 0;
SkString fName;
@@ -81,25 +85,25 @@
};
protected:
- virtual void initDeferredCanvas(SkDeferredCanvas& canvas) SK_OVERRIDE {
- canvas.setNotificationClient(&fNotificationClient);
+ virtual void initDeferredCanvas(SkDeferredCanvas* canvas) SK_OVERRIDE {
+ canvas->setNotificationClient(&fNotificationClient);
}
- virtual void drawInDeferredCanvas(SkDeferredCanvas& canvas) SK_OVERRIDE {
+ virtual void drawInDeferredCanvas(SkDeferredCanvas* canvas) SK_OVERRIDE {
SkRect rect;
rect.setXYWH(0, 0, 10, 10);
SkPaint paint;
for (int i = 0; i < M; i++) {
- canvas.save(SkCanvas::kMatrixClip_SaveFlag);
- canvas.translate(SkIntToScalar(i * 27 % CANVAS_WIDTH), SkIntToScalar(i * 13 % CANVAS_HEIGHT));
- canvas.drawRect(rect, paint);
- canvas.restore();
+ canvas->save(SkCanvas::kMatrixClip_SaveFlag);
+ canvas->translate(SkIntToScalar(i * 27 % CANVAS_WIDTH), SkIntToScalar(i * 13 % CANVAS_HEIGHT));
+ canvas->drawRect(rect, paint);
+ canvas->restore();
}
}
- virtual void finalizeDeferredCanvas(SkDeferredCanvas& canvas) SK_OVERRIDE {
- canvas.clear(0x0);
- canvas.setNotificationClient(NULL);
+ virtual void finalizeDeferredCanvas(SkDeferredCanvas* canvas) SK_OVERRIDE {
+ canvas->clear(0x0);
+ canvas->setNotificationClient(NULL);
}
private: