| 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 4034179e8574ed51e5c62227692761e51594e8b2..43b8018b3e32e9515af7c8e92d15d4ec98fabad7 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -68,6 +68,7 @@
|
| #include "cc/tiles/picture_layer_tiling.h"
|
| #include "cc/tiles/raster_tile_priority_queue.h"
|
| #include "cc/trees/damage_tracker.h"
|
| +#include "cc/trees/draw_property_utils.h"
|
| #include "cc/trees/latency_info_swap_promise_monitor.h"
|
| #include "cc/trees/layer_tree_host.h"
|
| #include "cc/trees/layer_tree_host_common.h"
|
| @@ -2575,17 +2576,35 @@ InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated(
|
| return scroll_status;
|
| }
|
|
|
| +const gfx::Transform LayerTreeHostImpl::LayerScreenSpaceTransform(
|
| + const LayerImpl* layer) {
|
| + const bool use_property_trees =
|
| + settings_.use_property_trees || settings_.verify_property_trees;
|
| + if (!use_property_trees)
|
| + return layer->screen_space_transform();
|
| + const bool is_active_tree = layer->layer_tree_impl() == active_tree();
|
| + LayerTreeImpl* layer_tree_impl =
|
| + is_active_tree ? active_tree() : pending_tree();
|
| + DCHECK(layer_tree_impl);
|
| + return layer->IsDrawnRenderSurfaceLayerListMember()
|
| + ? layer->screen_space_transform()
|
| + : ScreenSpaceTransformFromPropertyTrees(
|
| + layer, layer_tree_impl->property_trees()->transform_tree);
|
| +}
|
| +
|
| gfx::Vector2dF LayerTreeHostImpl::ScrollLayerWithViewportSpaceDelta(
|
| LayerImpl* layer_impl,
|
| const gfx::PointF& viewport_point,
|
| const gfx::Vector2dF& viewport_delta) {
|
| // Layers with non-invertible screen space transforms should not have passed
|
| // the scroll hit test in the first place.
|
| - DCHECK(layer_impl->screen_space_transform().IsInvertible());
|
| + const gfx::Transform screen_space_transform =
|
| + LayerScreenSpaceTransform(layer_impl);
|
| + DCHECK(screen_space_transform.IsInvertible());
|
| gfx::Transform inverse_screen_space_transform(
|
| gfx::Transform::kSkipInitialization);
|
| - bool did_invert = layer_impl->screen_space_transform().GetInverse(
|
| - &inverse_screen_space_transform);
|
| + bool did_invert =
|
| + screen_space_transform.GetInverse(&inverse_screen_space_transform);
|
| // TODO(shawnsingh): With the advent of impl-side scrolling for non-root
|
| // layers, we may need to explicitly handle uninvertible transforms here.
|
| DCHECK(did_invert);
|
| @@ -2629,9 +2648,8 @@ gfx::Vector2dF LayerTreeHostImpl::ScrollLayerWithViewportSpaceDelta(
|
| local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y());
|
|
|
| // Calculate the applied scroll delta in viewport space coordinates.
|
| - gfx::PointF actual_screen_space_end_point =
|
| - MathUtil::MapPoint(layer_impl->screen_space_transform(),
|
| - actual_local_end_point, &end_clipped);
|
| + gfx::PointF actual_screen_space_end_point = MathUtil::MapPoint(
|
| + screen_space_transform, actual_local_end_point, &end_clipped);
|
| DCHECK(!end_clipped);
|
| if (end_clipped)
|
| return gfx::Vector2dF();
|
| @@ -2897,7 +2915,7 @@ float LayerTreeHostImpl::DeviceSpaceDistanceToLayer(
|
| gfx::Rect layer_impl_bounds(layer_impl->bounds());
|
|
|
| gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect(
|
| - layer_impl->screen_space_transform(), gfx::RectF(layer_impl_bounds));
|
| + LayerScreenSpaceTransform(layer_impl), gfx::RectF(layer_impl_bounds));
|
|
|
| return device_viewport_layer_impl_bounds.ManhattanDistanceToPoint(
|
| device_viewport_point);
|
|
|