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 f897b0ce0642732e3a7549b2d5924830ab153523..5bf8168da3d40702f326c6a284d14763e62e7884 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( |
@@ -131,68 +118,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); |
+ 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, |
@@ -223,9 +171,6 @@ bool BrowserViewRenderer::OnDrawHardware() { |
if (!hardware_enabled_) { |
hardware_enabled_ = compositor_->InitializeHwDraw(); |
- if (hardware_enabled_) { |
- tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this); |
- } |
} |
if (!hardware_enabled_) |
return false; |
@@ -253,14 +198,11 @@ bool BrowserViewRenderer::OnDrawHardware() { |
return false; |
shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), false); |
- GlobalTileManager::GetInstance()->DidUse(tile_manager_key_); |
return true; |
} |
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_.GetParentDrawConstraintsOnUI(); |
@@ -461,12 +403,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 { |
@@ -491,11 +430,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; |
} |