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

Side by Side Diff: cc/layers/layer.cc

Issue 2753933005: cc: Move Layer Id to Node Map to Individual Property Tree Private (Closed)
Patch Set: add virtual to desctructor of ptree Created 3 years, 9 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
OLDNEW
1 // Copyright 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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/layers/layer.h" 5 #include "cc/layers/layer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 465
466 if (inputs_.opacity == opacity) 466 if (inputs_.opacity == opacity)
467 return; 467 return;
468 // We need to force a property tree rebuild when opacity changes from 1 to a 468 // We need to force a property tree rebuild when opacity changes from 1 to a
469 // non-1 value or vice-versa as render surfaces can change. 469 // non-1 value or vice-versa as render surfaces can change.
470 bool force_rebuild = opacity == 1.f || inputs_.opacity == 1.f; 470 bool force_rebuild = opacity == 1.f || inputs_.opacity == 1.f;
471 inputs_.opacity = opacity; 471 inputs_.opacity = opacity;
472 SetSubtreePropertyChanged(); 472 SetSubtreePropertyChanged();
473 if (layer_tree_host_ && !force_rebuild) { 473 if (layer_tree_host_ && !force_rebuild) {
474 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 474 PropertyTrees* property_trees = layer_tree_host_->property_trees();
475 auto effect_id_to_index = 475 if (EffectNode* node = property_trees->effect_tree.FindNodeFromId(id())) {
476 property_trees->layer_id_to_effect_node_index.find(id());
477 if (effect_id_to_index !=
478 property_trees->layer_id_to_effect_node_index.end()) {
479 EffectNode* node =
480 property_trees->effect_tree.Node(effect_id_to_index->second);
481 node->opacity = opacity; 476 node->opacity = opacity;
482 node->effect_changed = true; 477 node->effect_changed = true;
483 property_trees->effect_tree.set_needs_update(true); 478 property_trees->effect_tree.set_needs_update(true);
484 SetNeedsCommitNoRebuild(); 479 SetNeedsCommitNoRebuild();
485 return; 480 return;
486 } 481 }
487 } 482 }
488 SetNeedsCommit(); 483 SetNeedsCommit();
489 } 484 }
490 485
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 DCHECK(IsPropertyChangeAllowed()); 567 DCHECK(IsPropertyChangeAllowed());
573 if (inputs_.position == position) 568 if (inputs_.position == position)
574 return; 569 return;
575 inputs_.position = position; 570 inputs_.position = position;
576 571
577 if (!layer_tree_host_) 572 if (!layer_tree_host_)
578 return; 573 return;
579 574
580 SetSubtreePropertyChanged(); 575 SetSubtreePropertyChanged();
581 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 576 PropertyTrees* property_trees = layer_tree_host_->property_trees();
582 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 577 if (TransformNode* transform_node =
583 id())) { 578 property_trees->transform_tree.FindNodeFromId(id())) {
584 DCHECK_EQ(transform_tree_index(), 579 DCHECK_EQ(transform_tree_index(), transform_node->id);
585 property_trees->layer_id_to_transform_node_index[id()]);
586 TransformNode* transform_node =
587 property_trees->transform_tree.Node(transform_tree_index());
588 transform_node->update_post_local_transform(position, transform_origin()); 580 transform_node->update_post_local_transform(position, transform_origin());
589 if (transform_node->sticky_position_constraint_id >= 0) { 581 if (transform_node->sticky_position_constraint_id >= 0) {
590 StickyPositionNodeData* sticky_data = 582 StickyPositionNodeData* sticky_data =
591 property_trees->transform_tree.StickyPositionData( 583 property_trees->transform_tree.StickyPositionData(
592 transform_tree_index()); 584 transform_tree_index());
593 sticky_data->main_thread_offset = 585 sticky_data->main_thread_offset =
594 position.OffsetFromOrigin() - 586 position.OffsetFromOrigin() -
595 sticky_data->constraints.parent_relative_sticky_box_offset 587 sticky_data->constraints.parent_relative_sticky_box_offset
596 .OffsetFromOrigin(); 588 .OffsetFromOrigin();
597 } 589 }
(...skipping 27 matching lines...) Expand all
625 } 617 }
626 618
627 void Layer::SetTransform(const gfx::Transform& transform) { 619 void Layer::SetTransform(const gfx::Transform& transform) {
628 DCHECK(IsPropertyChangeAllowed()); 620 DCHECK(IsPropertyChangeAllowed());
629 if (inputs_.transform == transform) 621 if (inputs_.transform == transform)
630 return; 622 return;
631 623
632 SetSubtreePropertyChanged(); 624 SetSubtreePropertyChanged();
633 if (layer_tree_host_) { 625 if (layer_tree_host_) {
634 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 626 PropertyTrees* property_trees = layer_tree_host_->property_trees();
635 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 627 if (TransformNode* transform_node =
636 id())) { 628 property_trees->transform_tree.FindNodeFromId(id())) {
637 // We need to trigger a rebuild if we could have affected 2d axis 629 // We need to trigger a rebuild if we could have affected 2d axis
638 // alignment. We'll check to see if transform and inputs_.transform 630 // alignment. We'll check to see if transform and inputs_.transform are
639 // are axis 631 // axis align with respect to one another.
640 // align with respect to one another. 632 DCHECK_EQ(transform_tree_index(), transform_node->id);
641 DCHECK_EQ(transform_tree_index(),
642 property_trees->layer_id_to_transform_node_index[id()]);
643 TransformNode* transform_node =
644 property_trees->transform_tree.Node(transform_tree_index());
645 bool preserves_2d_axis_alignment = 633 bool preserves_2d_axis_alignment =
646 Are2dAxisAligned(inputs_.transform, transform); 634 Are2dAxisAligned(inputs_.transform, transform);
647 transform_node->local = transform; 635 transform_node->local = transform;
648 transform_node->needs_local_transform_update = true; 636 transform_node->needs_local_transform_update = true;
649 transform_node->transform_changed = true; 637 transform_node->transform_changed = true;
650 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); 638 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
651 if (preserves_2d_axis_alignment) 639 if (preserves_2d_axis_alignment)
652 SetNeedsCommitNoRebuild(); 640 SetNeedsCommitNoRebuild();
653 else 641 else
654 SetNeedsCommit(); 642 SetNeedsCommit();
(...skipping 11 matching lines...) Expand all
666 DCHECK(IsPropertyChangeAllowed()); 654 DCHECK(IsPropertyChangeAllowed());
667 if (inputs_.transform_origin == transform_origin) 655 if (inputs_.transform_origin == transform_origin)
668 return; 656 return;
669 inputs_.transform_origin = transform_origin; 657 inputs_.transform_origin = transform_origin;
670 658
671 if (!layer_tree_host_) 659 if (!layer_tree_host_)
672 return; 660 return;
673 661
674 SetSubtreePropertyChanged(); 662 SetSubtreePropertyChanged();
675 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 663 PropertyTrees* property_trees = layer_tree_host_->property_trees();
676 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 664 if (TransformNode* transform_node =
677 id())) { 665 property_trees->transform_tree.FindNodeFromId(id())) {
678 DCHECK_EQ(transform_tree_index(), 666 DCHECK_EQ(transform_tree_index(), transform_node->id);
679 property_trees->layer_id_to_transform_node_index[id()]);
680 TransformNode* transform_node =
681 property_trees->transform_tree.Node(transform_tree_index());
682 transform_node->update_pre_local_transform(transform_origin); 667 transform_node->update_pre_local_transform(transform_origin);
683 transform_node->update_post_local_transform(position(), transform_origin); 668 transform_node->update_post_local_transform(position(), transform_origin);
684 transform_node->needs_local_transform_update = true; 669 transform_node->needs_local_transform_update = true;
685 transform_node->transform_changed = true; 670 transform_node->transform_changed = true;
686 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); 671 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
687 SetNeedsCommitNoRebuild(); 672 SetNeedsCommitNoRebuild();
688 return; 673 return;
689 } 674 }
690 675
691 SetNeedsCommit(); 676 SetNeedsCommit();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 return; 754 return;
770 inputs_.scroll_offset = scroll_offset; 755 inputs_.scroll_offset = scroll_offset;
771 756
772 if (!layer_tree_host_) 757 if (!layer_tree_host_)
773 return; 758 return;
774 759
775 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 760 PropertyTrees* property_trees = layer_tree_host_->property_trees();
776 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable()) 761 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable())
777 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); 762 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset);
778 763
779 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 764 if (TransformNode* transform_node =
780 id())) { 765 property_trees->transform_tree.FindNodeFromId(id())) {
781 DCHECK_EQ(transform_tree_index(), 766 DCHECK_EQ(transform_tree_index(), transform_node->id);
782 property_trees->layer_id_to_transform_node_index[id()]);
783 TransformNode* transform_node =
784 property_trees->transform_tree.Node(transform_tree_index());
785 transform_node->scroll_offset = CurrentScrollOffset(); 767 transform_node->scroll_offset = CurrentScrollOffset();
786 transform_node->needs_local_transform_update = true; 768 transform_node->needs_local_transform_update = true;
787 property_trees->transform_tree.set_needs_update(true); 769 property_trees->transform_tree.set_needs_update(true);
788 SetNeedsCommitNoRebuild(); 770 SetNeedsCommitNoRebuild();
789 return; 771 return;
790 } 772 }
791 773
792 SetNeedsCommit(); 774 SetNeedsCommit();
793 } 775 }
794 776
795 void Layer::SetScrollOffsetFromImplSide( 777 void Layer::SetScrollOffsetFromImplSide(
796 const gfx::ScrollOffset& scroll_offset) { 778 const gfx::ScrollOffset& scroll_offset) {
797 DCHECK(IsPropertyChangeAllowed()); 779 DCHECK(IsPropertyChangeAllowed());
798 // This function only gets called during a BeginMainFrame, so there 780 // This function only gets called during a BeginMainFrame, so there
799 // is no need to call SetNeedsUpdate here. 781 // is no need to call SetNeedsUpdate here.
800 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested()); 782 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested());
801 if (inputs_.scroll_offset == scroll_offset) 783 if (inputs_.scroll_offset == scroll_offset)
802 return; 784 return;
803 inputs_.scroll_offset = scroll_offset; 785 inputs_.scroll_offset = scroll_offset;
804 SetNeedsPushProperties(); 786 SetNeedsPushProperties();
805 787
806 bool needs_rebuild = true; 788 bool needs_rebuild = true;
807 789
808 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 790 PropertyTrees* property_trees = layer_tree_host_->property_trees();
809 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable()) 791 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable())
810 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); 792 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset);
811 793
812 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 794 if (TransformNode* transform_node =
813 id())) { 795 property_trees->transform_tree.FindNodeFromId(id())) {
814 DCHECK_EQ(transform_tree_index(), 796 DCHECK_EQ(transform_tree_index(), transform_node->id);
815 property_trees->layer_id_to_transform_node_index[id()]);
816 TransformNode* transform_node =
817 property_trees->transform_tree.Node(transform_tree_index());
818 transform_node->scroll_offset = CurrentScrollOffset(); 797 transform_node->scroll_offset = CurrentScrollOffset();
819 transform_node->needs_local_transform_update = true; 798 transform_node->needs_local_transform_update = true;
820 property_trees->transform_tree.set_needs_update(true); 799 property_trees->transform_tree.set_needs_update(true);
821 needs_rebuild = false; 800 needs_rebuild = false;
822 } 801 }
823 802
824 if (needs_rebuild) 803 if (needs_rebuild)
825 property_trees->needs_rebuild = true; 804 property_trees->needs_rebuild = true;
826 805
827 if (!inputs_.did_scroll_callback.is_null()) 806 if (!inputs_.did_scroll_callback.is_null())
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
1340 // Do nothing. Scroll deltas will be sent from the compositor thread back 1319 // Do nothing. Scroll deltas will be sent from the compositor thread back
1341 // to the main thread in the same manner as during non-animated 1320 // to the main thread in the same manner as during non-animated
1342 // compositor-driven scrolling. 1321 // compositor-driven scrolling.
1343 } 1322 }
1344 1323
1345 void Layer::OnIsAnimatingChanged(const PropertyAnimationState& mask, 1324 void Layer::OnIsAnimatingChanged(const PropertyAnimationState& mask,
1346 const PropertyAnimationState& state) { 1325 const PropertyAnimationState& state) {
1347 DCHECK(layer_tree_host_); 1326 DCHECK(layer_tree_host_);
1348 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 1327 PropertyTrees* property_trees = layer_tree_host_->property_trees();
1349 1328
1350 TransformNode* transform_node = nullptr; 1329 TransformNode* transform_node =
1351 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 1330 property_trees->transform_tree.FindNodeFromId(id());
1352 id())) { 1331 DCHECK(!transform_node || transform_node->id == transform_tree_index());
1353 DCHECK_EQ(transform_tree_index(),
1354 property_trees->layer_id_to_transform_node_index[id()]);
1355 transform_node =
1356 property_trees->transform_tree.Node(transform_tree_index());
1357 }
1358 1332
1359 EffectNode* effect_node = nullptr; 1333 EffectNode* effect_node = property_trees->effect_tree.FindNodeFromId(id());
1360 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) { 1334 DCHECK(!effect_node || effect_node->id == effect_tree_index());
1361 DCHECK_EQ(effect_tree_index(),
1362 property_trees->layer_id_to_effect_node_index[id()]);
1363 effect_node = property_trees->effect_tree.Node(effect_tree_index());
1364 }
1365 1335
1366 for (int property = TargetProperty::FIRST_TARGET_PROPERTY; 1336 for (int property = TargetProperty::FIRST_TARGET_PROPERTY;
1367 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) { 1337 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) {
1368 switch (property) { 1338 switch (property) {
1369 case TargetProperty::TRANSFORM: 1339 case TargetProperty::TRANSFORM:
1370 if (transform_node) { 1340 if (transform_node) {
1371 if (mask.currently_running[property]) 1341 if (mask.currently_running[property])
1372 transform_node->is_currently_animating = 1342 transform_node->is_currently_animating =
1373 state.currently_running[property]; 1343 state.currently_running[property];
1374 if (mask.potentially_animating[property]) { 1344 if (mask.potentially_animating[property]) {
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1530 ->num_copy_requests_in_subtree; 1500 ->num_copy_requests_in_subtree;
1531 } 1501 }
1532 1502
1533 gfx::Transform Layer::screen_space_transform() const { 1503 gfx::Transform Layer::screen_space_transform() const {
1534 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); 1504 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId);
1535 return draw_property_utils::ScreenSpaceTransform( 1505 return draw_property_utils::ScreenSpaceTransform(
1536 this, layer_tree_host_->property_trees()->transform_tree); 1506 this, layer_tree_host_->property_trees()->transform_tree);
1537 } 1507 }
1538 1508
1539 } // namespace cc 1509 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698