Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index 787757c3b86f62847ec3ae99a27747bd0553b414..2cdc0856c37f7f75d66496e831c65a20809e3c60 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -306,7 +306,8 @@ ResourceProvider::CreateResourceFromExternalTexture( |
} |
ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
- const TextureMailbox& mailbox) { |
+ const TextureMailbox& mailbox, |
+ ScopedReleaseCallback release_callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
// Just store the information. Mailbox will be consumed in LockForRead(). |
ResourceId id = next_id_++; |
@@ -326,6 +327,7 @@ ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
resource.external = true; |
resource.allocated = true; |
resource.mailbox = mailbox; |
+ resource.release_callback = release_callback.Leak(); |
return id; |
} |
@@ -394,7 +396,7 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it, |
resource->pixels = NULL; |
} |
} |
- resource->mailbox.RunReleaseCallback(sync_point, lost_resource); |
+ resource->release_callback.Run(sync_point, lost_resource); |
} |
if (resource->pixels) |
delete[] resource->pixels; |
@@ -946,9 +948,8 @@ void ResourceProvider::ReceiveReturnsFromParent( |
if (it->sync_point) |
GLC(context3d, context3d->waitSyncPoint(it->sync_point)); |
} else { |
- resource->mailbox = TextureMailbox(resource->mailbox.name(), |
- resource->mailbox.callback(), |
- it->sync_point); |
+ resource->mailbox = |
+ TextureMailbox(resource->mailbox.name(), it->sync_point); |
} |
if (resource->marked_for_deletion) |
DeleteResourceInternal(map_iterator, Normal); |