| Index: cc/resources/resource_provider.cc
|
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
|
| index 55dafbd47d20e36196a8924b800c97cbbc9191db..156f0dafcbdd532f4851ea9e2e8f3a2211f87f76 100644
|
| --- a/cc/resources/resource_provider.cc
|
| +++ b/cc/resources/resource_provider.cc
|
| @@ -1124,6 +1124,45 @@ void ResourceProvider::UnlockForWrite(ResourceId id) {
|
| resource->locked_for_write = false;
|
| }
|
|
|
| +const ResourceProvider::Resource* ResourceProvider::LockForExport(
|
| + ResourceId id) {
|
| + Resource* resource = GetResource(id);
|
| + if (resource->type == GLTexture) {
|
| + DCHECK(resource->origin != Resource::Internal);
|
| + DCHECK(resource->mailbox.IsTexture());
|
| + GLES2Interface* gl = ContextGL();
|
| + DCHECK(gl);
|
| + if (resource->mailbox.sync_point()) {
|
| + GLC(gl, gl->WaitSyncPointCHROMIUM(resource->mailbox.sync_point()));
|
| + resource->mailbox.set_sync_point(0);
|
| + }
|
| + }
|
| +
|
| + resource->exported_count++;
|
| + return resource;
|
| +}
|
| +
|
| +void ResourceProvider::UnlockForExport(ResourceId id) {
|
| + Resource* resource = GetResource(id);
|
| + DCHECK_GT(resource->exported_count, 0);
|
| + resource->exported_count--;
|
| +}
|
| +
|
| +ResourceProvider::ScopedExportLock::ScopedExportLock(
|
| + ResourceProvider* resource_provider,
|
| + ResourceProvider::ResourceId resource_id)
|
| + : resource_provider_(resource_provider), resource_id_(resource_id) {
|
| + resource_provider_->LockForExport(resource_id);
|
| +}
|
| +
|
| +ResourceProvider::ScopedExportLock::~ScopedExportLock() {
|
| + resource_provider_->UnlockForExport(resource_id_);
|
| +}
|
| +
|
| +const gpu::Mailbox& ResourceProvider::ScopedExportLock::GetMailbox() const {
|
| + return resource_provider_->GetResource(resource_id_)->mailbox.mailbox();
|
| +}
|
| +
|
| ResourceProvider::ScopedReadLockGL::ScopedReadLockGL(
|
| ResourceProvider* resource_provider,
|
| ResourceProvider::ResourceId resource_id)
|
|
|