Chromium Code Reviews| 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/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
| 16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
| 17 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
| 18 #include "base/trace_event/trace_event.h" | 18 #include "base/trace_event/trace_event.h" |
| 19 #include "base/trace_event/trace_event_argument.h" | 19 #include "base/trace_event/trace_event_argument.h" |
| 20 #include "cc/animation/animation_registrar.h" | 20 #include "cc/animation/animation_registrar.h" |
| 21 #include "cc/animation/animation_timeline.h" | |
| 21 #include "cc/animation/layer_animation_controller.h" | 22 #include "cc/animation/layer_animation_controller.h" |
| 22 #include "cc/base/math_util.h" | 23 #include "cc/base/math_util.h" |
| 23 #include "cc/debug/devtools_instrumentation.h" | 24 #include "cc/debug/devtools_instrumentation.h" |
| 24 #include "cc/debug/rendering_stats_instrumentation.h" | 25 #include "cc/debug/rendering_stats_instrumentation.h" |
| 25 #include "cc/input/layer_selection_bound.h" | 26 #include "cc/input/layer_selection_bound.h" |
| 26 #include "cc/input/page_scale_animation.h" | 27 #include "cc/input/page_scale_animation.h" |
| 27 #include "cc/input/top_controls_manager.h" | 28 #include "cc/input/top_controls_manager.h" |
| 28 #include "cc/layers/heads_up_display_layer.h" | 29 #include "cc/layers/heads_up_display_layer.h" |
| 29 #include "cc/layers/heads_up_display_layer_impl.h" | 30 #include "cc/layers/heads_up_display_layer_impl.h" |
| 30 #include "cc/layers/layer.h" | 31 #include "cc/layers/layer.h" |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 289 LayerTreeImpl* sync_tree = host_impl->sync_tree(); | 290 LayerTreeImpl* sync_tree = host_impl->sync_tree(); |
| 290 | 291 |
| 291 if (next_commit_forces_redraw_) { | 292 if (next_commit_forces_redraw_) { |
| 292 sync_tree->ForceRedrawNextActivation(); | 293 sync_tree->ForceRedrawNextActivation(); |
| 293 next_commit_forces_redraw_ = false; | 294 next_commit_forces_redraw_ = false; |
| 294 } | 295 } |
| 295 | 296 |
| 296 sync_tree->set_source_frame_number(source_frame_number()); | 297 sync_tree->set_source_frame_number(source_frame_number()); |
| 297 | 298 |
| 298 if (needs_full_tree_sync_) { | 299 if (needs_full_tree_sync_) { |
| 300 host_impl->SetAnimationTimeline( | |
| 301 animation_timeline_ ? AnimationTimeline::Create() : nullptr); | |
| 302 | |
| 299 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees( | 303 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees( |
| 300 root_layer(), sync_tree->DetachLayerTree(), sync_tree)); | 304 root_layer(), sync_tree->DetachLayerTree(), sync_tree)); |
| 301 } | 305 } |
| 302 sync_tree->set_needs_full_tree_sync(needs_full_tree_sync_); | 306 sync_tree->set_needs_full_tree_sync(needs_full_tree_sync_); |
| 303 needs_full_tree_sync_ = false; | 307 needs_full_tree_sync_ = false; |
| 304 | 308 |
| 305 if (hud_layer_.get()) { | 309 if (hud_layer_.get()) { |
| 306 LayerImpl* hud_impl = LayerTreeHostCommon::FindLayerInSubtree( | 310 LayerImpl* hud_impl = LayerTreeHostCommon::FindLayerInSubtree( |
| 307 sync_tree->root_layer(), hud_layer_->id()); | 311 sync_tree->root_layer(), hud_layer_->id()); |
| 308 sync_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl)); | 312 sync_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl)); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 362 if (new_impl_tree_has_no_evicted_resources) { | 366 if (new_impl_tree_has_no_evicted_resources) { |
| 363 if (sync_tree->ContentsTexturesPurged()) | 367 if (sync_tree->ContentsTexturesPurged()) |
| 364 sync_tree->ResetContentsTexturesPurged(); | 368 sync_tree->ResetContentsTexturesPurged(); |
| 365 } | 369 } |
| 366 | 370 |
| 367 sync_tree->set_has_ever_been_drawn(false); | 371 sync_tree->set_has_ever_been_drawn(false); |
| 368 | 372 |
| 369 { | 373 { |
| 370 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties"); | 374 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties"); |
| 371 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer()); | 375 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer()); |
| 376 | |
| 377 if (animation_timeline_) { | |
| 378 DCHECK(host_impl->animation_timeline()); | |
| 379 animation_timeline_->PushPropertiesTo(host_impl->animation_timeline()); | |
| 380 } | |
| 372 } | 381 } |
| 373 | 382 |
| 374 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl); | 383 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl); |
| 375 } | 384 } |
| 376 | 385 |
| 377 void LayerTreeHost::WillCommit() { | 386 void LayerTreeHost::WillCommit() { |
| 378 client_->WillCommit(); | 387 client_->WillCommit(); |
| 379 } | 388 } |
| 380 | 389 |
| 381 void LayerTreeHost::UpdateHudLayer() { | 390 void LayerTreeHost::UpdateHudLayer() { |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 572 break; | 581 break; |
| 573 | 582 |
| 574 case AnimationEvent::PropertyUpdate: | 583 case AnimationEvent::PropertyUpdate: |
| 575 (*iter).second->NotifyAnimationPropertyUpdate((*events)[event_index]); | 584 (*iter).second->NotifyAnimationPropertyUpdate((*events)[event_index]); |
| 576 break; | 585 break; |
| 577 } | 586 } |
| 578 } | 587 } |
| 579 } | 588 } |
| 580 } | 589 } |
| 581 | 590 |
| 591 void LayerTreeHost::SetAnimationTimeline( | |
| 592 scoped_refptr<AnimationTimeline> timeline) { | |
| 593 if (animation_timeline_.get() == timeline.get()) | |
| 594 return; | |
| 595 | |
| 596 if (animation_timeline_.get()) | |
| 597 animation_timeline_->SetLayerTreeMutatorsClient(nullptr); | |
| 598 animation_timeline_ = timeline; | |
| 599 if (animation_timeline_.get()) | |
| 600 animation_timeline_->SetLayerTreeMutatorsClient(this); | |
| 601 } | |
| 602 | |
| 582 void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) { | 603 void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) { |
| 583 if (root_layer_.get() == root_layer.get()) | 604 if (root_layer_.get() == root_layer.get()) |
| 584 return; | 605 return; |
| 585 | 606 |
| 586 if (root_layer_.get()) | 607 if (root_layer_.get()) |
| 587 root_layer_->SetLayerTreeHost(NULL); | 608 root_layer_->SetLayerTreeHost(NULL); |
| 588 root_layer_ = root_layer; | 609 root_layer_ = root_layer; |
| 589 if (root_layer_.get()) { | 610 if (root_layer_.get()) { |
| 590 DCHECK(!root_layer_->parent()); | 611 DCHECK(!root_layer_->parent()); |
| 591 root_layer_->SetLayerTreeHost(this); | 612 root_layer_->SetLayerTreeHost(this); |
| (...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1369 void LayerTreeHost::SetChildrenNeedBeginFrames( | 1390 void LayerTreeHost::SetChildrenNeedBeginFrames( |
| 1370 bool children_need_begin_frames) const { | 1391 bool children_need_begin_frames) const { |
| 1371 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); | 1392 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); |
| 1372 } | 1393 } |
| 1373 | 1394 |
| 1374 void LayerTreeHost::SendBeginFramesToChildren( | 1395 void LayerTreeHost::SendBeginFramesToChildren( |
| 1375 const BeginFrameArgs& args) const { | 1396 const BeginFrameArgs& args) const { |
| 1376 client_->SendBeginFramesToChildren(args); | 1397 client_->SendBeginFramesToChildren(args); |
| 1377 } | 1398 } |
| 1378 | 1399 |
| 1400 Layer* LayerTreeHost::LayerById(int id) const { | |
| 1401 LayerIdMap::const_iterator iter = layer_id_map_.find(id); | |
| 1402 return iter != layer_id_map_.end() ? iter->second : NULL; | |
| 1403 } | |
| 1404 | |
| 1405 void LayerTreeHost::RegisterLayer(Layer* layer) { | |
| 1406 DCHECK(!LayerById(layer->id())); | |
| 1407 layer_id_map_[layer->id()] = layer; | |
| 1408 } | |
| 1409 | |
| 1410 void LayerTreeHost::UnregisterLayer(Layer* layer) { | |
| 1411 DCHECK(LayerById(layer->id())); | |
| 1412 layer_id_map_.erase(layer->id()); | |
| 1413 } | |
| 1414 | |
| 1415 AnimationRegistrar* LayerTreeHost::GetAnimationRegistrar() const { | |
| 1416 return animation_registrar_.get(); | |
| 1417 } | |
| 1418 | |
| 1419 void LayerTreeHost::SetMutatorsNeedCommit() { | |
| 1420 SetNeedsCommit(); | |
| 1421 } | |
| 1422 | |
| 1423 void LayerTreeHost::SetLayerFilterMutated(int layer_id, | |
| 1424 bool active_tree, | |
| 1425 const FilterOperations& filters) { | |
| 1426 LayerAnimationValueObserver* layer = LayerById(layer_id); | |
| 1427 if (layer) | |
|
ajuma
2015/02/23 16:36:44
In what situation would |layer| be null here? Shou
loyso (OOO)
2015/02/25 04:37:03
Active tree is a 'passive' view of pending tree. O
ajuma
2015/02/25 14:57:25
I'm not sure I follow. LayerTreeHost is the main-t
loyso (OOO)
2015/02/26 03:04:45
Oh, sorry. I was commenting with LayerTreeHostImpl
ajuma
2015/02/26 14:16:31
needs_synchronized_start_time means "use the compo
loyso (OOO)
2015/02/27 02:45:17
Thank you so much Ali for pointing out that import
| |
| 1428 layer->OnFilterAnimated(filters); | |
| 1429 } | |
| 1430 | |
| 1431 void LayerTreeHost::SetLayerOpacityMutated(int layer_id, | |
| 1432 bool active_tree, | |
| 1433 float opacity) { | |
| 1434 LayerAnimationValueObserver* layer = LayerById(layer_id); | |
| 1435 if (layer) | |
| 1436 layer->OnOpacityAnimated(opacity); | |
| 1437 } | |
| 1438 | |
| 1439 void LayerTreeHost::SetLayerTransformMutated(int layer_id, | |
| 1440 bool active_tree, | |
| 1441 const gfx::Transform& transform) { | |
| 1442 LayerAnimationValueObserver* layer = LayerById(layer_id); | |
| 1443 if (layer) | |
| 1444 layer->OnTransformAnimated(transform); | |
| 1445 } | |
| 1446 | |
| 1379 } // namespace cc | 1447 } // namespace cc |
| OLD | NEW |