| 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.h" | 5 #include "cc/trees/layer_tree_host.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 LayerTreeHost::~LayerTreeHost() { | 165 LayerTreeHost::~LayerTreeHost() { |
| 166 // Track when we're inside a main frame to see if compositor is being | 166 // Track when we're inside a main frame to see if compositor is being |
| 167 // destroyed midway which causes a crash. crbug.com/654672 | 167 // destroyed midway which causes a crash. crbug.com/654672 |
| 168 DCHECK(!inside_main_frame_); | 168 DCHECK(!inside_main_frame_); |
| 169 TRACE_EVENT0("cc", "LayerTreeHostInProcess::~LayerTreeHostInProcess"); | 169 TRACE_EVENT0("cc", "LayerTreeHostInProcess::~LayerTreeHostInProcess"); |
| 170 | 170 |
| 171 // Clear any references into the LayerTreeHost. | 171 // Clear any references into the LayerTreeHost. |
| 172 mutator_host_->SetMutatorHostClient(nullptr); | 172 mutator_host_->SetMutatorHostClient(nullptr); |
| 173 | 173 |
| 174 // We must clear any pointers into the layer tree prior to destroying it. | 174 // We must clear any pointers into the layer tree prior to destroying it. |
| 175 RegisterViewportLayers(nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); | 175 RegisterViewportLayers(ViewportLayers()); |
| 176 | 176 |
| 177 if (root_layer_) { | 177 if (root_layer_) { |
| 178 root_layer_->SetLayerTreeHost(nullptr); | 178 root_layer_->SetLayerTreeHost(nullptr); |
| 179 | 179 |
| 180 // The root layer must be destroyed before the layer tree. We've made a | 180 // The root layer must be destroyed before the layer tree. We've made a |
| 181 // contract with our animation controllers that the animation_host will | 181 // contract with our animation controllers that the animation_host will |
| 182 // outlive them, and we must make good. | 182 // outlive them, and we must make good. |
| 183 root_layer_ = nullptr; | 183 root_layer_ = nullptr; |
| 184 } | 184 } |
| 185 | 185 |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 } | 672 } |
| 673 | 673 |
| 674 bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) { | 674 bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) { |
| 675 TRACE_EVENT1("cc", "LayerTreeHostInProcess::DoUpdateLayers", | 675 TRACE_EVENT1("cc", "LayerTreeHostInProcess::DoUpdateLayers", |
| 676 "source_frame_number", SourceFrameNumber()); | 676 "source_frame_number", SourceFrameNumber()); |
| 677 | 677 |
| 678 UpdateHudLayer(debug_state_.ShowHudInfo()); | 678 UpdateHudLayer(debug_state_.ShowHudInfo()); |
| 679 | 679 |
| 680 Layer* root_scroll = | 680 Layer* root_scroll = |
| 681 PropertyTreeBuilder::FindFirstScrollableLayer(root_layer); | 681 PropertyTreeBuilder::FindFirstScrollableLayer(root_layer); |
| 682 Layer* page_scale_layer = page_scale_layer_.get(); | 682 Layer* page_scale_layer = viewport_layers_.page_scale.get(); |
| 683 if (!page_scale_layer && root_scroll) | 683 if (!page_scale_layer && root_scroll) |
| 684 page_scale_layer = root_scroll->parent(); | 684 page_scale_layer = root_scroll->parent(); |
| 685 | 685 |
| 686 if (hud_layer_) { | 686 if (hud_layer_) { |
| 687 hud_layer_->PrepareForCalculateDrawProperties(device_viewport_size_, | 687 hud_layer_->PrepareForCalculateDrawProperties(device_viewport_size_, |
| 688 device_scale_factor_); | 688 device_scale_factor_); |
| 689 // The HUD layer is managed outside the layer list sent to LayerTreeHost | 689 // The HUD layer is managed outside the layer list sent to LayerTreeHost |
| 690 // and needs to have its property tree state set. | 690 // and needs to have its property tree state set. |
| 691 if (settings_.use_layer_lists && root_layer_.get()) { | 691 if (settings_.use_layer_lists && root_layer_.get()) { |
| 692 hud_layer_->SetTransformTreeIndex(root_layer_->transform_tree_index()); | 692 hud_layer_->SetTransformTreeIndex(root_layer_->transform_tree_index()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 if (info->inner_viewport_scroll.layer_id != Layer::INVALID_ID) | 755 if (info->inner_viewport_scroll.layer_id != Layer::INVALID_ID) |
| 756 inner_viewport_scroll_delta = info->inner_viewport_scroll.scroll_delta; | 756 inner_viewport_scroll_delta = info->inner_viewport_scroll.scroll_delta; |
| 757 | 757 |
| 758 if (inner_viewport_scroll_delta.IsZero() && info->page_scale_delta == 1.f && | 758 if (inner_viewport_scroll_delta.IsZero() && info->page_scale_delta == 1.f && |
| 759 info->elastic_overscroll_delta.IsZero() && !info->top_controls_delta) | 759 info->elastic_overscroll_delta.IsZero() && !info->top_controls_delta) |
| 760 return; | 760 return; |
| 761 | 761 |
| 762 // Preemptively apply the scroll offset and scale delta here before sending | 762 // Preemptively apply the scroll offset and scale delta here before sending |
| 763 // it to the client. If the client comes back and sets it to the same | 763 // it to the client. If the client comes back and sets it to the same |
| 764 // value, then the layer can early out without needing a full commit. | 764 // value, then the layer can early out without needing a full commit. |
| 765 if (inner_viewport_scroll_layer_) { | 765 if (viewport_layers_.inner_viewport_scroll) { |
| 766 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 766 viewport_layers_.inner_viewport_scroll->SetScrollOffsetFromImplSide( |
| 767 gfx::ScrollOffsetWithDelta( | 767 gfx::ScrollOffsetWithDelta( |
| 768 inner_viewport_scroll_layer_->scroll_offset(), | 768 viewport_layers_.inner_viewport_scroll->scroll_offset(), |
| 769 inner_viewport_scroll_delta)); | 769 inner_viewport_scroll_delta)); |
| 770 } | 770 } |
| 771 | 771 |
| 772 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); | 772 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); |
| 773 SetElasticOverscrollFromImplSide(elastic_overscroll_ + | 773 SetElasticOverscrollFromImplSide(elastic_overscroll_ + |
| 774 info->elastic_overscroll_delta); | 774 info->elastic_overscroll_delta); |
| 775 // TODO(ccameron): pass the elastic overscroll here so that input events | 775 // TODO(ccameron): pass the elastic overscroll here so that input events |
| 776 // may be translated appropriately. | 776 // may be translated appropriately. |
| 777 client_->ApplyViewportDeltas(inner_viewport_scroll_delta, gfx::Vector2dF(), | 777 client_->ApplyViewportDeltas(inner_viewport_scroll_delta, gfx::Vector2dF(), |
| 778 info->elastic_overscroll_delta, | 778 info->elastic_overscroll_delta, |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 if (hud_layer_.get()) | 895 if (hud_layer_.get()) |
| 896 hud_layer_->RemoveFromParent(); | 896 hud_layer_->RemoveFromParent(); |
| 897 | 897 |
| 898 // Reset gpu rasterization tracking. | 898 // Reset gpu rasterization tracking. |
| 899 // This flag is sticky until a new tree comes along. | 899 // This flag is sticky until a new tree comes along. |
| 900 ResetGpuRasterizationTracking(); | 900 ResetGpuRasterizationTracking(); |
| 901 | 901 |
| 902 SetNeedsFullTreeSync(); | 902 SetNeedsFullTreeSync(); |
| 903 } | 903 } |
| 904 | 904 |
| 905 void LayerTreeHost::RegisterViewportLayers( | 905 LayerTreeHost::ViewportLayers::ViewportLayers() {} |
| 906 scoped_refptr<Layer> overscroll_elasticity_layer, | 906 |
| 907 scoped_refptr<Layer> page_scale_layer, | 907 LayerTreeHost::ViewportLayers::~ViewportLayers() {} |
| 908 scoped_refptr<Layer> inner_viewport_container_layer, | 908 |
| 909 scoped_refptr<Layer> outer_viewport_container_layer, | 909 void LayerTreeHost::RegisterViewportLayers(const ViewportLayers& layers) { |
| 910 scoped_refptr<Layer> inner_viewport_scroll_layer, | 910 DCHECK(!layers.inner_viewport_scroll || |
| 911 scoped_refptr<Layer> outer_viewport_scroll_layer) { | 911 layers.inner_viewport_scroll != layers.outer_viewport_scroll); |
| 912 DCHECK(!inner_viewport_scroll_layer || | 912 viewport_layers_.overscroll_elasticity = layers.overscroll_elasticity; |
| 913 inner_viewport_scroll_layer != outer_viewport_scroll_layer); | 913 viewport_layers_.page_scale = layers.page_scale; |
| 914 overscroll_elasticity_layer_ = overscroll_elasticity_layer; | 914 viewport_layers_.inner_viewport_container = layers.inner_viewport_container; |
| 915 page_scale_layer_ = page_scale_layer; | 915 viewport_layers_.outer_viewport_container = layers.outer_viewport_container; |
| 916 inner_viewport_container_layer_ = inner_viewport_container_layer; | 916 viewport_layers_.inner_viewport_scroll = layers.inner_viewport_scroll; |
| 917 outer_viewport_container_layer_ = outer_viewport_container_layer; | 917 viewport_layers_.outer_viewport_scroll = layers.outer_viewport_scroll; |
| 918 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer; | |
| 919 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer; | |
| 920 } | 918 } |
| 921 | 919 |
| 922 void LayerTreeHost::RegisterSelection(const LayerSelection& selection) { | 920 void LayerTreeHost::RegisterSelection(const LayerSelection& selection) { |
| 923 if (selection_ == selection) | 921 if (selection_ == selection) |
| 924 return; | 922 return; |
| 925 | 923 |
| 926 selection_ = selection; | 924 selection_ = selection; |
| 927 SetNeedsCommit(); | 925 SetNeedsCommit(); |
| 928 } | 926 } |
| 929 | 927 |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1165 tree_impl->set_event_listener_properties( | 1163 tree_impl->set_event_listener_properties( |
| 1166 EventListenerClass::kTouchStartOrMove, | 1164 EventListenerClass::kTouchStartOrMove, |
| 1167 event_listener_properties(EventListenerClass::kTouchStartOrMove)); | 1165 event_listener_properties(EventListenerClass::kTouchStartOrMove)); |
| 1168 tree_impl->set_event_listener_properties( | 1166 tree_impl->set_event_listener_properties( |
| 1169 EventListenerClass::kMouseWheel, | 1167 EventListenerClass::kMouseWheel, |
| 1170 event_listener_properties(EventListenerClass::kMouseWheel)); | 1168 event_listener_properties(EventListenerClass::kMouseWheel)); |
| 1171 tree_impl->set_event_listener_properties( | 1169 tree_impl->set_event_listener_properties( |
| 1172 EventListenerClass::kTouchEndOrCancel, | 1170 EventListenerClass::kTouchEndOrCancel, |
| 1173 event_listener_properties(EventListenerClass::kTouchEndOrCancel)); | 1171 event_listener_properties(EventListenerClass::kTouchEndOrCancel)); |
| 1174 | 1172 |
| 1175 if (page_scale_layer_ && inner_viewport_scroll_layer_) { | 1173 if (viewport_layers_.page_scale && viewport_layers_.inner_viewport_scroll) { |
| 1176 LayerTreeImpl::ViewportLayerIds ids; | 1174 LayerTreeImpl::ViewportLayerIds ids; |
| 1177 if (overscroll_elasticity_layer_) | 1175 if (viewport_layers_.overscroll_elasticity) |
| 1178 ids.overscroll_elasticity = overscroll_elasticity_layer_->id(); | 1176 ids.overscroll_elasticity = viewport_layers_.overscroll_elasticity->id(); |
| 1179 ids.page_scale = page_scale_layer_->id(); | 1177 ids.page_scale = viewport_layers_.page_scale->id(); |
| 1180 if (inner_viewport_container_layer_) | 1178 if (viewport_layers_.inner_viewport_container) |
| 1181 ids.inner_viewport_container = inner_viewport_container_layer_->id(); | 1179 ids.inner_viewport_container = |
| 1182 if (outer_viewport_container_layer_) | 1180 viewport_layers_.inner_viewport_container->id(); |
| 1183 ids.outer_viewport_container = outer_viewport_container_layer_->id(); | 1181 if (viewport_layers_.outer_viewport_container) |
| 1184 ids.inner_viewport_scroll = inner_viewport_scroll_layer_->id(); | 1182 ids.outer_viewport_container = |
| 1185 if (outer_viewport_scroll_layer_) | 1183 viewport_layers_.outer_viewport_container->id(); |
| 1186 ids.outer_viewport_scroll = outer_viewport_scroll_layer_->id(); | 1184 ids.inner_viewport_scroll = viewport_layers_.inner_viewport_scroll->id(); |
| 1185 if (viewport_layers_.outer_viewport_scroll) |
| 1186 ids.outer_viewport_scroll = viewport_layers_.outer_viewport_scroll->id(); |
| 1187 tree_impl->SetViewportLayersFromIds(ids); | 1187 tree_impl->SetViewportLayersFromIds(ids); |
| 1188 DCHECK(inner_viewport_scroll_layer_->IsContainerForFixedPositionLayers()); | 1188 DCHECK(viewport_layers_.inner_viewport_scroll |
| 1189 ->IsContainerForFixedPositionLayers()); |
| 1189 } else { | 1190 } else { |
| 1190 tree_impl->ClearViewportLayers(); | 1191 tree_impl->ClearViewportLayers(); |
| 1191 } | 1192 } |
| 1192 | 1193 |
| 1193 tree_impl->RegisterSelection(selection_); | 1194 tree_impl->RegisterSelection(selection_); |
| 1194 | 1195 |
| 1195 tree_impl->PushPageScaleFromMainThread( | 1196 tree_impl->PushPageScaleFromMainThread( |
| 1196 page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_); | 1197 page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_); |
| 1197 | 1198 |
| 1198 tree_impl->set_browser_controls_shrink_blink_size( | 1199 tree_impl->set_browser_controls_shrink_blink_size( |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1484 void LayerTreeHost::SetNeedsDisplayOnAllLayers() { | 1485 void LayerTreeHost::SetNeedsDisplayOnAllLayers() { |
| 1485 for (auto* layer : *this) | 1486 for (auto* layer : *this) |
| 1486 layer->SetNeedsDisplay(); | 1487 layer->SetNeedsDisplay(); |
| 1487 } | 1488 } |
| 1488 | 1489 |
| 1489 void LayerTreeHost::SetHasCopyRequest(bool has_copy_request) { | 1490 void LayerTreeHost::SetHasCopyRequest(bool has_copy_request) { |
| 1490 has_copy_request_ = has_copy_request; | 1491 has_copy_request_ = has_copy_request; |
| 1491 } | 1492 } |
| 1492 | 1493 |
| 1493 } // namespace cc | 1494 } // namespace cc |
| OLD | NEW |