Chromium Code Reviews| 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. |