Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index eb774fe10b3bd8d2ce217aa806d90a7158e3ca11..24fa2968f7a9c8776b5ef0aa2bfaf66fd8760284 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -1104,6 +1104,31 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() { |
return gpu_memory_buffer_; |
} |
+ResourceProvider::ScopedReadLockGpuMemoryBuffer::ScopedReadLockGpuMemoryBuffer( |
+ ResourceProvider* resource_provider, |
+ ResourceProvider::ResourceId resource_id) |
+ : resource_provider_(resource_provider), |
+ resource_id_(resource_id), |
+ gpu_memory_buffer_(nullptr) { |
+ const Resource* resource = resource_provider->LockForRead(resource_id); |
+ DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type); |
+ DCHECK(resource->allocated); |
+ DCHECK(resource->image_id); |
+ DCHECK(resource->gpu_memory_buffer); |
+ gpu_memory_buffer_ = resource->gpu_memory_buffer; |
+} |
+ |
+ResourceProvider::ScopedReadLockGpuMemoryBuffer:: |
+ ~ScopedReadLockGpuMemoryBuffer() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ resource_provider_->UnlockForRead(resource_id_); |
+} |
+ |
+gfx::GpuMemoryBuffer* |
+ResourceProvider::ScopedReadLockGpuMemoryBuffer::GetGpuMemoryBuffer() { |
+ return gpu_memory_buffer_; |
+} |
+ |
ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( |
ResourceProvider* resource_provider, |
ResourceProvider::ResourceId resource_id) |