Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Side by Side Diff: cc/trees/layer_tree.cc

Issue 2216203002: Refactor MutatorHostClient from LayerTreeHost to LayerTree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on another LTH refactor CL. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree.h ('k') | cc/trees/layer_tree_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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.h" 5 #include "cc/trees/layer_tree.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "cc/animation/animation_host.h" 9 #include "cc/animation/animation_host.h"
10 #include "cc/input/page_scale_animation.h" 10 #include "cc/input/page_scale_animation.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host, 60 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host,
61 LayerTreeHost* layer_tree_host) 61 LayerTreeHost* layer_tree_host)
62 : needs_full_tree_sync_(true), 62 : needs_full_tree_sync_(true),
63 needs_meta_info_recomputation_(true), 63 needs_meta_info_recomputation_(true),
64 in_paint_layer_contents_(false), 64 in_paint_layer_contents_(false),
65 animation_host_(std::move(animation_host)), 65 animation_host_(std::move(animation_host)),
66 layer_tree_host_(layer_tree_host) { 66 layer_tree_host_(layer_tree_host) {
67 DCHECK(animation_host_); 67 DCHECK(animation_host_);
68 DCHECK(layer_tree_host_); 68 DCHECK(layer_tree_host_);
69 animation_host_->SetMutatorHostClient(this);
69 } 70 }
70 71
71 LayerTree::~LayerTree() { 72 LayerTree::~LayerTree() {
72 animation_host_->SetMutatorHostClient(nullptr); 73 animation_host_->SetMutatorHostClient(nullptr);
73 74
74 // We must clear any pointers into the layer tree prior to destroying it. 75 // We must clear any pointers into the layer tree prior to destroying it.
75 RegisterViewportLayers(nullptr, nullptr, nullptr, nullptr); 76 RegisterViewportLayers(nullptr, nullptr, nullptr, nullptr);
76 77
77 if (inputs_.root_layer) { 78 if (inputs_.root_layer) {
78 inputs_.root_layer->SetLayerTreeHost(nullptr); 79 inputs_.root_layer->SetLayerTreeHost(nullptr);
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 // It is required to create new PropertyTrees before deserializing it. 524 // It is required to create new PropertyTrees before deserializing it.
524 property_trees_ = PropertyTrees(); 525 property_trees_ = PropertyTrees();
525 property_trees_.FromProtobuf(proto.property_trees()); 526 property_trees_.FromProtobuf(proto.property_trees());
526 527
527 // Forcefully override the sequence number of all layers in the tree to have 528 // Forcefully override the sequence number of all layers in the tree to have
528 // a valid sequence number. Changing the sequence number for a layer does not 529 // a valid sequence number. Changing the sequence number for a layer does not
529 // need a commit, so the value will become out of date for layers that are not 530 // need a commit, so the value will become out of date for layers that are not
530 // updated for other reasons. All layers that at this point are part of the 531 // updated for other reasons. All layers that at this point are part of the
531 // layer tree are valid, so it is OK that they have a valid sequence number. 532 // layer tree are valid, so it is OK that they have a valid sequence number.
532 int seq_num = property_trees_.sequence_number; 533 int seq_num = property_trees_.sequence_number;
533 LayerTreeHostCommon::CallFunctionForEveryLayer( 534 LayerTreeHostCommon::CallFunctionForEveryLayer(this, [seq_num](Layer* layer) {
534 layer_tree_host_, [seq_num](Layer* layer) { 535 layer->set_property_tree_sequence_number(seq_num);
535 layer->set_property_tree_sequence_number(seq_num); 536 });
536 }); 537 }
538
539 Layer* LayerTree::LayerByElementId(ElementId element_id) const {
540 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id);
541 return iter != element_layers_map_.end() ? iter->second : nullptr;
542 }
543
544 void LayerTree::RegisterElement(ElementId element_id,
545 ElementListType list_type,
546 Layer* layer) {
547 if (layer->element_id()) {
548 element_layers_map_[layer->element_id()] = layer;
549 }
550
551 animation_host_->RegisterElement(element_id, list_type);
552 }
553
554 void LayerTree::UnregisterElement(ElementId element_id,
555 ElementListType list_type,
556 Layer* layer) {
557 animation_host_->UnregisterElement(element_id, list_type);
558
559 if (layer->element_id()) {
560 element_layers_map_.erase(layer->element_id());
561 }
562 }
563
564 static void SetElementIdForTesting(Layer* layer) {
565 layer->SetElementId(LayerIdToElementIdForTesting(layer->id()));
566 }
567
568 void LayerTree::SetElementIdsForTesting() {
569 LayerTreeHostCommon::CallFunctionForEveryLayer(this, SetElementIdForTesting);
570 }
571
572 bool LayerTree::IsElementInList(ElementId element_id,
573 ElementListType list_type) const {
574 return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
575 }
576
577 void LayerTree::SetMutatorsNeedCommit() {
578 layer_tree_host_->SetNeedsCommit();
579 }
580
581 void LayerTree::SetMutatorsNeedRebuildPropertyTrees() {
582 property_trees_.needs_rebuild = true;
583 }
584
585 void LayerTree::SetElementFilterMutated(ElementId element_id,
586 ElementListType list_type,
587 const FilterOperations& filters) {
588 Layer* layer = LayerByElementId(element_id);
589 DCHECK(layer);
590 layer->OnFilterAnimated(filters);
591 }
592
593 void LayerTree::SetElementOpacityMutated(ElementId element_id,
594 ElementListType list_type,
595 float opacity) {
596 Layer* layer = LayerByElementId(element_id);
597 DCHECK(layer);
598 layer->OnOpacityAnimated(opacity);
599 }
600
601 void LayerTree::SetElementTransformMutated(ElementId element_id,
602 ElementListType list_type,
603 const gfx::Transform& transform) {
604 Layer* layer = LayerByElementId(element_id);
605 DCHECK(layer);
606 layer->OnTransformAnimated(transform);
607 }
608
609 void LayerTree::SetElementScrollOffsetMutated(
610 ElementId element_id,
611 ElementListType list_type,
612 const gfx::ScrollOffset& scroll_offset) {
613 Layer* layer = LayerByElementId(element_id);
614 DCHECK(layer);
615 layer->OnScrollOffsetAnimated(scroll_offset);
616 }
617
618 void LayerTree::ElementTransformIsAnimatingChanged(
619 ElementId element_id,
620 ElementListType list_type,
621 AnimationChangeType change_type,
622 bool is_animating) {
623 Layer* layer = LayerByElementId(element_id);
624 if (layer) {
625 switch (change_type) {
626 case AnimationChangeType::POTENTIAL:
627 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
628 break;
629 case AnimationChangeType::RUNNING:
630 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
631 break;
632 case AnimationChangeType::BOTH:
633 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
634 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
635 break;
636 }
637 }
638 }
639
640 void LayerTree::ElementOpacityIsAnimatingChanged(
641 ElementId element_id,
642 ElementListType list_type,
643 AnimationChangeType change_type,
644 bool is_animating) {
645 Layer* layer = LayerByElementId(element_id);
646 if (layer) {
647 switch (change_type) {
648 case AnimationChangeType::POTENTIAL:
649 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
650 break;
651 case AnimationChangeType::RUNNING:
652 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
653 break;
654 case AnimationChangeType::BOTH:
655 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
656 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
657 break;
658 }
659 }
660 }
661
662 void LayerTree::ElementFilterIsAnimatingChanged(ElementId element_id,
663 ElementListType list_type,
664 AnimationChangeType change_type,
665 bool is_animating) {
666 Layer* layer = LayerByElementId(element_id);
667 if (layer) {
668 switch (change_type) {
669 case AnimationChangeType::POTENTIAL:
670 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
671 break;
672 case AnimationChangeType::RUNNING:
673 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
674 break;
675 case AnimationChangeType::BOTH:
676 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
677 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
678 break;
679 }
680 }
681 }
682
683 gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation(
684 ElementId element_id) const {
685 Layer* layer = LayerByElementId(element_id);
686 DCHECK(layer);
687 return layer->ScrollOffsetForAnimation();
688 }
689
690 LayerListIterator<Layer> LayerTree::begin() const {
691 return LayerListIterator<Layer>(inputs_.root_layer.get());
692 }
693
694 LayerListIterator<Layer> LayerTree::end() const {
695 return LayerListIterator<Layer>(nullptr);
696 }
697
698 LayerListReverseIterator<Layer> LayerTree::rbegin() {
699 return LayerListReverseIterator<Layer>(inputs_.root_layer.get());
700 }
701
702 LayerListReverseIterator<Layer> LayerTree::rend() {
703 return LayerListReverseIterator<Layer>(nullptr);
704 }
705
706 void LayerTree::SetNeedsDisplayOnAllLayers() {
707 for (auto* layer : *this)
708 layer->SetNeedsDisplay();
537 } 709 }
538 710
539 } // namespace cc 711 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree.h ('k') | cc/trees/layer_tree_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698