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 <algorithm> | 7 #include <algorithm> |
8 #include <stack> | 8 #include <stack> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 1014 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1025 content_is_suitable_for_gpu_rasterization_ &= | 1025 content_is_suitable_for_gpu_rasterization_ &= |
1026 it->IsSuitableForGpuRasterization(); | 1026 it->IsSuitableForGpuRasterization(); |
1027 } | 1027 } |
1028 | 1028 |
1029 occlusion_tracker.LeaveLayer(it); | 1029 occlusion_tracker.LeaveLayer(it); |
1030 } | 1030 } |
1031 | 1031 |
1032 in_paint_layer_contents_ = false; | 1032 in_paint_layer_contents_ = false; |
1033 } | 1033 } |
1034 | 1034 |
1035 void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) { | 1035 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { |
1036 if (!root_layer_.get()) | 1036 if (!root_layer_.get()) |
1037 return; | 1037 return; |
1038 | 1038 |
1039 ScopedPtrVector<SwapPromise>::iterator it = info->swap_promises.begin(); | |
1040 for (; it != info->swap_promises.end(); ++it) { | |
1041 scoped_ptr<SwapPromise> swap_promise(info->swap_promises.take(it)); | |
1042 TRACE_EVENT_FLOW_STEP0("input", | |
1043 "LatencyInfo.Flow", | |
1044 TRACE_ID_DONT_MANGLE(swap_promise->TraceId()), | |
1045 "Main thread scroll update"); | |
1046 QueueSwapPromise(swap_promise.Pass()); | |
1047 } | |
1048 | |
1049 gfx::Vector2d inner_viewport_scroll_delta; | 1039 gfx::Vector2d inner_viewport_scroll_delta; |
1050 gfx::Vector2d outer_viewport_scroll_delta; | 1040 gfx::Vector2d outer_viewport_scroll_delta; |
1051 | 1041 |
1052 for (size_t i = 0; i < info->scrolls.size(); ++i) { | 1042 for (size_t i = 0; i < info.scrolls.size(); ++i) { |
1053 Layer* layer = LayerTreeHostCommon::FindLayerInSubtree( | 1043 Layer* layer = |
1054 root_layer_.get(), info->scrolls[i].layer_id); | 1044 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), |
| 1045 info.scrolls[i].layer_id); |
1055 if (!layer) | 1046 if (!layer) |
1056 continue; | 1047 continue; |
1057 if (layer == outer_viewport_scroll_layer_.get()) { | 1048 if (layer == outer_viewport_scroll_layer_.get()) { |
1058 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; | 1049 outer_viewport_scroll_delta += info.scrolls[i].scroll_delta; |
1059 } else if (layer == inner_viewport_scroll_layer_.get()) { | 1050 } else if (layer == inner_viewport_scroll_layer_.get()) { |
1060 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; | 1051 inner_viewport_scroll_delta += info.scrolls[i].scroll_delta; |
1061 } else { | 1052 } else { |
1062 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + | 1053 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + |
1063 info->scrolls[i].scroll_delta); | 1054 info.scrolls[i].scroll_delta); |
1064 } | 1055 } |
1065 } | 1056 } |
1066 | 1057 |
1067 if (!inner_viewport_scroll_delta.IsZero() || | 1058 if (!inner_viewport_scroll_delta.IsZero() || |
1068 !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f) { | 1059 !outer_viewport_scroll_delta.IsZero() || info.page_scale_delta != 1.f) { |
1069 // SetScrollOffsetFromImplSide above could have destroyed the tree, | 1060 // SetScrollOffsetFromImplSide above could have destroyed the tree, |
1070 // so re-get this layer before doing anything to it. | 1061 // so re-get this layer before doing anything to it. |
1071 | 1062 |
1072 // Preemptively apply the scroll offset and scale delta here before sending | 1063 // Preemptively apply the scroll offset and scale delta here before sending |
1073 // it to the client. If the client comes back and sets it to the same | 1064 // it to the client. If the client comes back and sets it to the same |
1074 // value, then the layer can early out without needing a full commit. | 1065 // value, then the layer can early out without needing a full commit. |
1075 DCHECK(inner_viewport_scroll_layer_); // We should always have this. | 1066 DCHECK(inner_viewport_scroll_layer_); // We should always have this. |
1076 | 1067 |
1077 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1068 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1078 inner_viewport_scroll_layer_->scroll_offset() + | 1069 inner_viewport_scroll_layer_->scroll_offset() + |
1079 inner_viewport_scroll_delta); | 1070 inner_viewport_scroll_delta); |
1080 if (outer_viewport_scroll_layer_) { | 1071 if (outer_viewport_scroll_layer_) { |
1081 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1072 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1082 outer_viewport_scroll_layer_->scroll_offset() + | 1073 outer_viewport_scroll_layer_->scroll_offset() + |
1083 outer_viewport_scroll_delta); | 1074 outer_viewport_scroll_delta); |
1084 } | 1075 } |
1085 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); | 1076 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta); |
1086 | 1077 |
1087 client_->ApplyScrollAndScale( | 1078 client_->ApplyScrollAndScale( |
1088 inner_viewport_scroll_delta + outer_viewport_scroll_delta, | 1079 inner_viewport_scroll_delta + outer_viewport_scroll_delta, |
1089 info->page_scale_delta); | 1080 info.page_scale_delta); |
1090 } | 1081 } |
1091 } | 1082 } |
1092 | 1083 |
1093 void LayerTreeHost::StartRateLimiter() { | 1084 void LayerTreeHost::StartRateLimiter() { |
1094 if (animating_) | 1085 if (animating_) |
1095 return; | 1086 return; |
1096 | 1087 |
1097 if (!rate_limit_timer_.IsRunning()) { | 1088 if (!rate_limit_timer_.IsRunning()) { |
1098 rate_limit_timer_.Start(FROM_HERE, | 1089 rate_limit_timer_.Start(FROM_HERE, |
1099 base::TimeDelta(), | 1090 base::TimeDelta(), |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1294 swap_promise_list_.push_back(swap_promise.Pass()); | 1285 swap_promise_list_.push_back(swap_promise.Pass()); |
1295 } | 1286 } |
1296 | 1287 |
1297 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { | 1288 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { |
1298 for (size_t i = 0; i < swap_promise_list_.size(); i++) | 1289 for (size_t i = 0; i < swap_promise_list_.size(); i++) |
1299 swap_promise_list_[i]->DidNotSwap(reason); | 1290 swap_promise_list_[i]->DidNotSwap(reason); |
1300 swap_promise_list_.clear(); | 1291 swap_promise_list_.clear(); |
1301 } | 1292 } |
1302 | 1293 |
1303 } // namespace cc | 1294 } // namespace cc |
OLD | NEW |