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

Unified Diff: android_webview/browser/hardware_renderer.cc

Issue 226363004: Global GPU memory manager for android webview (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unnecessary code 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/hardware_renderer.cc
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc
index a45da7ff724231c5775bfc66b33474068a95fe18..1481529d9b611fcf10d1f9128a2ebe221c33b87a 100644
--- a/android_webview/browser/hardware_renderer.cc
+++ b/android_webview/browser/hardware_renderer.cc
@@ -6,7 +6,6 @@
#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/scoped_app_gl_state_restore.h"
#include "android_webview/public/browser/draw_gl.h"
#include "base/command_line.h"
@@ -19,18 +18,10 @@
#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/transform.h"
-using content::BrowserThread;
-
namespace android_webview {
namespace {
-// Used to calculate memory and resource allocation. Determined experimentally.
-const size_t g_memory_multiplier = 10;
-const size_t g_num_gralloc_limit = 150;
-const size_t kBytesPerPixel = 4;
-const size_t kMemoryAllocationStep = 5 * 1024 * 1024;
-
base::LazyInstance<scoped_refptr<internal::DeferredGpuCommandService> >
g_service = LAZY_INSTANCE_INITIALIZER;
@@ -39,9 +30,10 @@ base::LazyInstance<scoped_refptr<internal::DeferredGpuCommandService> >
HardwareRenderer::HardwareRenderer(SharedRendererState* state)
: shared_renderer_state_(state),
last_egl_context_(eglGetCurrentContext()),
- manager_key_(GLViewRendererManager::GetInstance()->PushBack(
+ renderer_manager_key_(GLViewRendererManager::GetInstance()->PushBack(
shared_renderer_state_)) {
DCHECK(last_egl_context_);
+
boliu 2014/04/28 22:22:15 spurious new line
hush (inactive) 2014/04/30 20:50:17 Done.
if (!g_service.Get()) {
g_service.Get() = new internal::DeferredGpuCommandService;
content::SynchronousCompositor::SetGpuService(g_service.Get());
@@ -59,8 +51,8 @@ HardwareRenderer::HardwareRenderer(SharedRendererState* state)
}
HardwareRenderer::~HardwareRenderer() {
- GLViewRendererManager* mru = GLViewRendererManager::GetInstance();
- mru->Remove(manager_key_);
+ GLViewRendererManager* render_manager = GLViewRendererManager::GetInstance();
+ render_manager->Remove(renderer_manager_key_);
ScopedAppGLStateRestore state_restore(
ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT);
@@ -72,7 +64,7 @@ HardwareRenderer::~HardwareRenderer() {
bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
TRACE_EVENT0("android_webview", "HardwareRenderer::DrawGL");
- GLViewRendererManager::GetInstance()->DidDrawGL(manager_key_);
+ GLViewRendererManager::GetInstance()->DidDrawGL(renderer_manager_key_);
const DrawGLInput input = shared_renderer_state_->GetDrawGLInput();
// We need to watch if the current Android context has changed and enforce
@@ -93,16 +85,10 @@ bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
if (draw_info->mode == AwDrawGLInfo::kModeProcess)
return false;
- // Update memory budget. This will no-op in compositor if the policy has not
- // changed since last draw.
- content::SynchronousCompositorMemoryPolicy policy;
- policy.bytes_limit = g_memory_multiplier * kBytesPerPixel *
- input.global_visible_rect.width() *
- input.global_visible_rect.height();
- // Round up to a multiple of kMemoryAllocationStep.
- policy.bytes_limit =
- (policy.bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep;
- policy.num_resources_limit = g_num_gralloc_limit;
+ // Memory policy is set by BrowserViewRenderer on UI thread.
+ content::SynchronousCompositorMemoryPolicy policy =
+ shared_renderer_state_->GetMemoryPolicy();
+
SetMemoryPolicy(policy);
gl_surface_->SetBackingFrameBufferObject(
@@ -167,10 +153,8 @@ 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 zero_policy;
+ if (shared_renderer_state_->GetMemoryPolicy() == zero_policy)
return false;
TRACE_EVENT0("android_webview", "HardwareRenderer::TrimMemory");
@@ -178,18 +162,13 @@ 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)
boliu 2014/04/28 22:22:15 This check is still important, but I understand th
hush (inactive) 2014/04/30 20:50:17 I add the boolean in shared renderer state and har
- return;
-
- memory_policy_ = new_policy;
- shared_renderer_state_->GetCompositor()->
- SetMemoryPolicy(memory_policy_);
+ content::SynchronousCompositorMemoryPolicy& policy) {
+ shared_renderer_state_->GetCompositor()->SetMemoryPolicy(policy);
}
// static

Powered by Google App Engine
This is Rietveld 408576698