Ensure that SkDeferredCanvas::onCreateCompatibleDevice unrefs its temp device.
Also update my GM to use createCompatibleDevice.
Review URL: https://codereview.appspot.com/6357061
git-svn-id: http://skia.googlecode.com/svn/trunk@4450 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/extractbitmap.cpp b/gm/extractbitmap.cpp
index 050d7e7..68f6d44 100644
--- a/gm/extractbitmap.cpp
+++ b/gm/extractbitmap.cpp
@@ -72,13 +72,11 @@
canvas->translate(0, SkIntToScalar(bitmap.height() + 20));
canvas->drawBitmap(subset, 0, 0);
}
-/*
+
// Now do the same but with a device bitmap as source image
- SkRefPtr<SkDevice> primaryDevice(canvas->getDevice());
- SkRefPtr<SkDevice> secondDevice(canvas->createCompatibleDevice(
+ SkAutoTUnref<SkDevice> secondDevice(canvas->createCompatibleDevice(
SkBitmap::kARGB_8888_Config, bitmap.width(),
bitmap.height(), true));
- secondDevice->unref();
SkCanvas secondCanvas(secondDevice.get());
secondCanvas.writePixels(bitmap, 0, 0);
@@ -91,7 +89,7 @@
canvas->drawBitmap(deviceBitmap, 0, 0);
canvas->drawBitmap(deviceSubset, 0, 0);
-*/
+
}
private:
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
index 096120a..9afd580 100644
--- a/src/utils/SkDeferredCanvas.cpp
+++ b/src/utils/SkDeferredCanvas.cpp
@@ -589,9 +589,9 @@
// Save layer usage not supported, and not required by SkDeferredCanvas.
SkASSERT(usage != kSaveLayer_Usage);
// Create a compatible non-deferred device.
- SkDevice* compatibleDevice =
- fImmediateDevice->createCompatibleDevice(config, width, height,
- isOpaque);
+ SkAutoTUnref<SkDevice> compatibleDevice
+ (fImmediateDevice->createCompatibleDevice(config, width, height,
+ isOpaque));
return SkNEW_ARGS(DeferredDevice, (compatibleDevice, fDeviceContext));
}