| Index: cc/resources/resource_provider.cc
|
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
|
| index 9d06c6d7449e910f454999d83b488e20787b1a22..1a8288fe11d5b19b1461de34e4b13b24a2f48c42 100644
|
| --- a/cc/resources/resource_provider.cc
|
| +++ b/cc/resources/resource_provider.cc
|
| @@ -1061,10 +1061,14 @@ void ResourceProvider::UnlockForRead(ResourceId id) {
|
| // The resource belongs to this ResourceProvider, so it can be destroyed.
|
| DeleteResourceInternal(it, NORMAL);
|
| } else {
|
| - ChildMap::iterator child_it = children_.find(resource->child_id);
|
| - ResourceIdArray unused;
|
| - unused.push_back(id);
|
| - DeleteAndReturnUnusedResourcesToChild(child_it, NORMAL, unused);
|
| + if (batch_return_resources_) {
|
| + batched_returning_resources_[resource->child_id].push_back(id);
|
| + } else {
|
| + ChildMap::iterator child_it = children_.find(resource->child_id);
|
| + ResourceIdArray unused;
|
| + unused.push_back(id);
|
| + DeleteAndReturnUnusedResourcesToChild(child_it, NORMAL, unused);
|
| + }
|
| }
|
| }
|
| }
|
| @@ -1383,6 +1387,16 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() {
|
| return gpu_memory_buffer_.get();
|
| }
|
|
|
| +ResourceProvider::ScopedBatchReturnResources::ScopedBatchReturnResources(
|
| + ResourceProvider* resource_provider)
|
| + : resource_provider_(resource_provider) {
|
| + resource_provider_->SetBatchReturnResources(true);
|
| +}
|
| +
|
| +ResourceProvider::ScopedBatchReturnResources::~ScopedBatchReturnResources() {
|
| + resource_provider_->SetBatchReturnResources(false);
|
| +}
|
| +
|
| ResourceProvider::SynchronousFence::SynchronousFence(
|
| gpu::gles2::GLES2Interface* gl)
|
| : gl_(gl), has_synchronized_(true) {}
|
| @@ -1691,6 +1705,19 @@ void ResourceProvider::ReceiveReturnsFromParent(
|
| }
|
| }
|
|
|
| +void ResourceProvider::SetBatchReturnResources(bool batch) {
|
| + DCHECK_NE(batch_return_resources_, batch);
|
| + batch_return_resources_ = batch;
|
| + if (!batch) {
|
| + for (const auto& resources : batched_returning_resources_) {
|
| + ChildMap::iterator child_it = children_.find(resources.first);
|
| + DCHECK(child_it != children_.end());
|
| + DeleteAndReturnUnusedResourcesToChild(child_it, NORMAL, resources.second);
|
| + }
|
| + batched_returning_resources_.clear();
|
| + }
|
| +}
|
| +
|
| #if defined(OS_ANDROID)
|
| void ResourceProvider::SendPromotionHints(
|
| const OverlayCandidateList::PromotionHintInfoMap& promotion_hints) {
|
|
|