Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index e7d309db8a964fa061bd76ef29ba3d21fcd78886..d724bfd8567f0394f8fc6aff8a7b9a6a1a280236 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -1033,10 +1033,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); |
+ } |
} |
} |
} |
@@ -1663,6 +1667,18 @@ void ResourceProvider::ReceiveReturnsFromParent( |
} |
} |
+void ResourceProvider::SetBatchReturnResources(bool 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()); |
Daniele Castagna
2017/03/24 01:44:43
nit: DCHECK_NE?
|
+ DeleteAndReturnUnusedResourcesToChild(child_it, NORMAL, resources.second); |
+ } |
+ batched_returning_resources_.clear(); |
+ } |
+} |
+ |
#if defined(OS_ANDROID) |
void ResourceProvider::SendPromotionHints( |
const OverlayCandidateList::PromotionHintInfoMap& promotion_hints) { |