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