| 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 did_complete_scale_animation_(false), | 114 did_complete_scale_animation_(false), |
| 115 in_paint_layer_contents_(false), | 115 in_paint_layer_contents_(false), |
| 116 id_(s_layer_tree_host_sequence_number.GetNext() + 1), | 116 id_(s_layer_tree_host_sequence_number.GetNext() + 1), |
| 117 next_commit_forces_redraw_(false), | 117 next_commit_forces_redraw_(false), |
| 118 shared_bitmap_manager_(params->shared_bitmap_manager), | 118 shared_bitmap_manager_(params->shared_bitmap_manager), |
| 119 gpu_memory_buffer_manager_(params->gpu_memory_buffer_manager), | 119 gpu_memory_buffer_manager_(params->gpu_memory_buffer_manager), |
| 120 task_graph_runner_(params->task_graph_runner), | 120 task_graph_runner_(params->task_graph_runner), |
| 121 surface_id_namespace_(0u), | 121 surface_id_namespace_(0u), |
| 122 next_surface_sequence_(1u) { | 122 next_surface_sequence_(1u) { |
| 123 DCHECK(task_graph_runner_); | 123 DCHECK(task_graph_runner_); |
| 124 if (settings_.accelerated_animation_enabled) | 124 |
| 125 animation_registrar_ = AnimationRegistrar::Create(); | 125 if (settings_.accelerated_animation_enabled) { |
| 126 if (settings_.use_compositor_animation_timelines) { |
| 127 animation_host_ = AnimationHost::Create(ThreadInstance::MAIN); |
| 128 animation_host_->SetMutatorHostClient(this); |
| 129 } else { |
| 130 animation_registrar_ = AnimationRegistrar::Create(); |
| 131 } |
| 132 } |
| 133 |
| 126 rendering_stats_instrumentation_->set_record_rendering_stats( | 134 rendering_stats_instrumentation_->set_record_rendering_stats( |
| 127 debug_state_.RecordRenderingStats()); | 135 debug_state_.RecordRenderingStats()); |
| 128 | |
| 129 if (settings_.use_compositor_animation_timelines) { | |
| 130 animation_host_ = AnimationHost::Create(ThreadInstance::MAIN); | |
| 131 animation_host_->SetMutatorHostClient(this); | |
| 132 } | |
| 133 } | 136 } |
| 134 | 137 |
| 135 void LayerTreeHost::InitializeThreaded( | 138 void LayerTreeHost::InitializeThreaded( |
| 136 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 139 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| 137 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, | 140 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
| 138 scoped_ptr<BeginFrameSource> external_begin_frame_source) { | 141 scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
| 139 InitializeProxy(ThreadProxy::Create(this, | 142 InitializeProxy(ThreadProxy::Create(this, |
| 140 main_task_runner, | 143 main_task_runner, |
| 141 impl_task_runner, | 144 impl_task_runner, |
| 142 external_begin_frame_source.Pass())); | 145 external_begin_frame_source.Pass())); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 156 void LayerTreeHost::InitializeForTesting(scoped_ptr<Proxy> proxy_for_testing) { | 159 void LayerTreeHost::InitializeForTesting(scoped_ptr<Proxy> proxy_for_testing) { |
| 157 InitializeProxy(proxy_for_testing.Pass()); | 160 InitializeProxy(proxy_for_testing.Pass()); |
| 158 } | 161 } |
| 159 | 162 |
| 160 void LayerTreeHost::InitializeProxy(scoped_ptr<Proxy> proxy) { | 163 void LayerTreeHost::InitializeProxy(scoped_ptr<Proxy> proxy) { |
| 161 TRACE_EVENT0("cc", "LayerTreeHost::InitializeForReal"); | 164 TRACE_EVENT0("cc", "LayerTreeHost::InitializeForReal"); |
| 162 | 165 |
| 163 proxy_ = proxy.Pass(); | 166 proxy_ = proxy.Pass(); |
| 164 proxy_->Start(); | 167 proxy_->Start(); |
| 165 if (settings_.accelerated_animation_enabled) { | 168 if (settings_.accelerated_animation_enabled) { |
| 166 animation_registrar_->set_supports_scroll_animations( | 169 if (animation_host_) |
| 167 proxy_->SupportsImplScrolling()); | 170 animation_host_->SetSupportsScrollAnimations( |
| 171 proxy_->SupportsImplScrolling()); |
| 172 else |
| 173 animation_registrar_->set_supports_scroll_animations( |
| 174 proxy_->SupportsImplScrolling()); |
| 168 } | 175 } |
| 169 } | 176 } |
| 170 | 177 |
| 171 LayerTreeHost::~LayerTreeHost() { | 178 LayerTreeHost::~LayerTreeHost() { |
| 172 TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost"); | 179 TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost"); |
| 173 | 180 |
| 174 if (animation_host_) | 181 if (animation_host_) |
| 175 animation_host_->SetMutatorHostClient(nullptr); | 182 animation_host_->SetMutatorHostClient(nullptr); |
| 176 | 183 |
| 177 if (root_layer_.get()) | 184 if (root_layer_.get()) |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 proxy_->SetNextCommitWaitsForActivation(); | 513 proxy_->SetNextCommitWaitsForActivation(); |
| 507 } | 514 } |
| 508 | 515 |
| 509 void LayerTreeHost::SetNextCommitForcesRedraw() { | 516 void LayerTreeHost::SetNextCommitForcesRedraw() { |
| 510 next_commit_forces_redraw_ = true; | 517 next_commit_forces_redraw_ = true; |
| 511 } | 518 } |
| 512 | 519 |
| 513 void LayerTreeHost::SetAnimationEvents( | 520 void LayerTreeHost::SetAnimationEvents( |
| 514 scoped_ptr<AnimationEventsVector> events) { | 521 scoped_ptr<AnimationEventsVector> events) { |
| 515 DCHECK(proxy_->IsMainThread()); | 522 DCHECK(proxy_->IsMainThread()); |
| 516 animation_registrar_->SetAnimationEvents(events.Pass()); | 523 if (animation_host_) |
| 524 animation_host_->SetAnimationEvents(events.Pass()); |
| 525 else |
| 526 animation_registrar_->SetAnimationEvents(events.Pass()); |
| 517 } | 527 } |
| 518 | 528 |
| 519 void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) { | 529 void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) { |
| 520 if (root_layer_.get() == root_layer.get()) | 530 if (root_layer_.get() == root_layer.get()) |
| 521 return; | 531 return; |
| 522 | 532 |
| 523 if (root_layer_.get()) | 533 if (root_layer_.get()) |
| 524 root_layer_->SetLayerTreeHost(NULL); | 534 root_layer_->SetLayerTreeHost(NULL); |
| 525 root_layer_ = root_layer; | 535 root_layer_ = root_layer; |
| 526 if (root_layer_.get()) { | 536 if (root_layer_.get()) { |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 914 constraints, | 924 constraints, |
| 915 current, | 925 current, |
| 916 animate)); | 926 animate)); |
| 917 } | 927 } |
| 918 | 928 |
| 919 void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) { | 929 void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) { |
| 920 if (!settings_.accelerated_animation_enabled) | 930 if (!settings_.accelerated_animation_enabled) |
| 921 return; | 931 return; |
| 922 | 932 |
| 923 AnimationEventsVector events; | 933 AnimationEventsVector events; |
| 924 if (animation_registrar_->AnimateLayers(monotonic_time)) { | 934 if (animation_host_) { |
| 925 animation_registrar_->UpdateAnimationState(true, &events); | 935 if (animation_host_->AnimateLayers(monotonic_time)) |
| 926 if (!events.empty()) | 936 animation_host_->UpdateAnimationState(true, &events); |
| 927 property_trees_.needs_rebuild = true; | 937 } else { |
| 938 if (animation_registrar_->AnimateLayers(monotonic_time)) |
| 939 animation_registrar_->UpdateAnimationState(true, &events); |
| 928 } | 940 } |
| 941 |
| 942 if (!events.empty()) |
| 943 property_trees_.needs_rebuild = true; |
| 929 } | 944 } |
| 930 | 945 |
| 931 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { | 946 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { |
| 932 DCHECK(client); | 947 DCHECK(client); |
| 933 | 948 |
| 934 UIResourceId next_id = next_ui_resource_id_++; | 949 UIResourceId next_id = next_ui_resource_id_++; |
| 935 DCHECK(ui_resource_client_map_.find(next_id) == | 950 DCHECK(ui_resource_client_map_.find(next_id) == |
| 936 ui_resource_client_map_.end()); | 951 ui_resource_client_map_.end()); |
| 937 | 952 |
| 938 bool resource_lost = false; | 953 bool resource_lost = false; |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1127 | 1142 |
| 1128 void LayerTreeHost::SetLayerScrollOffsetMutated( | 1143 void LayerTreeHost::SetLayerScrollOffsetMutated( |
| 1129 int layer_id, | 1144 int layer_id, |
| 1130 LayerTreeType tree_type, | 1145 LayerTreeType tree_type, |
| 1131 const gfx::ScrollOffset& scroll_offset) { | 1146 const gfx::ScrollOffset& scroll_offset) { |
| 1132 LayerAnimationValueObserver* layer = LayerById(layer_id); | 1147 LayerAnimationValueObserver* layer = LayerById(layer_id); |
| 1133 DCHECK(layer); | 1148 DCHECK(layer); |
| 1134 layer->OnScrollOffsetAnimated(scroll_offset); | 1149 layer->OnScrollOffsetAnimated(scroll_offset); |
| 1135 } | 1150 } |
| 1136 | 1151 |
| 1152 bool LayerTreeHost::ScrollOffsetAnimationWasInterrupted( |
| 1153 const Layer* layer) const { |
| 1154 return animation_host_ |
| 1155 ? animation_host_->ScrollOffsetAnimationWasInterrupted(layer->id()) |
| 1156 : false; |
| 1157 } |
| 1158 |
| 1159 bool LayerTreeHost::IsAnimatingFilterProperty(const Layer* layer) const { |
| 1160 return animation_host_ |
| 1161 ? animation_host_->IsAnimatingFilterProperty(layer->id()) |
| 1162 : false; |
| 1163 } |
| 1164 |
| 1165 bool LayerTreeHost::IsAnimatingOpacityProperty(const Layer* layer) const { |
| 1166 return animation_host_ |
| 1167 ? animation_host_->IsAnimatingOpacityProperty(layer->id()) |
| 1168 : false; |
| 1169 } |
| 1170 |
| 1171 bool LayerTreeHost::IsAnimatingTransformProperty(const Layer* layer) const { |
| 1172 return animation_host_ |
| 1173 ? animation_host_->IsAnimatingTransformProperty(layer->id()) |
| 1174 : false; |
| 1175 } |
| 1176 |
| 1177 bool LayerTreeHost::HasPotentiallyRunningOpacityAnimation( |
| 1178 const Layer* layer) const { |
| 1179 return animation_host_ |
| 1180 ? animation_host_->HasPotentiallyRunningOpacityAnimation( |
| 1181 layer->id()) |
| 1182 : false; |
| 1183 } |
| 1184 |
| 1185 bool LayerTreeHost::HasPotentiallyRunningTransformAnimation( |
| 1186 const Layer* layer) const { |
| 1187 return animation_host_ |
| 1188 ? animation_host_->HasPotentiallyRunningTransformAnimation( |
| 1189 layer->id()) |
| 1190 : false; |
| 1191 } |
| 1192 |
| 1193 bool LayerTreeHost::AnimationsPreserveAxisAlignment(const Layer* layer) const { |
| 1194 return animation_host_ |
| 1195 ? animation_host_->AnimationsPreserveAxisAlignment(layer->id()) |
| 1196 : true; |
| 1197 } |
| 1198 |
| 1199 bool LayerTreeHost::HasAnyAnimation(const Layer* layer) const { |
| 1200 return animation_host_ ? animation_host_->HasAnyAnimation(layer->id()) |
| 1201 : false; |
| 1202 } |
| 1203 |
| 1204 bool LayerTreeHost::HasActiveAnimation(const Layer* layer) const { |
| 1205 return animation_host_ ? animation_host_->HasActiveAnimation(layer->id()) |
| 1206 : false; |
| 1207 } |
| 1208 |
| 1137 } // namespace cc | 1209 } // namespace cc |
| OLD | NEW |