Chromium Code Reviews| 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 is_active_tree = layer->layer_tree_impl() == active_tree(); | |
| 2582 LayerTreeImpl* layer_tree_impl = | |
| 2583 is_active_tree ? active_tree() : pending_tree(); | |
| 2584 DCHECK(layer_tree_impl); | |
| 2585 const bool use_property_trees = | |
| 2586 layer_tree_impl->settings().use_property_trees || | |
| 2587 layer_tree_impl->settings().verify_property_trees; | |
|
ajuma
2015/11/18 23:03:42
You can use settings_ here, no need to go through
jaydasika
2015/11/19 01:10:10
Done.
| |
| 2588 if (!use_property_trees) | |
| 2589 return layer->screen_space_transform(); | |
| 2590 return layer->IsDrawnRenderSurfaceLayerListMember() | |
| 2591 ? layer->screen_space_transform() | |
| 2592 : ScreenSpaceTransformFromPropertyTrees( | |
| 2593 layer, layer_tree_impl->property_trees()->transform_tree); | |
| 2594 } | |
| 2595 | |
| 2578 gfx::Vector2dF LayerTreeHostImpl::ScrollLayerWithViewportSpaceDelta( | 2596 gfx::Vector2dF LayerTreeHostImpl::ScrollLayerWithViewportSpaceDelta( |
| 2579 LayerImpl* layer_impl, | 2597 LayerImpl* layer_impl, |
| 2580 const gfx::PointF& viewport_point, | 2598 const gfx::PointF& viewport_point, |
| 2581 const gfx::Vector2dF& viewport_delta) { | 2599 const gfx::Vector2dF& viewport_delta) { |
| 2582 // Layers with non-invertible screen space transforms should not have passed | 2600 // Layers with non-invertible screen space transforms should not have passed |
| 2583 // the scroll hit test in the first place. | 2601 // the scroll hit test in the first place. |
| 2584 DCHECK(layer_impl->screen_space_transform().IsInvertible()); | 2602 const gfx::Transform screen_space_transform = |
| 2603 LayerScreenSpaceTransform(layer_impl); | |
| 2604 DCHECK(screen_space_transform.IsInvertible()); | |
| 2585 gfx::Transform inverse_screen_space_transform( | 2605 gfx::Transform inverse_screen_space_transform( |
| 2586 gfx::Transform::kSkipInitialization); | 2606 gfx::Transform::kSkipInitialization); |
| 2587 bool did_invert = layer_impl->screen_space_transform().GetInverse( | 2607 bool did_invert = |
| 2588 &inverse_screen_space_transform); | 2608 screen_space_transform.GetInverse(&inverse_screen_space_transform); |
| 2589 // TODO(shawnsingh): With the advent of impl-side scrolling for non-root | 2609 // TODO(shawnsingh): With the advent of impl-side scrolling for non-root |
| 2590 // layers, we may need to explicitly handle uninvertible transforms here. | 2610 // layers, we may need to explicitly handle uninvertible transforms here. |
| 2591 DCHECK(did_invert); | 2611 DCHECK(did_invert); |
| 2592 | 2612 |
| 2593 float scale_from_viewport_to_screen_space = | 2613 float scale_from_viewport_to_screen_space = |
| 2594 active_tree_->device_scale_factor(); | 2614 active_tree_->device_scale_factor(); |
| 2595 gfx::PointF screen_space_point = | 2615 gfx::PointF screen_space_point = |
| 2596 gfx::ScalePoint(viewport_point, scale_from_viewport_to_screen_space); | 2616 gfx::ScalePoint(viewport_point, scale_from_viewport_to_screen_space); |
| 2597 | 2617 |
| 2598 gfx::Vector2dF screen_space_delta = viewport_delta; | 2618 gfx::Vector2dF screen_space_delta = viewport_delta; |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 2622 layer_impl->ScrollBy(local_end_point - local_start_point); | 2642 layer_impl->ScrollBy(local_end_point - local_start_point); |
| 2623 gfx::ScrollOffset scrolled = | 2643 gfx::ScrollOffset scrolled = |
| 2624 layer_impl->CurrentScrollOffset() - previous_offset; | 2644 layer_impl->CurrentScrollOffset() - previous_offset; |
| 2625 | 2645 |
| 2626 // Get the end point in the layer's content space so we can apply its | 2646 // Get the end point in the layer's content space so we can apply its |
| 2627 // ScreenSpaceTransform. | 2647 // ScreenSpaceTransform. |
| 2628 gfx::PointF actual_local_end_point = | 2648 gfx::PointF actual_local_end_point = |
| 2629 local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y()); | 2649 local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y()); |
| 2630 | 2650 |
| 2631 // Calculate the applied scroll delta in viewport space coordinates. | 2651 // Calculate the applied scroll delta in viewport space coordinates. |
| 2632 gfx::PointF actual_screen_space_end_point = | 2652 gfx::PointF actual_screen_space_end_point = MathUtil::MapPoint( |
| 2633 MathUtil::MapPoint(layer_impl->screen_space_transform(), | 2653 screen_space_transform, actual_local_end_point, &end_clipped); |
| 2634 actual_local_end_point, &end_clipped); | |
| 2635 DCHECK(!end_clipped); | 2654 DCHECK(!end_clipped); |
| 2636 if (end_clipped) | 2655 if (end_clipped) |
| 2637 return gfx::Vector2dF(); | 2656 return gfx::Vector2dF(); |
| 2638 gfx::PointF actual_viewport_end_point = | 2657 gfx::PointF actual_viewport_end_point = |
| 2639 gfx::ScalePoint(actual_screen_space_end_point, | 2658 gfx::ScalePoint(actual_screen_space_end_point, |
| 2640 1.f / scale_from_viewport_to_screen_space); | 2659 1.f / scale_from_viewport_to_screen_space); |
| 2641 return actual_viewport_end_point - viewport_point; | 2660 return actual_viewport_end_point - viewport_point; |
| 2642 } | 2661 } |
| 2643 | 2662 |
| 2644 static gfx::Vector2dF ScrollLayerWithLocalDelta( | 2663 static gfx::Vector2dF ScrollLayerWithLocalDelta( |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2890 | 2909 |
| 2891 float LayerTreeHostImpl::DeviceSpaceDistanceToLayer( | 2910 float LayerTreeHostImpl::DeviceSpaceDistanceToLayer( |
| 2892 const gfx::PointF& device_viewport_point, | 2911 const gfx::PointF& device_viewport_point, |
| 2893 LayerImpl* layer_impl) { | 2912 LayerImpl* layer_impl) { |
| 2894 if (!layer_impl) | 2913 if (!layer_impl) |
| 2895 return std::numeric_limits<float>::max(); | 2914 return std::numeric_limits<float>::max(); |
| 2896 | 2915 |
| 2897 gfx::Rect layer_impl_bounds(layer_impl->bounds()); | 2916 gfx::Rect layer_impl_bounds(layer_impl->bounds()); |
| 2898 | 2917 |
| 2899 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect( | 2918 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect( |
| 2900 layer_impl->screen_space_transform(), gfx::RectF(layer_impl_bounds)); | 2919 LayerScreenSpaceTransform(layer_impl), gfx::RectF(layer_impl_bounds)); |
| 2901 | 2920 |
| 2902 return device_viewport_layer_impl_bounds.ManhattanDistanceToPoint( | 2921 return device_viewport_layer_impl_bounds.ManhattanDistanceToPoint( |
| 2903 device_viewport_point); | 2922 device_viewport_point); |
| 2904 } | 2923 } |
| 2905 | 2924 |
| 2906 void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { | 2925 void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { |
| 2907 gfx::PointF device_viewport_point = gfx::ScalePoint( | 2926 gfx::PointF device_viewport_point = gfx::ScalePoint( |
| 2908 gfx::PointF(viewport_point), active_tree_->device_scale_factor()); | 2927 gfx::PointF(viewport_point), active_tree_->device_scale_factor()); |
| 2909 LayerImpl* layer_impl = | 2928 LayerImpl* layer_impl = |
| 2910 active_tree_->FindLayerThatIsHitByPoint(device_viewport_point); | 2929 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(); | 3716 return task_runner_provider_->HasImplThread(); |
| 3698 } | 3717 } |
| 3699 | 3718 |
| 3700 bool LayerTreeHostImpl::CommitToActiveTree() const { | 3719 bool LayerTreeHostImpl::CommitToActiveTree() const { |
| 3701 // In single threaded mode we skip the pending tree and commit directly to the | 3720 // In single threaded mode we skip the pending tree and commit directly to the |
| 3702 // active tree. | 3721 // active tree. |
| 3703 return !task_runner_provider_->HasImplThread(); | 3722 return !task_runner_provider_->HasImplThread(); |
| 3704 } | 3723 } |
| 3705 | 3724 |
| 3706 } // namespace cc | 3725 } // namespace cc |
| OLD | NEW |