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 b958dae01ffed772b4cec39af5c85b189334e3ef..05e6bbef794ce820f45803ef503858024b8942f1 100644 |
--- a/android_webview/browser/browser_view_renderer.cc |
+++ b/android_webview/browser/browser_view_renderer.cc |
@@ -259,14 +259,29 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
draw_gl_input->width = width_; |
draw_gl_input->height = height_; |
- gfx::Transform transform; |
+ parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints(); |
gfx::Size surface_size(width_, height_); |
gfx::Rect viewport(surface_size); |
- // TODO(boliu): Should really be |last_on_draw_global_visible_rect_|. |
- // See crbug.com/372073. |
gfx::Rect clip = viewport; |
- scoped_ptr<cc::CompositorFrame> frame = compositor_->DemandDrawHw( |
- surface_size, transform, viewport, clip); |
+ gfx::Transform transform_for_tile_priority = |
+ parent_draw_constraints_.transform; |
+ |
+ // If the WebView is on a layer, the parent transform is just an identity |
+ // matrix and WebView does not know what transform is applied onto the layer. |
+ // In this case, just use the surface rect for tiling. |
+ gfx::Rect viewport_rect_for_tile_priority; |
+ if (parent_draw_constraints_.is_layer) |
+ 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 = |
+ compositor_->DemandDrawHw(surface_size, |
+ gfx::Transform(), |
+ viewport, |
+ clip, |
+ viewport_rect_for_tile_priority, |
+ transform_for_tile_priority); |
if (!frame.get()) |
return false; |
@@ -279,6 +294,12 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
return client_->RequestDrawGL(java_canvas, false); |
} |
+void BrowserViewRenderer::InvalidateOnceIfNeeded() { |
+ if (!parent_draw_constraints_.Equals( |
+ shared_renderer_state_->ParentDrawConstraints())) |
+ EnsureContinuousInvalidation(true); |
+} |
+ |
void BrowserViewRenderer::ReturnUnusedResource(scoped_ptr<DrawGLInput> input) { |
if (!input.get()) |
return; |