OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |