Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index f081f6236f87a36410537af4a9c0e570f1191510..7b8bf375c3cb8287b0ada20520558c177a83d719 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -994,6 +994,59 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() { |
return gpu_memory_buffer_; |
} |
+ResourceProvider::ScopedWriteLockGpuMemoryBufferForThread:: |
+ ScopedWriteLockGpuMemoryBufferForThread(ResourceProvider* resource_provider, |
+ ResourceId resource_id) |
+ : resource_provider_(resource_provider), |
+ resource_(resource_provider_->GetResource(resource_id)), |
+ gpu_memory_buffer_manager_(resource_provider->gpu_memory_buffer_manager_), |
+ gpu_memory_buffer_(nullptr), |
+ size_(resource_->size), |
+ format_(resource_->format) { |
+ DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource_->type); |
+ resource_provider_->LazyCreate(resource_); |
+ worker_context_ = |
+ resource_provider_->output_surface()->worker_context_provider(); |
+ image_id_ = 0; |
piman
2015/07/01 22:11:05
I think you want to initialize with resource_->ima
sohanjg
2015/07/02 14:40:28
Done.
|
+ allocated_ = false; |
+ dirty_image_ = false; |
+ read_lock_fences_enabled_ = false; |
piman
2015/07/01 22:11:05
Same here for all 3, you may need to get the value
sohanjg
2015/07/02 14:40:28
Done.
|
+ internal_format_ = GLInternalFormat(resource_->format); |
+ std::swap(gpu_memory_buffer_, resource_->gpu_memory_buffer); |
+} |
+ |
+ResourceProvider::ScopedWriteLockGpuMemoryBufferForThread:: |
+ ~ScopedWriteLockGpuMemoryBufferForThread() { |
+ if (!gpu_memory_buffer_) |
+ return; |
+ |
+ if (!resource_->image_id) { |
piman
2015/07/01 22:11:05
you don't need / want this test any more if you in
sohanjg
2015/07/02 14:40:28
Done.
|
+ resource_->image_id = image_id_; |
+ } |
+ |
+ std::swap(resource_->gpu_memory_buffer, gpu_memory_buffer_); |
+ resource_->allocated = allocated_; |
+ resource_->dirty_image = dirty_image_; |
+ resource_->bound_image_id = bound_image_id_; |
+ |
+ resource_->read_lock_fences_enabled = read_lock_fences_enabled_; |
+} |
+ |
+gfx::GpuMemoryBuffer* ResourceProvider:: |
+ ScopedWriteLockGpuMemoryBufferForThread::GetGpuMemoryBuffer() { |
+ if (gpu_memory_buffer_) |
+ return gpu_memory_buffer_; |
+ gfx::GpuMemoryBuffer::Usage usage = |
+ resource_provider_->use_persistent_map_for_gpu_memory_buffers() |
piman
2015/07/01 22:11:05
If this is called on the worker thread, it's not s
sohanjg
2015/07/02 14:40:28
Done.
|
+ ? gfx::GpuMemoryBuffer::PERSISTENT_MAP |
+ : gfx::GpuMemoryBuffer::MAP; |
+ scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer = |
+ gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( |
+ size_, ToGpuMemoryBufferFormat(format_), usage); |
+ gpu_memory_buffer_ = gpu_memory_buffer.release(); |
+ return gpu_memory_buffer_; |
+} |
+ |
ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( |
ResourceProvider* resource_provider, |
ResourceId resource_id) |
@@ -1879,8 +1932,8 @@ void ResourceProvider::CopyResource(ResourceId source_id, |
dest_resource->allocated = true; |
gl->CopySubTextureCHROMIUM(dest_resource->target, source_resource->gl_id, |
dest_resource->gl_id, rect.x(), rect.y(), rect.x(), |
- rect.y(), rect.width(), rect.height(), |
- false, false, false); |
+ rect.y(), rect.width(), rect.height(), false, |
+ false, false); |
if (source_resource->gl_read_lock_query_id) { |
// End query and create a read lock fence that will prevent access to |
// source resource until CopySubTextureCHROMIUM command has completed. |