Index: android_webview/browser/hardware_renderer.cc |
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc |
index 59356dbe7aea8656256a2fcba77c99ddf9e09d4d..bd334d82b7ede7872cdc0fe2bb86620d44858d13 100644 |
--- a/android_webview/browser/hardware_renderer.cc |
+++ b/android_webview/browser/hardware_renderer.cc |
@@ -7,6 +7,7 @@ |
#include "android_webview/browser/aw_gl_surface.h" |
#include "android_webview/browser/browser_view_renderer_client.h" |
#include "android_webview/browser/gl_view_renderer_manager.h" |
+#include "android_webview/browser/gpu_memory_manager.h" |
#include "android_webview/browser/scoped_app_gl_state_restore.h" |
#include "android_webview/public/browser/draw_gl.h" |
#include "base/command_line.h" |
@@ -40,6 +41,7 @@ HardwareRenderer::HardwareRenderer(SharedRendererState* state) |
manager_key_(GLViewRendererManager::GetInstance()->PushBack( |
shared_renderer_state_)) { |
DCHECK(last_egl_context_); |
+ |
if (!g_service.Get()) { |
g_service.Get() = new internal::DeferredGpuCommandService; |
content::SynchronousCompositor::SetGpuService(g_service.Get()); |
@@ -60,6 +62,9 @@ HardwareRenderer::~HardwareRenderer() { |
GLViewRendererManager* mru = GLViewRendererManager::GetInstance(); |
mru->Remove(manager_key_); |
+ content::SynchronousCompositorMemoryPolicy zero_policy; |
+ SetMemoryPolicy(zero_policy); |
+ |
ScopedAppGLStateRestore state_restore( |
ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT); |
internal::ScopedAllowGL allow_gl; |
@@ -158,10 +163,9 @@ bool HardwareRenderer::TrimMemory(int level, bool visible) { |
// Just set the memory limit to 0 and drop all tiles. This will be reset to |
// normal levels in the next DrawGL call. |
- content::SynchronousCompositorMemoryPolicy policy; |
- policy.bytes_limit = 0; |
- policy.num_resources_limit = 0; |
- if (memory_policy_ == policy) |
+ content::SynchronousCompositorMemoryPolicy current_policy, zero_policy; |
+ current_policy = GetMemoryPolicy(); |
+ if (current_policy == zero_policy) |
return false; |
TRACE_EVENT0("android_webview", "HardwareRenderer::TrimMemory"); |
@@ -169,18 +173,28 @@ bool HardwareRenderer::TrimMemory(int level, bool visible) { |
ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT); |
internal::ScopedAllowGL allow_gl; |
- SetMemoryPolicy(policy); |
+ SetMemoryPolicy(zero_policy); |
return true; |
} |
void HardwareRenderer::SetMemoryPolicy( |
content::SynchronousCompositorMemoryPolicy& new_policy) { |
- if (memory_policy_ == new_policy) |
+ content::SynchronousCompositorMemoryPolicy current_policy; |
+ current_policy = GetMemoryPolicy(); |
+ |
+ if (current_policy == new_policy) |
return; |
- memory_policy_ = new_policy; |
+ GpuMemoryManager::GetInstance()->UpdateResources( |
+ current_policy, new_policy, manager_key_); |
boliu
2014/04/08 03:06:45
Too aggressive and not stable? And I think it does
|
+ |
shared_renderer_state_->GetCompositor()-> |
- SetMemoryPolicy(memory_policy_); |
+ SetMemoryPolicy(new_policy); |
+} |
+ |
+const content::SynchronousCompositorMemoryPolicy& |
+ HardwareRenderer::GetMemoryPolicy() const { |
+ return shared_renderer_state_->GetCompositor()->GetMemoryPolicy(); |
} |
// static |