Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 1457803003: cc:: Don't use cached screen space transform for layers not in RSLL. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 #include "cc/raster/tile_task_worker_pool.h" 61 #include "cc/raster/tile_task_worker_pool.h"
62 #include "cc/raster/zero_copy_tile_task_worker_pool.h" 62 #include "cc/raster/zero_copy_tile_task_worker_pool.h"
63 #include "cc/resources/memory_history.h" 63 #include "cc/resources/memory_history.h"
64 #include "cc/resources/resource_pool.h" 64 #include "cc/resources/resource_pool.h"
65 #include "cc/resources/ui_resource_bitmap.h" 65 #include "cc/resources/ui_resource_bitmap.h"
66 #include "cc/scheduler/delay_based_time_source.h" 66 #include "cc/scheduler/delay_based_time_source.h"
67 #include "cc/tiles/eviction_tile_priority_queue.h" 67 #include "cc/tiles/eviction_tile_priority_queue.h"
68 #include "cc/tiles/picture_layer_tiling.h" 68 #include "cc/tiles/picture_layer_tiling.h"
69 #include "cc/tiles/raster_tile_priority_queue.h" 69 #include "cc/tiles/raster_tile_priority_queue.h"
70 #include "cc/trees/damage_tracker.h" 70 #include "cc/trees/damage_tracker.h"
71 #include "cc/trees/draw_property_utils.h"
71 #include "cc/trees/latency_info_swap_promise_monitor.h" 72 #include "cc/trees/latency_info_swap_promise_monitor.h"
72 #include "cc/trees/layer_tree_host.h" 73 #include "cc/trees/layer_tree_host.h"
73 #include "cc/trees/layer_tree_host_common.h" 74 #include "cc/trees/layer_tree_host_common.h"
74 #include "cc/trees/layer_tree_impl.h" 75 #include "cc/trees/layer_tree_impl.h"
75 #include "cc/trees/single_thread_proxy.h" 76 #include "cc/trees/single_thread_proxy.h"
76 #include "cc/trees/tree_synchronizer.h" 77 #include "cc/trees/tree_synchronizer.h"
77 #include "gpu/GLES2/gl2extchromium.h" 78 #include "gpu/GLES2/gl2extchromium.h"
78 #include "gpu/command_buffer/client/gles2_interface.h" 79 #include "gpu/command_buffer/client/gles2_interface.h"
79 #include "ui/gfx/geometry/rect_conversions.h" 80 #include "ui/gfx/geometry/rect_conversions.h"
80 #include "ui/gfx/geometry/scroll_offset.h" 81 #include "ui/gfx/geometry/scroll_offset.h"
(...skipping 2487 matching lines...) Expand 10 before | Expand all | Expand 10 after
2568 ScrollAnimationCreate(layer_impl, target_offset, current_offset); 2569 ScrollAnimationCreate(layer_impl, target_offset, current_offset);
2569 2570
2570 SetNeedsAnimate(); 2571 SetNeedsAnimate();
2571 return SCROLL_STARTED; 2572 return SCROLL_STARTED;
2572 } 2573 }
2573 } 2574 }
2574 ScrollEnd(); 2575 ScrollEnd();
2575 return scroll_status; 2576 return scroll_status;
2576 } 2577 }
2577 2578
2579 const gfx::Transform LayerTreeHostImpl::LayerScreenSpaceTransform(
2580 const LayerImpl* layer) {
2581 const bool use_property_trees =
2582 settings_.use_property_trees || settings_.verify_property_trees;
2583 if (!use_property_trees)
2584 return layer->screen_space_transform();
2585 const bool is_active_tree = layer->layer_tree_impl() == active_tree();
2586 LayerTreeImpl* layer_tree_impl =
2587 is_active_tree ? active_tree() : pending_tree();
2588 DCHECK(layer_tree_impl);
2589 return layer->IsDrawnRenderSurfaceLayerListMember()
2590 ? layer->screen_space_transform()
2591 : ScreenSpaceTransformFromPropertyTrees(
2592 layer, layer_tree_impl->property_trees()->transform_tree);
2593 }
2594
2578 gfx::Vector2dF LayerTreeHostImpl::ScrollLayerWithViewportSpaceDelta( 2595 gfx::Vector2dF LayerTreeHostImpl::ScrollLayerWithViewportSpaceDelta(
2579 LayerImpl* layer_impl, 2596 LayerImpl* layer_impl,
2580 const gfx::PointF& viewport_point, 2597 const gfx::PointF& viewport_point,
2581 const gfx::Vector2dF& viewport_delta) { 2598 const gfx::Vector2dF& viewport_delta) {
2582 // Layers with non-invertible screen space transforms should not have passed 2599 // Layers with non-invertible screen space transforms should not have passed
2583 // the scroll hit test in the first place. 2600 // the scroll hit test in the first place.
2584 DCHECK(layer_impl->screen_space_transform().IsInvertible()); 2601 const gfx::Transform screen_space_transform =
2602 LayerScreenSpaceTransform(layer_impl);
2603 DCHECK(screen_space_transform.IsInvertible());
2585 gfx::Transform inverse_screen_space_transform( 2604 gfx::Transform inverse_screen_space_transform(
2586 gfx::Transform::kSkipInitialization); 2605 gfx::Transform::kSkipInitialization);
2587 bool did_invert = layer_impl->screen_space_transform().GetInverse( 2606 bool did_invert =
2588 &inverse_screen_space_transform); 2607 screen_space_transform.GetInverse(&inverse_screen_space_transform);
2589 // TODO(shawnsingh): With the advent of impl-side scrolling for non-root 2608 // TODO(shawnsingh): With the advent of impl-side scrolling for non-root
2590 // layers, we may need to explicitly handle uninvertible transforms here. 2609 // layers, we may need to explicitly handle uninvertible transforms here.
2591 DCHECK(did_invert); 2610 DCHECK(did_invert);
2592 2611
2593 float scale_from_viewport_to_screen_space = 2612 float scale_from_viewport_to_screen_space =
2594 active_tree_->device_scale_factor(); 2613 active_tree_->device_scale_factor();
2595 gfx::PointF screen_space_point = 2614 gfx::PointF screen_space_point =
2596 gfx::ScalePoint(viewport_point, scale_from_viewport_to_screen_space); 2615 gfx::ScalePoint(viewport_point, scale_from_viewport_to_screen_space);
2597 2616
2598 gfx::Vector2dF screen_space_delta = viewport_delta; 2617 gfx::Vector2dF screen_space_delta = viewport_delta;
(...skipping 23 matching lines...) Expand all
2622 layer_impl->ScrollBy(local_end_point - local_start_point); 2641 layer_impl->ScrollBy(local_end_point - local_start_point);
2623 gfx::ScrollOffset scrolled = 2642 gfx::ScrollOffset scrolled =
2624 layer_impl->CurrentScrollOffset() - previous_offset; 2643 layer_impl->CurrentScrollOffset() - previous_offset;
2625 2644
2626 // Get the end point in the layer's content space so we can apply its 2645 // Get the end point in the layer's content space so we can apply its
2627 // ScreenSpaceTransform. 2646 // ScreenSpaceTransform.
2628 gfx::PointF actual_local_end_point = 2647 gfx::PointF actual_local_end_point =
2629 local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y()); 2648 local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y());
2630 2649
2631 // Calculate the applied scroll delta in viewport space coordinates. 2650 // Calculate the applied scroll delta in viewport space coordinates.
2632 gfx::PointF actual_screen_space_end_point = 2651 gfx::PointF actual_screen_space_end_point = MathUtil::MapPoint(
2633 MathUtil::MapPoint(layer_impl->screen_space_transform(), 2652 screen_space_transform, actual_local_end_point, &end_clipped);
2634 actual_local_end_point, &end_clipped);
2635 DCHECK(!end_clipped); 2653 DCHECK(!end_clipped);
2636 if (end_clipped) 2654 if (end_clipped)
2637 return gfx::Vector2dF(); 2655 return gfx::Vector2dF();
2638 gfx::PointF actual_viewport_end_point = 2656 gfx::PointF actual_viewport_end_point =
2639 gfx::ScalePoint(actual_screen_space_end_point, 2657 gfx::ScalePoint(actual_screen_space_end_point,
2640 1.f / scale_from_viewport_to_screen_space); 2658 1.f / scale_from_viewport_to_screen_space);
2641 return actual_viewport_end_point - viewport_point; 2659 return actual_viewport_end_point - viewport_point;
2642 } 2660 }
2643 2661
2644 static gfx::Vector2dF ScrollLayerWithLocalDelta( 2662 static gfx::Vector2dF ScrollLayerWithLocalDelta(
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
2890 2908
2891 float LayerTreeHostImpl::DeviceSpaceDistanceToLayer( 2909 float LayerTreeHostImpl::DeviceSpaceDistanceToLayer(
2892 const gfx::PointF& device_viewport_point, 2910 const gfx::PointF& device_viewport_point,
2893 LayerImpl* layer_impl) { 2911 LayerImpl* layer_impl) {
2894 if (!layer_impl) 2912 if (!layer_impl)
2895 return std::numeric_limits<float>::max(); 2913 return std::numeric_limits<float>::max();
2896 2914
2897 gfx::Rect layer_impl_bounds(layer_impl->bounds()); 2915 gfx::Rect layer_impl_bounds(layer_impl->bounds());
2898 2916
2899 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect( 2917 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect(
2900 layer_impl->screen_space_transform(), gfx::RectF(layer_impl_bounds)); 2918 LayerScreenSpaceTransform(layer_impl), gfx::RectF(layer_impl_bounds));
2901 2919
2902 return device_viewport_layer_impl_bounds.ManhattanDistanceToPoint( 2920 return device_viewport_layer_impl_bounds.ManhattanDistanceToPoint(
2903 device_viewport_point); 2921 device_viewport_point);
2904 } 2922 }
2905 2923
2906 void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { 2924 void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) {
2907 gfx::PointF device_viewport_point = gfx::ScalePoint( 2925 gfx::PointF device_viewport_point = gfx::ScalePoint(
2908 gfx::PointF(viewport_point), active_tree_->device_scale_factor()); 2926 gfx::PointF(viewport_point), active_tree_->device_scale_factor());
2909 LayerImpl* layer_impl = 2927 LayerImpl* layer_impl =
2910 active_tree_->FindLayerThatIsHitByPoint(device_viewport_point); 2928 active_tree_->FindLayerThatIsHitByPoint(device_viewport_point);
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
3697 return task_runner_provider_->HasImplThread(); 3715 return task_runner_provider_->HasImplThread();
3698 } 3716 }
3699 3717
3700 bool LayerTreeHostImpl::CommitToActiveTree() const { 3718 bool LayerTreeHostImpl::CommitToActiveTree() const {
3701 // In single threaded mode we skip the pending tree and commit directly to the 3719 // In single threaded mode we skip the pending tree and commit directly to the
3702 // active tree. 3720 // active tree.
3703 return !task_runner_provider_->HasImplThread(); 3721 return !task_runner_provider_->HasImplThread();
3704 } 3722 }
3705 3723
3706 } // namespace cc 3724 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698