Index: skia/ext/platform_device.cc |
=================================================================== |
--- skia/ext/platform_device.cc (revision 96545) |
+++ skia/ext/platform_device.cc (working copy) |
@@ -9,12 +9,32 @@ |
namespace skia { |
namespace { |
+ |
const char* kDevicePlatformBehaviour = "CrDevicePlatformBehaviour"; |
+ |
+void* PlatformDevicePtrProc(void* ptr, bool doRef) { |
+ SkASSERT(ptr); |
+ PlatformDevice* platform_device = reinterpret_cast<PlatformDevice*>(ptr); |
+ |
+ if (!doRef) { |
+ delete platform_device; |
+ return NULL; |
+ } |
+ |
+ return ptr; |
} |
-void SetPlatformDevice(SkDevice* device, PlatformDevice* platform_behaviour) { |
+} |
+ |
+void SetPlatformDevice(SkDevice* device, PlatformDevice* platform_behaviour, |
+ bool transfer_ownership) { |
SkMetaData& meta_data = device->getMetaData(); |
- meta_data.setPtr(kDevicePlatformBehaviour, platform_behaviour); |
+ if (transfer_ownership) { |
+ meta_data.setPtr(kDevicePlatformBehaviour, platform_behaviour, |
+ PlatformDevicePtrProc); |
+ } else { |
+ meta_data.setPtr(kDevicePlatformBehaviour, platform_behaviour); |
+ } |
} |
PlatformDevice* GetPlatformDevice(SkDevice* device) { |