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 fd00b6be6b701a1c054c305d7ccadf9ae3f1890b..77bd2f9948e4cee4ee26811c6011b108df1974b6 100644 |
--- a/android_webview/browser/browser_view_renderer.cc |
+++ b/android_webview/browser/browser_view_renderer.cc |
@@ -5,6 +5,7 @@ |
#include "android_webview/browser/browser_view_renderer.h" |
#include "android_webview/browser/browser_view_renderer_client.h" |
+#include "android_webview/browser/parent_compositor_draw_constraints.h" |
#include "android_webview/browser/shared_renderer_state.h" |
#include "android_webview/common/aw_switches.h" |
#include "android_webview/public/browser/draw_gl.h" |
@@ -258,14 +259,29 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
draw_gl_input->width = width_; |
draw_gl_input->height = height_; |
- gfx::Transform transform; |
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::Rect external_tiling_rect; |
+ gfx::Transform external_tiling_transform = parent_draw_constraints_.transform; |
+ |
+ parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints(); |
+ |
+ // 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. |
+ if (parent_draw_constraints_.is_layer) |
+ external_tiling_rect = parent_draw_constraints_.surface_rect; |
+ else |
+ external_tiling_rect = last_on_draw_global_visible_rect_; |
+ |
+ scoped_ptr<cc::CompositorFrame> frame = |
+ compositor_->DemandDrawHw(surface_size, |
+ gfx::Transform(), |
+ viewport, |
+ clip, |
+ external_tiling_rect, |
+ external_tiling_transform); |
if (!frame.get()) |
return false; |