| 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_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| 11 #include "base/trace_event/trace_event.h" | 11 #include "base/trace_event/trace_event.h" |
| 12 #include "base/trace_event/trace_event_argument.h" | 12 #include "base/trace_event/trace_event_argument.h" |
| 13 #include "cc/animation/keyframed_animation_curve.h" | 13 #include "cc/animation/keyframed_animation_curve.h" |
| 14 #include "cc/animation/scrollbar_animation_controller.h" | 14 #include "cc/animation/scrollbar_animation_controller.h" |
| 15 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" | 15 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" |
| 16 #include "cc/animation/scrollbar_animation_controller_thinning.h" | 16 #include "cc/animation/scrollbar_animation_controller_thinning.h" |
| 17 #include "cc/base/math_util.h" | 17 #include "cc/base/math_util.h" |
| 18 #include "cc/base/synced_property.h" | 18 #include "cc/base/synced_property.h" |
| 19 #include "cc/base/util.h" | 19 #include "cc/base/util.h" |
| 20 #include "cc/debug/devtools_instrumentation.h" | 20 #include "cc/debug/devtools_instrumentation.h" |
| 21 #include "cc/debug/traced_value.h" | 21 #include "cc/debug/traced_value.h" |
| 22 #include "cc/input/page_scale_animation.h" | 22 #include "cc/input/page_scale_animation.h" |
| 23 #include "cc/layers/heads_up_display_layer_impl.h" | 23 #include "cc/layers/heads_up_display_layer_impl.h" |
| 24 #include "cc/layers/layer.h" | 24 #include "cc/layers/layer.h" |
| 25 #include "cc/layers/layer_iterator.h" | 25 #include "cc/layers/layer_iterator.h" |
| 26 #include "cc/layers/render_surface_impl.h" | 26 #include "cc/layers/render_surface_impl.h" |
| 27 #include "cc/layers/scrollbar_layer_impl_base.h" | 27 #include "cc/layers/scrollbar_layer_impl_base.h" |
| 28 #include "cc/layers/viewport.h" |
| 28 #include "cc/resources/ui_resource_request.h" | 29 #include "cc/resources/ui_resource_request.h" |
| 29 #include "cc/trees/layer_tree_host_common.h" | 30 #include "cc/trees/layer_tree_host_common.h" |
| 30 #include "cc/trees/layer_tree_host_impl.h" | 31 #include "cc/trees/layer_tree_host_impl.h" |
| 31 #include "cc/trees/occlusion_tracker.h" | 32 #include "cc/trees/occlusion_tracker.h" |
| 32 #include "ui/gfx/geometry/point_conversions.h" | 33 #include "ui/gfx/geometry/point_conversions.h" |
| 33 #include "ui/gfx/geometry/size_conversions.h" | 34 #include "ui/gfx/geometry/size_conversions.h" |
| 34 #include "ui/gfx/geometry/vector2d_conversions.h" | 35 #include "ui/gfx/geometry/vector2d_conversions.h" |
| 35 | 36 |
| 36 namespace cc { | 37 namespace cc { |
| 37 | 38 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 contents_textures_purged_(false), | 99 contents_textures_purged_(false), |
| 99 viewport_size_invalid_(false), | 100 viewport_size_invalid_(false), |
| 100 needs_update_draw_properties_(true), | 101 needs_update_draw_properties_(true), |
| 101 needs_full_tree_sync_(true), | 102 needs_full_tree_sync_(true), |
| 102 next_activation_forces_redraw_(false), | 103 next_activation_forces_redraw_(false), |
| 103 has_ever_been_drawn_(false), | 104 has_ever_been_drawn_(false), |
| 104 render_surface_layer_list_id_(0), | 105 render_surface_layer_list_id_(0), |
| 105 top_controls_shrink_blink_size_(false), | 106 top_controls_shrink_blink_size_(false), |
| 106 top_controls_height_(0), | 107 top_controls_height_(0), |
| 107 top_controls_shown_ratio_(top_controls_shown_ratio) { | 108 top_controls_shown_ratio_(top_controls_shown_ratio) { |
| 109 viewport_ = Viewport::Create(layer_tree_host_impl); |
| 108 } | 110 } |
| 109 | 111 |
| 110 LayerTreeImpl::~LayerTreeImpl() { | 112 LayerTreeImpl::~LayerTreeImpl() { |
| 111 BreakSwapPromises(SwapPromise::SWAP_FAILS); | 113 BreakSwapPromises(SwapPromise::SWAP_FAILS); |
| 112 | 114 |
| 113 // Need to explicitly clear the tree prior to destroying this so that | 115 // Need to explicitly clear the tree prior to destroying this so that |
| 114 // the LayerTreeImpl pointer is still valid in the LayerImpl dtor. | 116 // the LayerTreeImpl pointer is still valid in the LayerImpl dtor. |
| 115 DCHECK(!root_layer_); | 117 DCHECK(!root_layer_); |
| 116 DCHECK(layers_with_copy_output_request_.empty()); | 118 DCHECK(layers_with_copy_output_request_.empty()); |
| 117 } | 119 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 141 if (outer_viewport_scroll_layer_) | 143 if (outer_viewport_scroll_layer_) |
| 142 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | 144 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); |
| 143 inner_viewport_scroll_delegate_proxy_ = nullptr; | 145 inner_viewport_scroll_delegate_proxy_ = nullptr; |
| 144 outer_viewport_scroll_delegate_proxy_ = nullptr; | 146 outer_viewport_scroll_delegate_proxy_ = nullptr; |
| 145 | 147 |
| 146 root_layer_ = layer.Pass(); | 148 root_layer_ = layer.Pass(); |
| 147 currently_scrolling_layer_ = NULL; | 149 currently_scrolling_layer_ = NULL; |
| 148 inner_viewport_scroll_layer_ = NULL; | 150 inner_viewport_scroll_layer_ = NULL; |
| 149 outer_viewport_scroll_layer_ = NULL; | 151 outer_viewport_scroll_layer_ = NULL; |
| 150 page_scale_layer_ = NULL; | 152 page_scale_layer_ = NULL; |
| 153 viewport_->SetViewportLayers(inner_viewport_scroll_layer_, |
| 154 outer_viewport_scroll_layer_); |
| 151 | 155 |
| 152 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); | 156 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); |
| 153 } | 157 } |
| 154 | 158 |
| 155 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { | 159 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { |
| 156 return inner_viewport_scroll_layer_; | 160 return inner_viewport_scroll_layer_; |
| 157 } | 161 } |
| 158 | 162 |
| 159 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const { | 163 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const { |
| 160 return outer_viewport_scroll_layer_; | 164 return outer_viewport_scroll_layer_; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 191 if (inner_viewport_scroll_layer_) | 195 if (inner_viewport_scroll_layer_) |
| 192 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | 196 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); |
| 193 if (outer_viewport_scroll_layer_) | 197 if (outer_viewport_scroll_layer_) |
| 194 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | 198 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); |
| 195 inner_viewport_scroll_delegate_proxy_ = nullptr; | 199 inner_viewport_scroll_delegate_proxy_ = nullptr; |
| 196 outer_viewport_scroll_delegate_proxy_ = nullptr; | 200 outer_viewport_scroll_delegate_proxy_ = nullptr; |
| 197 inner_viewport_scroll_layer_ = NULL; | 201 inner_viewport_scroll_layer_ = NULL; |
| 198 outer_viewport_scroll_layer_ = NULL; | 202 outer_viewport_scroll_layer_ = NULL; |
| 199 page_scale_layer_ = NULL; | 203 page_scale_layer_ = NULL; |
| 200 currently_scrolling_layer_ = NULL; | 204 currently_scrolling_layer_ = NULL; |
| 205 viewport_->SetViewportLayers(inner_viewport_scroll_layer_, |
| 206 outer_viewport_scroll_layer_); |
| 201 | 207 |
| 202 render_surface_layer_list_.clear(); | 208 render_surface_layer_list_.clear(); |
| 203 set_needs_update_draw_properties(); | 209 set_needs_update_draw_properties(); |
| 204 return root_layer_.Pass(); | 210 return root_layer_.Pass(); |
| 205 } | 211 } |
| 206 | 212 |
| 207 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 213 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
| 208 // The request queue should have been processed and does not require a push. | 214 // The request queue should have been processed and does not require a push. |
| 209 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 215 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
| 210 | 216 |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 DCHECK(page_scale_layer_); | 512 DCHECK(page_scale_layer_); |
| 507 | 513 |
| 508 inner_viewport_scroll_layer_ = | 514 inner_viewport_scroll_layer_ = |
| 509 LayerById(inner_viewport_scroll_layer_id); | 515 LayerById(inner_viewport_scroll_layer_id); |
| 510 DCHECK(inner_viewport_scroll_layer_); | 516 DCHECK(inner_viewport_scroll_layer_); |
| 511 | 517 |
| 512 outer_viewport_scroll_layer_ = | 518 outer_viewport_scroll_layer_ = |
| 513 LayerById(outer_viewport_scroll_layer_id); | 519 LayerById(outer_viewport_scroll_layer_id); |
| 514 DCHECK(outer_viewport_scroll_layer_ || | 520 DCHECK(outer_viewport_scroll_layer_ || |
| 515 outer_viewport_scroll_layer_id == Layer::INVALID_ID); | 521 outer_viewport_scroll_layer_id == Layer::INVALID_ID); |
| 522 viewport_->SetViewportLayers(inner_viewport_scroll_layer_, |
| 523 outer_viewport_scroll_layer_); |
| 516 | 524 |
| 517 HideInnerViewportScrollbarsIfNearMinimumScale(); | 525 HideInnerViewportScrollbarsIfNearMinimumScale(); |
| 518 | 526 |
| 519 if (!root_layer_scroll_offset_delegate_) | 527 if (!root_layer_scroll_offset_delegate_) |
| 520 return; | 528 return; |
| 521 | 529 |
| 522 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | 530 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |
| 523 new LayerScrollOffsetDelegateProxy(inner_viewport_scroll_layer_, | 531 new LayerScrollOffsetDelegateProxy(inner_viewport_scroll_layer_, |
| 524 root_layer_scroll_offset_delegate_, | 532 root_layer_scroll_offset_delegate_, |
| 525 this)); | 533 this)); |
| 526 | 534 |
| 527 if (outer_viewport_scroll_layer_) | 535 if (outer_viewport_scroll_layer_) |
| 528 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | 536 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |
| 529 new LayerScrollOffsetDelegateProxy(outer_viewport_scroll_layer_, | 537 new LayerScrollOffsetDelegateProxy(outer_viewport_scroll_layer_, |
| 530 root_layer_scroll_offset_delegate_, | 538 root_layer_scroll_offset_delegate_, |
| 531 this)); | 539 this)); |
| 532 } | 540 } |
| 533 | 541 |
| 534 void LayerTreeImpl::ClearViewportLayers() { | 542 void LayerTreeImpl::ClearViewportLayers() { |
| 535 page_scale_layer_ = NULL; | 543 page_scale_layer_ = NULL; |
| 536 inner_viewport_scroll_layer_ = NULL; | 544 inner_viewport_scroll_layer_ = NULL; |
| 537 outer_viewport_scroll_layer_ = NULL; | 545 outer_viewport_scroll_layer_ = NULL; |
| 546 viewport_->SetViewportLayers(inner_viewport_scroll_layer_, |
| 547 outer_viewport_scroll_layer_); |
| 538 } | 548 } |
| 539 | 549 |
| 540 bool LayerTreeImpl::UpdateDrawProperties(bool update_lcd_text) { | 550 bool LayerTreeImpl::UpdateDrawProperties(bool update_lcd_text) { |
| 541 if (!needs_update_draw_properties_) | 551 if (!needs_update_draw_properties_) |
| 542 return true; | 552 return true; |
| 543 | 553 |
| 544 // Calling UpdateDrawProperties must clear this flag, so there can be no | 554 // Calling UpdateDrawProperties must clear this flag, so there can be no |
| 545 // early outs before this. | 555 // early outs before this. |
| 546 needs_update_draw_properties_ = false; | 556 needs_update_draw_properties_ = false; |
| 547 | 557 |
| (...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1636 scoped_ptr<PendingPageScaleAnimation> pending_animation) { | 1646 scoped_ptr<PendingPageScaleAnimation> pending_animation) { |
| 1637 pending_page_scale_animation_ = pending_animation.Pass(); | 1647 pending_page_scale_animation_ = pending_animation.Pass(); |
| 1638 } | 1648 } |
| 1639 | 1649 |
| 1640 scoped_ptr<PendingPageScaleAnimation> | 1650 scoped_ptr<PendingPageScaleAnimation> |
| 1641 LayerTreeImpl::TakePendingPageScaleAnimation() { | 1651 LayerTreeImpl::TakePendingPageScaleAnimation() { |
| 1642 return pending_page_scale_animation_.Pass(); | 1652 return pending_page_scale_animation_.Pass(); |
| 1643 } | 1653 } |
| 1644 | 1654 |
| 1645 } // namespace cc | 1655 } // namespace cc |
| OLD | NEW |