Chromium Code Reviews| Index: android_webview/browser/browser_view_renderer.cc |
| diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc |
| index 59c30382594a425d8cbcb1958e66ec88b77b79ad..b8dd22337feeafb03f85642c5aeec1e3ab096bb0 100644 |
| --- a/android_webview/browser/browser_view_renderer.cc |
| +++ b/android_webview/browser/browser_view_renderer.cc |
| @@ -23,8 +23,6 @@ |
| #include "third_party/skia/include/core/SkPictureRecorder.h" |
| #include "ui/gfx/geometry/vector2d_conversions.h" |
| -using content::SynchronousCompositorMemoryPolicy; |
| - |
| namespace android_webview { |
| namespace { |
| @@ -37,13 +35,6 @@ const size_t kBytesPerPixel = 4; |
| const size_t kMemoryAllocationStep = 5 * 1024 * 1024; |
| uint64 g_memory_override_in_bytes = 0u; |
| -// Used to calculate tile allocation. Determined experimentally. |
| -const size_t kTileMultiplier = 12; |
| -const size_t kTileAllocationStep = 20; |
| -// Use chrome's default tile size, which varies from 256 to 512. |
| -// Be conservative here and use the smallest tile size possible. |
| -const size_t kTileArea = 256 * 256; |
| - |
| } // namespace |
| // static |
| @@ -60,10 +51,6 @@ void BrowserViewRenderer::CalculateTileMemoryPolicy() { |
| &g_memory_override_in_bytes); |
| g_memory_override_in_bytes *= 1024 * 1024; |
| } |
| - |
| - // There is no need to limit number of tiles, so use an effectively unlimited |
| - // value as the limit. |
| - GlobalTileManager::GetInstance()->SetTileLimit(10 * 1000 * 1000); |
| } |
| BrowserViewRenderer::BrowserViewRenderer( |
| @@ -124,68 +111,29 @@ void BrowserViewRenderer::TrimMemory(const int level, const bool visible) { |
| if (level < TRIM_MEMORY_BACKGROUND && visible) |
| return; |
| - // Just set the memory limit to 0 and drop all tiles. This will be reset to |
| - // normal levels in the next DrawGL call. |
| - SynchronousCompositorMemoryPolicy zero_policy; |
| - if (memory_policy_ == zero_policy) |
| + // Nothing to drop. |
| + if (!compositor_ || !hardware_enabled_) |
| return; |
| TRACE_EVENT0("android_webview", "BrowserViewRenderer::TrimMemory"); |
| - DCHECK(hardware_enabled_); |
| - DCHECK(compositor_); |
| - RequestMemoryPolicy(zero_policy); |
| - EnforceMemoryPolicyImmediately(zero_policy); |
| + // Just set the memory limit to 0 and drop all tiles. This will be reset to |
| + // normal levels in the next DrawGL call. |
| + compositor_->SetMemoryPolicy(0u); |
|
hush (inactive)
2014/10/24 23:36:37
do you need to enforce it immediately right here?
boliu
2014/10/24 23:37:53
It is enforce it once line below. There's just a h
hush (inactive)
2014/10/24 23:49:59
oops. Yes. Thanks!
|
| + ForceFakeCompositeSW(); |
| } |
| -SynchronousCompositorMemoryPolicy |
| -BrowserViewRenderer::CalculateDesiredMemoryPolicy() { |
| - SynchronousCompositorMemoryPolicy policy; |
| +size_t BrowserViewRenderer::CalculateDesiredMemoryPolicy() { |
| + if (g_memory_override_in_bytes) |
| + return static_cast<size_t>(g_memory_override_in_bytes); |
| + |
| size_t width = last_on_draw_global_visible_rect_.width(); |
| size_t height = last_on_draw_global_visible_rect_.height(); |
| - policy.bytes_limit = kMemoryMultiplier * kBytesPerPixel * width * height; |
| + size_t bytes_limit = kMemoryMultiplier * kBytesPerPixel * width * height; |
| // Round up to a multiple of kMemoryAllocationStep. |
| - policy.bytes_limit = |
| - (policy.bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep; |
| - |
| - if (g_memory_override_in_bytes) |
| - policy.bytes_limit = static_cast<size_t>(g_memory_override_in_bytes); |
| - |
| - size_t tiles = width * height * kTileMultiplier / kTileArea; |
| - // Round up to a multiple of kTileAllocationStep. The minimum number of tiles |
| - // is also kTileAllocationStep. |
| - tiles = (tiles / kTileAllocationStep + 1) * kTileAllocationStep; |
| - policy.num_resources_limit = tiles; |
| - return policy; |
| -} |
| - |
| -// This function updates the cached memory policy in shared renderer state, as |
| -// well as the tile resource allocation in GlobalTileManager. |
| -void BrowserViewRenderer::RequestMemoryPolicy( |
| - SynchronousCompositorMemoryPolicy& new_policy) { |
| - DCHECK(compositor_); |
| - GlobalTileManager* manager = GlobalTileManager::GetInstance(); |
| - |
| - // The following line will call BrowserViewRenderer::SetMemoryPolicy(). |
| - manager->RequestTiles(new_policy, tile_manager_key_); |
| -} |
| - |
| -void BrowserViewRenderer::SetMemoryPolicy( |
| - SynchronousCompositorMemoryPolicy new_policy, |
| - bool effective_immediately) { |
| - memory_policy_ = new_policy; |
| - if (effective_immediately) |
| - EnforceMemoryPolicyImmediately(memory_policy_); |
| -} |
| - |
| -void BrowserViewRenderer::EnforceMemoryPolicyImmediately( |
| - SynchronousCompositorMemoryPolicy new_policy) { |
| - compositor_->SetMemoryPolicy(new_policy); |
| - ForceFakeCompositeSW(); |
| -} |
| - |
| -SynchronousCompositorMemoryPolicy BrowserViewRenderer::GetMemoryPolicy() const { |
| - return memory_policy_; |
| + bytes_limit = |
| + (bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep; |
| + return bytes_limit; |
| } |
| bool BrowserViewRenderer::OnDraw(jobject java_canvas, |
| @@ -216,9 +164,6 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| if (!hardware_enabled_) { |
| hardware_enabled_ = compositor_->InitializeHwDraw(); |
| - if (hardware_enabled_) { |
| - tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this); |
| - } |
| } |
| if (!hardware_enabled_) |
| return false; |
| @@ -246,14 +191,11 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| return false; |
| shared_renderer_state_->SetCompositorFrame(frame.Pass(), false); |
| - GlobalTileManager::GetInstance()->DidUse(tile_manager_key_); |
| return client_->RequestDrawGL(java_canvas, false); |
| } |
| scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { |
| - SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy(); |
| - RequestMemoryPolicy(new_policy); |
| - compositor_->SetMemoryPolicy(memory_policy_); |
| + compositor_->SetMemoryPolicy(CalculateDesiredMemoryPolicy()); |
| parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints(); |
| gfx::Size surface_size(width_, height_); |
| @@ -451,12 +393,9 @@ void BrowserViewRenderer::ReleaseHardware() { |
| if (compositor_) { |
| compositor_->ReleaseHwDraw(); |
| - SynchronousCompositorMemoryPolicy zero_policy; |
| - RequestMemoryPolicy(zero_policy); |
| } |
| hardware_enabled_ = false; |
| - GlobalTileManager::GetInstance()->Remove(tile_manager_key_); |
| } |
| bool BrowserViewRenderer::IsVisible() const { |
| @@ -481,11 +420,6 @@ void BrowserViewRenderer::DidDestroyCompositor( |
| content::SynchronousCompositor* compositor) { |
| TRACE_EVENT0("android_webview", "BrowserViewRenderer::DidDestroyCompositor"); |
| DCHECK(compositor_); |
| - SynchronousCompositorMemoryPolicy zero_policy; |
| - if (hardware_enabled_) { |
| - RequestMemoryPolicy(zero_policy); |
| - } |
| - DCHECK(memory_policy_ == zero_policy); |
| compositor_ = NULL; |
| } |