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

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

Issue 2886243004: Refactor RegisterViewportLayers to use a struct instead of 6 values (Closed)
Patch Set: CC_EXPORT ViewportLayers to make the Windows compile+link happy. Created 3 years, 7 months 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
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698