diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-10 22:44:43 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-10 22:44:43 +0000 |
commit | 0552c8ef896c4356f4db85618972dedccd6ad53b (patch) | |
tree | d00992f235af190d2bdb9de0a5f72fbfcc1c9917 /content/browser/android | |
parent | 1e7258d60d7ebdb30a27552d900e885922119a2c (diff) | |
download | chromium_src-0552c8ef896c4356f4db85618972dedccd6ad53b.zip chromium_src-0552c8ef896c4356f4db85618972dedccd6ad53b.tar.gz chromium_src-0552c8ef896c4356f4db85618972dedccd6ad53b.tar.bz2 |
[Android WebView] First cut memory management
Based on simple algorithm of visible rect x constant.
Completely disregards the preferred allocation from based on
content of the page.
Constants extermined experimentally using current android
nexus devices.
BUG=286026
Review URL: https://chromiumcodereview.appspot.com/23572023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@222372 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/android')
4 files changed, 36 insertions, 12 deletions
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.cc b/content/browser/android/in_process/synchronous_compositor_impl.cc index 3f71321..9f1b607 100644 --- a/content/browser/android/in_process/synchronous_compositor_impl.cc +++ b/content/browser/android/in_process/synchronous_compositor_impl.cc @@ -331,6 +331,14 @@ bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) { return output_surface_->DemandDrawSw(canvas); } +void SynchronousCompositorImpl::SetMemoryPolicy( + const SynchronousCompositorMemoryPolicy& policy) { + DCHECK(CalledOnValidThread()); + DCHECK(output_surface_); + + return output_surface_->SetMemoryPolicy(policy); +} + void SynchronousCompositorImpl::DidChangeRootLayerScrollOffset() { if (input_handler_) input_handler_->OnRootLayerDelegatedScrollOffsetChanged(); diff --git a/content/browser/android/in_process/synchronous_compositor_impl.h b/content/browser/android/in_process/synchronous_compositor_impl.h index 854c5eb..3189dcc 100644 --- a/content/browser/android/in_process/synchronous_compositor_impl.h +++ b/content/browser/android/in_process/synchronous_compositor_impl.h @@ -58,6 +58,8 @@ class SynchronousCompositorImpl gfx::Rect clip, bool stencil_enabled) OVERRIDE; virtual bool DemandDrawSw(SkCanvas* canvas) OVERRIDE; + virtual void SetMemoryPolicy( + const SynchronousCompositorMemoryPolicy& policy) OVERRIDE; virtual void DidChangeRootLayerScrollOffset() OVERRIDE; // SynchronousCompositorOutputSurfaceDelegate diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.cc b/content/browser/android/in_process/synchronous_compositor_output_surface.cc index 2760a62..4137734 100644 --- a/content/browser/android/in_process/synchronous_compositor_output_surface.cc +++ b/content/browser/android/in_process/synchronous_compositor_output_surface.cc @@ -9,7 +9,6 @@ #include "cc/output/begin_frame_args.h" #include "cc/output/compositor_frame.h" #include "cc/output/context_provider.h" -#include "cc/output/managed_memory_policy.h" #include "cc/output/output_surface_client.h" #include "cc/output/software_output_device.h" #include "content/browser/android/in_process/synchronous_compositor_impl.h" @@ -108,7 +107,9 @@ SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface( needs_begin_frame_(false), invoking_composite_(false), did_swap_buffer_(false), - current_sw_canvas_(NULL) { + current_sw_canvas_(NULL), + memory_policy_(0), + output_surface_client_(NULL) { capabilities_.deferred_gl_initialization = true; capabilities_.draw_and_swap_full_viewport_every_frame = true; capabilities_.adjust_deadline_for_parent = false; @@ -136,21 +137,16 @@ bool SynchronousCompositorOutputSurface::BindToClient( DCHECK(CalledOnValidThread()); if (!cc::OutputSurface::BindToClient(surface_client)) return false; - surface_client->SetTreeActivationCallback( + + output_surface_client_ = surface_client; + output_surface_client_->SetTreeActivationCallback( base::Bind(&DidActivatePendingTree, routing_id_)); + output_surface_client_->SetMemoryPolicy(memory_policy_); + SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate(); if (delegate) delegate->DidBindOutputSurface(this); - const int bytes_limit = 64 * 1024 * 1024; - const int num_resources_limit = 100; - surface_client->SetMemoryPolicy( - cc::ManagedMemoryPolicy(bytes_limit, - cc::ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, - 0, - cc::ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING, - num_resources_limit)); - return true; } @@ -171,6 +167,7 @@ void SynchronousCompositorOutputSurface::SetNeedsBeginFrame( void SynchronousCompositorOutputSurface::SwapBuffers( cc::CompositorFrame* frame) { + DCHECK(CalledOnValidThread()); if (!ForcedDrawToSoftwareDevice()) { DCHECK(context_provider_); context_provider_->Context3d()->shallowFlushCHROMIUM(); @@ -206,6 +203,7 @@ bool SynchronousCompositorOutputSurface::InitializeHwDraw( } void SynchronousCompositorOutputSurface::ReleaseHwDraw() { + DCHECK(CalledOnValidThread()); cc::OutputSurface::ReleaseGL(); } @@ -287,6 +285,16 @@ void SynchronousCompositorOutputSurface::PostCheckForRetroactiveBeginFrame() { // intentionally no-op here. } +void SynchronousCompositorOutputSurface::SetMemoryPolicy( + const SynchronousCompositorMemoryPolicy& policy) { + DCHECK(CalledOnValidThread()); + memory_policy_.bytes_limit_when_visible = policy.bytes_limit; + memory_policy_.num_resources_limit = policy.num_resources_limit; + + if (output_surface_client_) + output_surface_client_->SetMemoryPolicy(memory_policy_); +} + // Not using base::NonThreadSafe as we want to enforce a more exacting threading // requirement: SynchronousCompositorOutputSurface() must only be used on the UI // thread. diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.h b/content/browser/android/in_process/synchronous_compositor_output_surface.h index d11651d..b9b4d67 100644 --- a/content/browser/android/in_process/synchronous_compositor_output_surface.h +++ b/content/browser/android/in_process/synchronous_compositor_output_surface.h @@ -9,6 +9,7 @@ #include "base/compiler_specific.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" +#include "cc/output/managed_memory_policy.h" #include "cc/output/output_surface.h" #include "content/public/browser/android/synchronous_compositor.h" #include "ui/gfx/transform.h" @@ -72,6 +73,7 @@ class SynchronousCompositorOutputSurface gfx::Rect clip, bool stencil_enabled); bool DemandDrawSw(SkCanvas* canvas); + void SetMemoryPolicy(const SynchronousCompositorMemoryPolicy& policy); private: class SoftwareDevice; @@ -99,6 +101,10 @@ class SynchronousCompositorOutputSurface // Only valid (non-NULL) during a DemandDrawSw() call. SkCanvas* current_sw_canvas_; + cc::ManagedMemoryPolicy memory_policy_; + + cc::OutputSurfaceClient* output_surface_client_; + DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorOutputSurface); }; |