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

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

Issue 135183016: Revert of Pinch/Zoom Infrastructure & Plumbing CL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
« 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 <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 #include <string> 9 #include <string>
10 10
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 LayerImpl* hud_impl = LayerTreeHostCommon::FindLayerInSubtree( 331 LayerImpl* hud_impl = LayerTreeHostCommon::FindLayerInSubtree(
332 sync_tree->root_layer(), hud_layer_->id()); 332 sync_tree->root_layer(), hud_layer_->id());
333 sync_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl)); 333 sync_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl));
334 } else { 334 } else {
335 sync_tree->set_hud_layer(NULL); 335 sync_tree->set_hud_layer(NULL);
336 } 336 }
337 337
338 sync_tree->set_background_color(background_color_); 338 sync_tree->set_background_color(background_color_);
339 sync_tree->set_has_transparent_background(has_transparent_background_); 339 sync_tree->set_has_transparent_background(has_transparent_background_);
340 340
341 if (page_scale_layer_ && inner_viewport_scroll_layer_) { 341 sync_tree->FindRootScrollLayer();
342
343 // TODO(wjmaclean) For now, not all LTH clients will register viewports, so
344 // only set them when available..
345 if (page_scale_layer_) {
346 DCHECK(inner_viewport_scroll_layer_);
342 sync_tree->SetViewportLayersFromIds( 347 sync_tree->SetViewportLayersFromIds(
343 page_scale_layer_->id(), 348 page_scale_layer_->id(),
344 inner_viewport_scroll_layer_->id(), 349 inner_viewport_scroll_layer_->id(),
345 outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id() 350 outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id()
346 : Layer::INVALID_ID); 351 : Layer::INVALID_ID);
347 } else { 352 } else {
348 sync_tree->ClearViewportLayers(); 353 sync_tree->ClearViewportLayers();
349 } 354 }
350 355
351 float page_scale_delta, sent_page_scale_delta; 356 float page_scale_delta, sent_page_scale_delta;
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 1038
1034 in_paint_layer_contents_ = false; 1039 in_paint_layer_contents_ = false;
1035 1040
1036 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); 1041 occlusion_tracker.overdraw_metrics()->RecordMetrics(this);
1037 } 1042 }
1038 1043
1039 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { 1044 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
1040 if (!root_layer_.get()) 1045 if (!root_layer_.get())
1041 return; 1046 return;
1042 1047
1043 gfx::Vector2d inner_viewport_scroll_delta; 1048 gfx::Vector2d root_scroll_delta;
1044 gfx::Vector2d outer_viewport_scroll_delta; 1049 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
1045 1050
1046 for (size_t i = 0; i < info.scrolls.size(); ++i) { 1051 for (size_t i = 0; i < info.scrolls.size(); ++i) {
1047 Layer* layer = 1052 Layer* layer =
1048 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), 1053 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(),
1049 info.scrolls[i].layer_id); 1054 info.scrolls[i].layer_id);
1050 if (!layer) 1055 if (!layer)
1051 continue; 1056 continue;
1052 if (layer == outer_viewport_scroll_layer_.get()) { 1057 if (layer == root_scroll_layer) {
1053 outer_viewport_scroll_delta += info.scrolls[i].scroll_delta; 1058 root_scroll_delta += info.scrolls[i].scroll_delta;
1054 } else if (layer == inner_viewport_scroll_layer_.get()) {
1055 inner_viewport_scroll_delta += info.scrolls[i].scroll_delta;
1056 } else { 1059 } else {
1057 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + 1060 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() +
1058 info.scrolls[i].scroll_delta); 1061 info.scrolls[i].scroll_delta);
1059 } 1062 }
1060 } 1063 }
1061 1064
1062 if (!inner_viewport_scroll_delta.IsZero() || 1065 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) {
1063 !outer_viewport_scroll_delta.IsZero() ||
1064 info.page_scale_delta != 1.f) {
1065 // SetScrollOffsetFromImplSide above could have destroyed the tree, 1066 // SetScrollOffsetFromImplSide above could have destroyed the tree,
1066 // so re-get this layer before doing anything to it. 1067 // so re-get this layer before doing anything to it.
1068 root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
1067 1069
1068 // Preemptively apply the scroll offset and scale delta here before sending 1070 // Preemptively apply the scroll offset and scale delta here before sending
1069 // it to the client. If the client comes back and sets it to the same 1071 // it to the client. If the client comes back and sets it to the same
1070 // value, then the layer can early out without needing a full commit. 1072 // value, then the layer can early out without needing a full commit.
1071 DCHECK(inner_viewport_scroll_layer_); // We should always have this. 1073 if (root_scroll_layer) {
1072 1074 root_scroll_layer->SetScrollOffsetFromImplSide(
1073 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( 1075 root_scroll_layer->scroll_offset() + root_scroll_delta);
1074 inner_viewport_scroll_layer_->scroll_offset() +
1075 inner_viewport_scroll_delta);
1076 if (outer_viewport_scroll_layer_) {
1077 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide(
1078 outer_viewport_scroll_layer_->scroll_offset() +
1079 outer_viewport_scroll_delta);
1080 } 1076 }
1081 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta); 1077 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta);
1082 1078 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta);
1083 client_->ApplyScrollAndScale(
1084 inner_viewport_scroll_delta + outer_viewport_scroll_delta,
1085 info.page_scale_delta);
1086 } 1079 }
1087 } 1080 }
1088 1081
1089 gfx::Vector2d LayerTreeHost::DistributeScrollOffsetToViewports(
1090 const gfx::Vector2d offset,
1091 Layer* layer) {
1092 DCHECK(layer);
1093 if (layer != outer_viewport_scroll_layer_.get())
1094 return offset;
1095
1096 gfx::Vector2d inner_viewport_offset =
1097 inner_viewport_scroll_layer_->scroll_offset();
1098 gfx::Vector2d outer_viewport_offset =
1099 outer_viewport_scroll_layer_->scroll_offset();
1100
1101 if (offset == inner_viewport_offset + outer_viewport_offset) {
1102 // In this case, nothing should change, so we just return to the outer
1103 // viewport the offset is already has.
1104 return outer_viewport_offset;
1105 }
1106
1107 // In the spirit of document-scrolls-first, we always want any change to
1108 // go to the outer viewport first.
1109 gfx::Vector2d max_outer_viewport_scroll_offset =
1110 outer_viewport_scroll_layer_->MaxScrollOffset();
1111 #if ENABLE_DCHECK
1112 // TODO(wjmaclean) The DCHECK below is triggering during zoom-out.
1113 // crbug.com/336574
1114 /*
1115 gfx::Vector2d maxInnerViewportScrollOffset =
1116 inner_viewport_scroll_layer_->MaxScrollOffset();
1117
1118 gfx::Vector2d totalMaxScrollOffset =
1119 max_outer_viewport_scroll_offset + maxInnerViewportScrollOffset;
1120 DCHECK(totalMaxScrollOffset.x() >= offset.x() &&
1121 totalMaxScrollOffset.y() >= offset.y());
1122 */
1123 #endif
1124
1125 outer_viewport_offset = offset - inner_viewport_offset;
1126 outer_viewport_offset.SetToMin(max_outer_viewport_scroll_offset);
1127 outer_viewport_offset.SetToMax(gfx::Vector2d());
1128
1129 inner_viewport_offset = offset - outer_viewport_offset;
1130 inner_viewport_scroll_layer_->SetScrollOffset(inner_viewport_offset);
1131
1132 return outer_viewport_offset;
1133 }
1134
1135 void LayerTreeHost::StartRateLimiter() { 1082 void LayerTreeHost::StartRateLimiter() {
1136 if (animating_) 1083 if (animating_)
1137 return; 1084 return;
1138 1085
1139 if (!rate_limit_timer_.IsRunning()) { 1086 if (!rate_limit_timer_.IsRunning()) {
1140 rate_limit_timer_.Start(FROM_HERE, 1087 rate_limit_timer_.Start(FROM_HERE,
1141 base::TimeDelta(), 1088 base::TimeDelta(),
1142 this, 1089 this,
1143 &LayerTreeHost::RateLimit); 1090 &LayerTreeHost::RateLimit);
1144 } 1091 }
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 swap_promise_list_.push_back(swap_promise.Pass()); 1272 swap_promise_list_.push_back(swap_promise.Pass());
1326 } 1273 }
1327 1274
1328 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { 1275 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) {
1329 for (size_t i = 0; i < swap_promise_list_.size(); i++) 1276 for (size_t i = 0; i < swap_promise_list_.size(); i++)
1330 swap_promise_list_[i]->DidNotSwap(reason); 1277 swap_promise_list_[i]->DidNotSwap(reason);
1331 swap_promise_list_.clear(); 1278 swap_promise_list_.clear();
1332 } 1279 }
1333 1280
1334 } // namespace cc 1281 } // 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