Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index 283240d2261f64c22331f9fffca45e8e8d8e4043..fdf8e5cfb37dd2adf27f1381ac141c953138853d 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -69,6 +69,7 @@ |
#include "gpu/command_buffer/client/gles2_interface.h" |
#include "gpu/GLES2/gl2extchromium.h" |
#include "ui/gfx/frame_time.h" |
+#include "ui/gfx/geometry/rect_conversions.h" |
#include "ui/gfx/size_conversions.h" |
#include "ui/gfx/vector2d_conversions.h" |
@@ -1375,15 +1376,32 @@ void LayerTreeHostImpl::SetExternalDrawConstraints( |
const gfx::Transform& transform, |
const gfx::Rect& viewport, |
const gfx::Rect& clip, |
+ const gfx::Rect& viewport_rect_for_tile_priority, |
+ const gfx::Transform& transform_for_tile_priority, |
bool resourceless_software_draw) { |
+ gfx::Rect viewport_rect_for_tile_priority_in_view_space; |
+ if (!resourceless_software_draw) { |
+ gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); |
+ if (transform_for_tile_priority.GetInverse(&screen_to_view)) { |
+ // Convert from screen space to view space. |
+ viewport_rect_for_tile_priority_in_view_space = |
+ gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
+ screen_to_view, viewport_rect_for_tile_priority)); |
+ } |
+ } |
+ |
if (external_transform_ != transform || external_viewport_ != viewport || |
- resourceless_software_draw_ != resourceless_software_draw) { |
+ resourceless_software_draw_ != resourceless_software_draw || |
+ viewport_rect_for_tile_priority_ != |
+ viewport_rect_for_tile_priority_in_view_space) { |
active_tree_->set_needs_update_draw_properties(); |
} |
external_transform_ = transform; |
external_viewport_ = viewport; |
external_clip_ = clip; |
+ viewport_rect_for_tile_priority_ = |
+ viewport_rect_for_tile_priority_in_view_space; |
resourceless_software_draw_ = resourceless_software_draw; |
} |
@@ -2199,6 +2217,13 @@ void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { |
SetFullRootLayerDamage(); |
} |
+const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { |
+ if (viewport_rect_for_tile_priority_.IsEmpty()) |
+ return DeviceViewport(); |
+ |
+ return viewport_rect_for_tile_priority_; |
+} |
+ |
gfx::Size LayerTreeHostImpl::DrawViewportSize() const { |
return DeviceViewport().size(); |
} |