| 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 7e229bc2f8c534ba41fde486c64ea8f276483d5f..b9336d6119a230f9ccef7ac87c39bad71015c35d 100644
|
| --- a/android_webview/browser/browser_view_renderer.cc
|
| +++ b/android_webview/browser/browser_view_renderer.cc
|
| @@ -118,7 +118,6 @@ bool BrowserViewRenderer::RequestDrawGL(bool wait_for_completion) {
|
| return client_->RequestDrawGL(wait_for_completion);
|
| }
|
|
|
| -// This function updates the resource allocation in GlobalTileManager.
|
| void BrowserViewRenderer::TrimMemory(const int level, const bool visible) {
|
| DCHECK(ui_task_runner_->BelongsToCurrentThread());
|
| // Constants from Android ComponentCallbacks2.
|
| @@ -145,32 +144,44 @@ void BrowserViewRenderer::TrimMemory(const int level, const bool visible) {
|
|
|
| TRACE_EVENT0("android_webview", "BrowserViewRenderer::TrimMemory");
|
|
|
| - // Drop everything in hardware.
|
| + // If offscreen pre-raster is disabled, drop everything in hardware. Otherwise
|
| + // keep the tiles and just delete the HardwareRenderer.
|
| if (level >= TRIM_MEMORY_MODERATE) {
|
| - shared_renderer_state_.ReleaseHardwareDrawIfNeededOnUI();
|
| + if (offscreen_pre_raster_)
|
| + shared_renderer_state_.DeleteHardwareRendererOnUI();
|
| + else
|
| + shared_renderer_state_.ReleaseHardwareDrawIfNeededOnUI();
|
| return;
|
| }
|
|
|
| // 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();
|
| + if (!offscreen_pre_raster_)
|
| + compositor_->SetMemoryPolicy(0u);
|
| }
|
|
|
| -size_t BrowserViewRenderer::CalculateDesiredMemoryPolicy() {
|
| - if (g_memory_override_in_bytes)
|
| - return static_cast<size_t>(g_memory_override_in_bytes);
|
| +void BrowserViewRenderer::UpdateMemoryPolicy() {
|
| + if (!hardware_enabled_) {
|
| + compositor_->SetMemoryPolicy(0u);
|
| + return;
|
| + }
|
|
|
| - gfx::Rect interest_rect = offscreen_pre_raster_
|
| - ? gfx::Rect(size_)
|
| - : last_on_draw_global_visible_rect_;
|
| - size_t width = interest_rect.width();
|
| - size_t height = interest_rect.height();
|
| - size_t bytes_limit = kMemoryMultiplier * kBytesPerPixel * width * height;
|
| - // Round up to a multiple of kMemoryAllocationStep.
|
| - bytes_limit =
|
| - (bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep;
|
| - return bytes_limit;
|
| + size_t bytes_limit = 0u;
|
| + if (g_memory_override_in_bytes) {
|
| + bytes_limit = static_cast<size_t>(g_memory_override_in_bytes);
|
| + } else {
|
| + gfx::Rect interest_rect = offscreen_pre_raster_
|
| + ? gfx::Rect(size_)
|
| + : last_on_draw_global_visible_rect_;
|
| + size_t width = interest_rect.width();
|
| + size_t height = interest_rect.height();
|
| + bytes_limit = kMemoryMultiplier * kBytesPerPixel * width * height;
|
| + // Round up to a multiple of kMemoryAllocationStep.
|
| + bytes_limit =
|
| + (bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep;
|
| + }
|
| +
|
| + compositor_->SetMemoryPolicy(bytes_limit);
|
| }
|
|
|
| void BrowserViewRenderer::PrepareToDraw(const gfx::Vector2d& scroll,
|
| @@ -213,7 +224,7 @@ bool BrowserViewRenderer::CompositeHw() {
|
| CancelFallbackTick();
|
|
|
| ReturnResourceFromParent();
|
| - compositor_->SetMemoryPolicy(CalculateDesiredMemoryPolicy());
|
| + UpdateMemoryPolicy();
|
|
|
| ParentCompositorDrawConstraints parent_draw_constraints =
|
| shared_renderer_state_.GetParentDrawConstraintsOnUI();
|
| @@ -337,7 +348,9 @@ void BrowserViewRenderer::ClearView() {
|
| }
|
|
|
| void BrowserViewRenderer::SetOffscreenPreRaster(bool enable) {
|
| - // TODO(hush): anything to do when the setting is toggled?
|
| + if (offscreen_pre_raster_ != enable && compositor_)
|
| + UpdateMemoryPolicy();
|
| +
|
| offscreen_pre_raster_ = enable;
|
| }
|
|
|
|
|