Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "android_webview/browser/gl_view_renderer_manager.h" | |
| 6 #include "android_webview/browser/gpu_memory_manager.h" | |
| 7 #include "base/lazy_instance.h" | |
| 8 | |
| 9 #include "base/logging.h" | |
| 10 using base::AutoLock; | |
| 11 | |
| 12 namespace android_webview { | |
| 13 | |
| 14 namespace { | |
| 15 base::LazyInstance<GpuMemoryManager>::Leaky g_gpu_memory_manager = | |
| 16 LAZY_INSTANCE_INITIALIZER; | |
| 17 } // namespace | |
| 18 | |
| 19 // TODO(hush): need to scale up/down this number based on your devide | |
| 20 const size_t GpuMemoryManager::kGpuMemoryLimit = 256 * 1024 * 1024; | |
|
boliu
2014/04/08 03:06:45
how about assume the limiting resource is always f
| |
| 21 const size_t GpuMemoryManager::kNumResourcesLimit = 512; | |
| 22 | |
| 23 // static | |
| 24 GpuMemoryManager* GpuMemoryManager::GetInstance() { | |
| 25 return g_gpu_memory_manager.Pointer(); | |
| 26 } | |
| 27 | |
| 28 MemoryPolicy GpuMemoryManager::EvictUntilSatisfied( | |
| 29 MemoryPolicy desired_policy, Key key) { | |
| 30 lock_.AssertAcquired(); | |
| 31 MemoryPolicy total_evicted = | |
| 32 GLViewRendererManager::GetInstance()-> | |
| 33 EvictUntilSatisfied(desired_policy, key); | |
| 34 | |
| 35 return total_evicted; | |
| 36 } | |
| 37 | |
| 38 void GpuMemoryManager::UpdateResources( | |
| 39 MemoryPolicy& old_policy, MemoryPolicy& new_policy, Key key) { | |
| 40 AutoLock auto_lock(lock_); | |
| 41 size_t gpu_memory = allocated_.bytes_limit - old_policy.bytes_limit + | |
| 42 new_policy.bytes_limit; | |
| 43 size_t num_resources = allocated_.num_resources_limit - | |
| 44 old_policy.num_resources_limit + new_policy.num_resources_limit; | |
| 45 | |
| 46 if (gpu_memory > kGpuMemoryLimit || num_resources > kNumResourcesLimit) { | |
| 47 MemoryPolicy memory_to_evict; | |
| 48 if (gpu_memory > kGpuMemoryLimit) { | |
| 49 memory_to_evict.bytes_limit = gpu_memory - kGpuMemoryLimit; | |
| 50 } | |
| 51 | |
| 52 if (num_resources > kNumResourcesLimit) { | |
| 53 memory_to_evict.num_resources_limit = num_resources - kNumResourcesLimit; | |
| 54 } | |
| 55 | |
| 56 MemoryPolicy total_evicted = EvictUntilSatisfied(memory_to_evict, key); | |
| 57 gpu_memory -= total_evicted.bytes_limit; | |
| 58 num_resources -= total_evicted.num_resources_limit; | |
| 59 } | |
| 60 | |
| 61 allocated_.bytes_limit = gpu_memory; | |
| 62 allocated_.num_resources_limit = num_resources; | |
| 63 } | |
| 64 | |
| 65 GpuMemoryManager::GpuMemoryManager() {} | |
| 66 | |
| 67 GpuMemoryManager::~GpuMemoryManager() {} | |
| 68 | |
| 69 } // namespace webview | |
| OLD | NEW |