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 |
11 #include "base/atomic_sequence_num.h" | 11 #include "base/atomic_sequence_num.h" |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
14 #include "base/debug/trace_event.h" | 14 #include "base/debug/trace_event.h" |
15 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
16 #include "base/metrics/histogram.h" | 16 #include "base/metrics/histogram.h" |
17 #include "base/stl_util.h" | 17 #include "base/stl_util.h" |
18 #include "base/strings/string_number_conversions.h" | 18 #include "base/strings/string_number_conversions.h" |
19 #include "cc/animation/animation_registrar.h" | 19 #include "cc/animation/animation_registrar.h" |
20 #include "cc/animation/layer_animation_controller.h" | 20 #include "cc/animation/layer_animation_controller.h" |
21 #include "cc/base/latency_info_swap_promise.h" | |
21 #include "cc/base/math_util.h" | 22 #include "cc/base/math_util.h" |
22 #include "cc/debug/devtools_instrumentation.h" | 23 #include "cc/debug/devtools_instrumentation.h" |
23 #include "cc/debug/rendering_stats_instrumentation.h" | 24 #include "cc/debug/rendering_stats_instrumentation.h" |
24 #include "cc/input/layer_selection_bound.h" | 25 #include "cc/input/layer_selection_bound.h" |
25 #include "cc/input/top_controls_manager.h" | 26 #include "cc/input/top_controls_manager.h" |
26 #include "cc/layers/heads_up_display_layer.h" | 27 #include "cc/layers/heads_up_display_layer.h" |
27 #include "cc/layers/heads_up_display_layer_impl.h" | 28 #include "cc/layers/heads_up_display_layer_impl.h" |
28 #include "cc/layers/layer.h" | 29 #include "cc/layers/layer.h" |
29 #include "cc/layers/layer_iterator.h" | 30 #include "cc/layers/layer_iterator.h" |
30 #include "cc/layers/painted_scrollbar_layer.h" | 31 #include "cc/layers/painted_scrollbar_layer.h" |
(...skipping 979 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1010 content_is_suitable_for_gpu_rasterization_ &= | 1011 content_is_suitable_for_gpu_rasterization_ &= |
1011 it->IsSuitableForGpuRasterization(); | 1012 it->IsSuitableForGpuRasterization(); |
1012 } | 1013 } |
1013 | 1014 |
1014 occlusion_tracker.LeaveLayer(it); | 1015 occlusion_tracker.LeaveLayer(it); |
1015 } | 1016 } |
1016 | 1017 |
1017 in_paint_layer_contents_ = false; | 1018 in_paint_layer_contents_ = false; |
1018 } | 1019 } |
1019 | 1020 |
1020 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { | 1021 void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) { |
1021 if (!root_layer_.get()) | 1022 if (!root_layer_.get()) |
1022 return; | 1023 return; |
1023 | 1024 |
1025 ScopedPtrVector<LatencyInfoSwapPromise>::iterator it = | |
1026 info->swap_promises.begin(); | |
1027 for (; it != info->swap_promises.end(); ++it) { | |
1028 scoped_ptr<LatencyInfoSwapPromise> swap_promise( | |
1029 info->swap_promises.take(it)); | |
1030 TRACE_EVENT_FLOW_STEP0( | |
1031 "input", | |
1032 "LatencyInfo.Flow", | |
1033 TRACE_ID_DONT_MANGLE(swap_promise->latency_info().trace_id), | |
danakj
2014/07/09 15:50:35
LGTM but if you were to put a TraceId() accessor o
| |
1034 "Main thread scroll update"); | |
1035 QueueSwapPromise(swap_promise.PassAs<SwapPromise>()); | |
1036 } | |
1037 | |
1024 gfx::Vector2d inner_viewport_scroll_delta; | 1038 gfx::Vector2d inner_viewport_scroll_delta; |
1025 gfx::Vector2d outer_viewport_scroll_delta; | 1039 gfx::Vector2d outer_viewport_scroll_delta; |
1026 | 1040 |
1027 for (size_t i = 0; i < info.scrolls.size(); ++i) { | 1041 for (size_t i = 0; i < info->scrolls.size(); ++i) { |
1028 Layer* layer = | 1042 Layer* layer = LayerTreeHostCommon::FindLayerInSubtree( |
1029 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), | 1043 root_layer_.get(), info->scrolls[i].layer_id); |
1030 info.scrolls[i].layer_id); | |
1031 if (!layer) | 1044 if (!layer) |
1032 continue; | 1045 continue; |
1033 if (layer == outer_viewport_scroll_layer_.get()) { | 1046 if (layer == outer_viewport_scroll_layer_.get()) { |
1034 outer_viewport_scroll_delta += info.scrolls[i].scroll_delta; | 1047 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1035 } else if (layer == inner_viewport_scroll_layer_.get()) { | 1048 } else if (layer == inner_viewport_scroll_layer_.get()) { |
1036 inner_viewport_scroll_delta += info.scrolls[i].scroll_delta; | 1049 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1037 } else { | 1050 } else { |
1038 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + | 1051 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + |
1039 info.scrolls[i].scroll_delta); | 1052 info->scrolls[i].scroll_delta); |
1040 } | 1053 } |
1041 } | 1054 } |
1042 | 1055 |
1043 if (!inner_viewport_scroll_delta.IsZero() || | 1056 if (!inner_viewport_scroll_delta.IsZero() || |
1044 !outer_viewport_scroll_delta.IsZero() || info.page_scale_delta != 1.f) { | 1057 !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f) { |
1045 // SetScrollOffsetFromImplSide above could have destroyed the tree, | 1058 // SetScrollOffsetFromImplSide above could have destroyed the tree, |
1046 // so re-get this layer before doing anything to it. | 1059 // so re-get this layer before doing anything to it. |
1047 | 1060 |
1048 // Preemptively apply the scroll offset and scale delta here before sending | 1061 // Preemptively apply the scroll offset and scale delta here before sending |
1049 // it to the client. If the client comes back and sets it to the same | 1062 // it to the client. If the client comes back and sets it to the same |
1050 // value, then the layer can early out without needing a full commit. | 1063 // value, then the layer can early out without needing a full commit. |
1051 DCHECK(inner_viewport_scroll_layer_); // We should always have this. | 1064 DCHECK(inner_viewport_scroll_layer_); // We should always have this. |
1052 | 1065 |
1053 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1066 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1054 inner_viewport_scroll_layer_->scroll_offset() + | 1067 inner_viewport_scroll_layer_->scroll_offset() + |
1055 inner_viewport_scroll_delta); | 1068 inner_viewport_scroll_delta); |
1056 if (outer_viewport_scroll_layer_) { | 1069 if (outer_viewport_scroll_layer_) { |
1057 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1070 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1058 outer_viewport_scroll_layer_->scroll_offset() + | 1071 outer_viewport_scroll_layer_->scroll_offset() + |
1059 outer_viewport_scroll_delta); | 1072 outer_viewport_scroll_delta); |
1060 } | 1073 } |
1061 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta); | 1074 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); |
1062 | 1075 |
1063 client_->ApplyScrollAndScale( | 1076 client_->ApplyScrollAndScale( |
1064 inner_viewport_scroll_delta + outer_viewport_scroll_delta, | 1077 inner_viewport_scroll_delta + outer_viewport_scroll_delta, |
1065 info.page_scale_delta); | 1078 info->page_scale_delta); |
1066 } | 1079 } |
1067 } | 1080 } |
1068 | 1081 |
1069 void LayerTreeHost::StartRateLimiter() { | 1082 void LayerTreeHost::StartRateLimiter() { |
1070 if (animating_) | 1083 if (animating_) |
1071 return; | 1084 return; |
1072 | 1085 |
1073 if (!rate_limit_timer_.IsRunning()) { | 1086 if (!rate_limit_timer_.IsRunning()) { |
1074 rate_limit_timer_.Start(FROM_HERE, | 1087 rate_limit_timer_.Start(FROM_HERE, |
1075 base::TimeDelta(), | 1088 base::TimeDelta(), |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1272 swap_promise_list_.push_back(swap_promise.Pass()); | 1285 swap_promise_list_.push_back(swap_promise.Pass()); |
1273 } | 1286 } |
1274 | 1287 |
1275 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { | 1288 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { |
1276 for (size_t i = 0; i < swap_promise_list_.size(); i++) | 1289 for (size_t i = 0; i < swap_promise_list_.size(); i++) |
1277 swap_promise_list_[i]->DidNotSwap(reason); | 1290 swap_promise_list_[i]->DidNotSwap(reason); |
1278 swap_promise_list_.clear(); | 1291 swap_promise_list_.clear(); |
1279 } | 1292 } |
1280 | 1293 |
1281 } // namespace cc | 1294 } // namespace cc |
OLD | NEW |