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

Unified Diff: android_webview/browser/gpu_memory_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/gpu_memory_manager.cc
diff --git a/android_webview/browser/gpu_memory_manager.cc b/android_webview/browser/gpu_memory_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..602157f68e87c8a96f15775a6569ef355773b09b
--- /dev/null
+++ b/android_webview/browser/gpu_memory_manager.cc
@@ -0,0 +1,69 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/gl_view_renderer_manager.h"
+#include "android_webview/browser/gpu_memory_manager.h"
+#include "base/lazy_instance.h"
+
+#include "base/logging.h"
+using base::AutoLock;
+
+namespace android_webview {
+
+namespace {
+ base::LazyInstance<GpuMemoryManager>::Leaky g_gpu_memory_manager =
+ LAZY_INSTANCE_INITIALIZER;
+} // namespace
+
+// TODO(hush): need to scale up/down this number based on your devide
+const size_t GpuMemoryManager::kGpuMemoryLimit = 256 * 1024 * 1024;
boliu 2014/04/08 03:06:45 how about assume the limiting resource is always f
+const size_t GpuMemoryManager::kNumResourcesLimit = 512;
+
+// static
+GpuMemoryManager* GpuMemoryManager::GetInstance() {
+ return g_gpu_memory_manager.Pointer();
+}
+
+MemoryPolicy GpuMemoryManager::EvictUntilSatisfied(
+ MemoryPolicy desired_policy, Key key) {
+ lock_.AssertAcquired();
+ MemoryPolicy total_evicted =
+ GLViewRendererManager::GetInstance()->
+ EvictUntilSatisfied(desired_policy, key);
+
+ return total_evicted;
+}
+
+void GpuMemoryManager::UpdateResources(
+ MemoryPolicy& old_policy, MemoryPolicy& new_policy, Key key) {
+ AutoLock auto_lock(lock_);
+ size_t gpu_memory = allocated_.bytes_limit - old_policy.bytes_limit +
+ new_policy.bytes_limit;
+ size_t num_resources = allocated_.num_resources_limit -
+ old_policy.num_resources_limit + new_policy.num_resources_limit;
+
+ if (gpu_memory > kGpuMemoryLimit || num_resources > kNumResourcesLimit) {
+ MemoryPolicy memory_to_evict;
+ if (gpu_memory > kGpuMemoryLimit) {
+ memory_to_evict.bytes_limit = gpu_memory - kGpuMemoryLimit;
+ }
+
+ if (num_resources > kNumResourcesLimit) {
+ memory_to_evict.num_resources_limit = num_resources - kNumResourcesLimit;
+ }
+
+ MemoryPolicy total_evicted = EvictUntilSatisfied(memory_to_evict, key);
+ gpu_memory -= total_evicted.bytes_limit;
+ num_resources -= total_evicted.num_resources_limit;
+ }
+
+ allocated_.bytes_limit = gpu_memory;
+ allocated_.num_resources_limit = num_resources;
+}
+
+GpuMemoryManager::GpuMemoryManager() {}
+
+GpuMemoryManager::~GpuMemoryManager() {}
+
+} // namespace webview

Powered by Google App Engine
This is Rietveld 408576698