Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2267)

Unified Diff: android_webview/browser/gl_view_renderer_manager.cc

Issue 226363004: Global GPU memory manager for android webview (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/gl_view_renderer_manager.cc
diff --git a/android_webview/browser/gl_view_renderer_manager.cc b/android_webview/browser/gl_view_renderer_manager.cc
index 13a60fd1fab82d98e6624acadfb54666125c6e7b..b529a301a2e238b7cee13b4cf0780636c5d25686 100644
--- a/android_webview/browser/gl_view_renderer_manager.cc
+++ b/android_webview/browser/gl_view_renderer_manager.cc
@@ -67,4 +67,32 @@ GLViewRendererManager::GetMostRecentlyDrawn() const {
return *mru_list_.begin();
}
+MemoryPolicy GLViewRendererManager::EvictUntilSatisfied(
+ MemoryPolicy desired_policy, Key key) {
+ AutoLock auto_lock(lock_);
+
+ MemoryPolicy zero_policy;
+ size_t evicted_memory = 0, evicted_resources = 0;
+ ListType::reverse_iterator it;
+
+ // Evicts from the least recent drawn view, until the disired amount of memory
+ // can be reclaimed.
+ for (it = mru_list_.rbegin(); it != mru_list_.rend(); it++) {
+ // key represents the view that requested the eviction, so we don't need to
+ // evict the requester itself.
+ if (*it == *key)
+ continue;
+ MemoryPolicy policy = (*it)->GetCompositor()->GetMemoryPolicy();
+ evicted_memory += policy.bytes_limit;
+ evicted_resources += policy.num_resources_limit;
+
+ (*it)->GetCompositor()->SetMemoryPolicy(zero_policy);
+ if (evicted_memory >= desired_policy.bytes_limit &&
+ evicted_resources >= desired_policy.num_resources_limit) {
+ break;
+ }
+ }
+ return MemoryPolicy(evicted_memory, evicted_resources);
+}
+
} // namespace android_webview

Powered by Google App Engine
This is Rietveld 408576698