| 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 c2de48b16c75b110ef37d3cf5a35e1e94adc9310..dbbd873ba32f157577da09a4933adebbf05ecb83 100644
|
| --- a/android_webview/browser/browser_view_renderer.cc
|
| +++ b/android_webview/browser/browser_view_renderer.cc
|
| @@ -68,6 +68,7 @@ BrowserViewRenderer::BrowserViewRenderer(
|
| page_scale_factor_(1.0),
|
| on_new_picture_enable_(false),
|
| clear_view_(false),
|
| + offscreen_pre_raster_(false),
|
| compositor_needs_continuous_invalidate_(false),
|
| invalidate_after_composite_(false),
|
| block_invalidates_(false),
|
| @@ -128,8 +129,11 @@ 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();
|
| + 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 =
|
| @@ -178,15 +182,6 @@ bool BrowserViewRenderer::OnDrawHardware() {
|
| return false;
|
| }
|
|
|
| - if (last_on_draw_global_visible_rect_.IsEmpty() &&
|
| - parent_draw_constraints_.surface_rect.IsEmpty()) {
|
| - TRACE_EVENT_INSTANT0("android_webview",
|
| - "EarlyOut_EmptyVisibleRect",
|
| - TRACE_EVENT_SCOPE_THREAD);
|
| - shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(true);
|
| - return true;
|
| - }
|
| -
|
| ReturnResourceFromParent();
|
| if (shared_renderer_state_.HasCompositorFrameOnUI()) {
|
| TRACE_EVENT_INSTANT0("android_webview",
|
| @@ -222,11 +217,15 @@ scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() {
|
| // applied onto the layer so global visible rect does not make sense here.
|
| // In this case, just use the surface rect for tiling.
|
| gfx::Rect viewport_rect_for_tile_priority;
|
| - if (parent_draw_constraints_.is_layer ||
|
| - last_on_draw_global_visible_rect_.IsEmpty()) {
|
| - viewport_rect_for_tile_priority = parent_draw_constraints_.surface_rect;
|
| - } else {
|
| - viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_;
|
| +
|
| + // Leave viewport_rect_for_tile_priority empty if offscreen_pre_raster_ is on.
|
| + if (!offscreen_pre_raster_) {
|
| + if (parent_draw_constraints_.is_layer ||
|
| + last_on_draw_global_visible_rect_.IsEmpty()) {
|
| + viewport_rect_for_tile_priority = parent_draw_constraints_.surface_rect;
|
| + } else {
|
| + viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_;
|
| + }
|
| }
|
|
|
| scoped_ptr<cc::CompositorFrame> frame =
|
| @@ -326,6 +325,11 @@ void BrowserViewRenderer::ClearView() {
|
| EnsureContinuousInvalidation(true, false);
|
| }
|
|
|
| +void BrowserViewRenderer::SetOffscreenPreRaster(bool enable) {
|
| + // TODO(hush): anything to do when the setting is toggled?
|
| + offscreen_pre_raster_ = enable;
|
| +}
|
| +
|
| void BrowserViewRenderer::SetIsPaused(bool paused) {
|
| TRACE_EVENT_INSTANT1("android_webview",
|
| "BrowserViewRenderer::SetIsPaused",
|
|
|