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

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: renaming clean up 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
« no previous file with comments | « cc/input/scrollbar_animation_controller.cc ('k') | cc/layers/layer_impl.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 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 =
476 property_trees->layer_id_to_effect_node_index.find(id()); 476 property_trees->effect_tree.FindNodeFromOwningLayerId(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; 477 node->opacity = opacity;
482 node->effect_changed = true; 478 node->effect_changed = true;
483 property_trees->effect_tree.set_needs_update(true); 479 property_trees->effect_tree.set_needs_update(true);
484 SetNeedsCommitNoRebuild(); 480 SetNeedsCommitNoRebuild();
485 return; 481 return;
486 } 482 }
487 } 483 }
488 SetNeedsCommit(); 484 SetNeedsCommit();
489 } 485 }
490 486
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 DCHECK(IsPropertyChangeAllowed()); 568 DCHECK(IsPropertyChangeAllowed());
573 if (inputs_.position == position) 569 if (inputs_.position == position)
574 return; 570 return;
575 inputs_.position = position; 571 inputs_.position = position;
576 572
577 if (!layer_tree_host_) 573 if (!layer_tree_host_)
578 return; 574 return;
579 575
580 SetSubtreePropertyChanged(); 576 SetSubtreePropertyChanged();
581 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 577 PropertyTrees* property_trees = layer_tree_host_->property_trees();
582 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 578 if (TransformNode* transform_node =
583 id())) { 579 property_trees->transform_tree.FindNodeFromOwningLayerId(id())) {
584 DCHECK_EQ(transform_tree_index(), 580 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()); 581 transform_node->update_post_local_transform(position, transform_origin());
589 if (transform_node->sticky_position_constraint_id >= 0) { 582 if (transform_node->sticky_position_constraint_id >= 0) {
590 StickyPositionNodeData* sticky_data = 583 StickyPositionNodeData* sticky_data =
591 property_trees->transform_tree.StickyPositionData( 584 property_trees->transform_tree.StickyPositionData(
592 transform_tree_index()); 585 transform_tree_index());
593 sticky_data->main_thread_offset = 586 sticky_data->main_thread_offset =
594 position.OffsetFromOrigin() - 587 position.OffsetFromOrigin() -
595 sticky_data->constraints.parent_relative_sticky_box_offset 588 sticky_data->constraints.parent_relative_sticky_box_offset
596 .OffsetFromOrigin(); 589 .OffsetFromOrigin();
597 } 590 }
(...skipping 27 matching lines...) Expand all
625 } 618 }
626 619
627 void Layer::SetTransform(const gfx::Transform& transform) { 620 void Layer::SetTransform(const gfx::Transform& transform) {
628 DCHECK(IsPropertyChangeAllowed()); 621 DCHECK(IsPropertyChangeAllowed());
629 if (inputs_.transform == transform) 622 if (inputs_.transform == transform)
630 return; 623 return;
631 624
632 SetSubtreePropertyChanged(); 625 SetSubtreePropertyChanged();
633 if (layer_tree_host_) { 626 if (layer_tree_host_) {
634 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 627 PropertyTrees* property_trees = layer_tree_host_->property_trees();
635 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 628 if (TransformNode* transform_node =
636 id())) { 629 property_trees->transform_tree.FindNodeFromOwningLayerId(id())) {
637 // We need to trigger a rebuild if we could have affected 2d axis 630 // 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 631 // alignment. We'll check to see if transform and inputs_.transform are
639 // are axis 632 // axis align with respect to one another.
640 // align with respect to one another. 633 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 = 634 bool preserves_2d_axis_alignment =
646 Are2dAxisAligned(inputs_.transform, transform); 635 Are2dAxisAligned(inputs_.transform, transform);
647 transform_node->local = transform; 636 transform_node->local = transform;
648 transform_node->needs_local_transform_update = true; 637 transform_node->needs_local_transform_update = true;
649 transform_node->transform_changed = true; 638 transform_node->transform_changed = true;
650 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); 639 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
651 if (preserves_2d_axis_alignment) 640 if (preserves_2d_axis_alignment)
652 SetNeedsCommitNoRebuild(); 641 SetNeedsCommitNoRebuild();
653 else 642 else
654 SetNeedsCommit(); 643 SetNeedsCommit();
(...skipping 11 matching lines...) Expand all
666 DCHECK(IsPropertyChangeAllowed()); 655 DCHECK(IsPropertyChangeAllowed());
667 if (inputs_.transform_origin == transform_origin) 656 if (inputs_.transform_origin == transform_origin)
668 return; 657 return;
669 inputs_.transform_origin = transform_origin; 658 inputs_.transform_origin = transform_origin;
670 659
671 if (!layer_tree_host_) 660 if (!layer_tree_host_)
672 return; 661 return;
673 662
674 SetSubtreePropertyChanged(); 663 SetSubtreePropertyChanged();
675 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 664 PropertyTrees* property_trees = layer_tree_host_->property_trees();
676 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 665 if (TransformNode* transform_node =
677 id())) { 666 property_trees->transform_tree.FindNodeFromOwningLayerId(id())) {
678 DCHECK_EQ(transform_tree_index(), 667 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); 668 transform_node->update_pre_local_transform(transform_origin);
683 transform_node->update_post_local_transform(position(), transform_origin); 669 transform_node->update_post_local_transform(position(), transform_origin);
684 transform_node->needs_local_transform_update = true; 670 transform_node->needs_local_transform_update = true;
685 transform_node->transform_changed = true; 671 transform_node->transform_changed = true;
686 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); 672 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
687 SetNeedsCommitNoRebuild(); 673 SetNeedsCommitNoRebuild();
688 return; 674 return;
689 } 675 }
690 676
691 SetNeedsCommit(); 677 SetNeedsCommit();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 return; 755 return;
770 inputs_.scroll_offset = scroll_offset; 756 inputs_.scroll_offset = scroll_offset;
771 757
772 if (!layer_tree_host_) 758 if (!layer_tree_host_)
773 return; 759 return;
774 760
775 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 761 PropertyTrees* property_trees = layer_tree_host_->property_trees();
776 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable()) 762 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable())
777 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); 763 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset);
778 764
779 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 765 if (TransformNode* transform_node =
780 id())) { 766 property_trees->transform_tree.FindNodeFromOwningLayerId(id())) {
781 DCHECK_EQ(transform_tree_index(), 767 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(); 768 transform_node->scroll_offset = CurrentScrollOffset();
786 transform_node->needs_local_transform_update = true; 769 transform_node->needs_local_transform_update = true;
787 property_trees->transform_tree.set_needs_update(true); 770 property_trees->transform_tree.set_needs_update(true);
788 SetNeedsCommitNoRebuild(); 771 SetNeedsCommitNoRebuild();
789 return; 772 return;
790 } 773 }
791 774
792 SetNeedsCommit(); 775 SetNeedsCommit();
793 } 776 }
794 777
795 void Layer::SetScrollOffsetFromImplSide( 778 void Layer::SetScrollOffsetFromImplSide(
796 const gfx::ScrollOffset& scroll_offset) { 779 const gfx::ScrollOffset& scroll_offset) {
797 DCHECK(IsPropertyChangeAllowed()); 780 DCHECK(IsPropertyChangeAllowed());
798 // This function only gets called during a BeginMainFrame, so there 781 // This function only gets called during a BeginMainFrame, so there
799 // is no need to call SetNeedsUpdate here. 782 // is no need to call SetNeedsUpdate here.
800 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested()); 783 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested());
801 if (inputs_.scroll_offset == scroll_offset) 784 if (inputs_.scroll_offset == scroll_offset)
802 return; 785 return;
803 inputs_.scroll_offset = scroll_offset; 786 inputs_.scroll_offset = scroll_offset;
804 SetNeedsPushProperties(); 787 SetNeedsPushProperties();
805 788
806 bool needs_rebuild = true; 789 bool needs_rebuild = true;
807 790
808 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 791 PropertyTrees* property_trees = layer_tree_host_->property_trees();
809 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable()) 792 if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable())
810 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); 793 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset);
811 794
812 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 795 if (TransformNode* transform_node =
813 id())) { 796 property_trees->transform_tree.FindNodeFromOwningLayerId(id())) {
814 DCHECK_EQ(transform_tree_index(), 797 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(); 798 transform_node->scroll_offset = CurrentScrollOffset();
819 transform_node->needs_local_transform_update = true; 799 transform_node->needs_local_transform_update = true;
820 property_trees->transform_tree.set_needs_update(true); 800 property_trees->transform_tree.set_needs_update(true);
821 needs_rebuild = false; 801 needs_rebuild = false;
822 } 802 }
823 803
824 if (needs_rebuild) 804 if (needs_rebuild)
825 property_trees->needs_rebuild = true; 805 property_trees->needs_rebuild = true;
826 806
827 if (!inputs_.did_scroll_callback.is_null()) 807 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 1320 // 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 1321 // to the main thread in the same manner as during non-animated
1342 // compositor-driven scrolling. 1322 // compositor-driven scrolling.
1343 } 1323 }
1344 1324
1345 void Layer::OnIsAnimatingChanged(const PropertyAnimationState& mask, 1325 void Layer::OnIsAnimatingChanged(const PropertyAnimationState& mask,
1346 const PropertyAnimationState& state) { 1326 const PropertyAnimationState& state) {
1347 DCHECK(layer_tree_host_); 1327 DCHECK(layer_tree_host_);
1348 PropertyTrees* property_trees = layer_tree_host_->property_trees(); 1328 PropertyTrees* property_trees = layer_tree_host_->property_trees();
1349 1329
1350 TransformNode* transform_node = nullptr; 1330 TransformNode* transform_node =
1351 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, 1331 property_trees->transform_tree.FindNodeFromOwningLayerId(id());
1352 id())) { 1332 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 1333
1359 EffectNode* effect_node = nullptr; 1334 EffectNode* effect_node =
1360 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) { 1335 property_trees->effect_tree.FindNodeFromOwningLayerId(id());
1361 DCHECK_EQ(effect_tree_index(), 1336 DCHECK(!effect_node || effect_node->id == 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 1337
1366 for (int property = TargetProperty::FIRST_TARGET_PROPERTY; 1338 for (int property = TargetProperty::FIRST_TARGET_PROPERTY;
1367 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) { 1339 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) {
1368 switch (property) { 1340 switch (property) {
1369 case TargetProperty::TRANSFORM: 1341 case TargetProperty::TRANSFORM:
1370 if (transform_node) { 1342 if (transform_node) {
1371 if (mask.currently_running[property]) 1343 if (mask.currently_running[property])
1372 transform_node->is_currently_animating = 1344 transform_node->is_currently_animating =
1373 state.currently_running[property]; 1345 state.currently_running[property];
1374 if (mask.potentially_animating[property]) { 1346 if (mask.potentially_animating[property]) {
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1530 ->num_copy_requests_in_subtree; 1502 ->num_copy_requests_in_subtree;
1531 } 1503 }
1532 1504
1533 gfx::Transform Layer::screen_space_transform() const { 1505 gfx::Transform Layer::screen_space_transform() const {
1534 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); 1506 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId);
1535 return draw_property_utils::ScreenSpaceTransform( 1507 return draw_property_utils::ScreenSpaceTransform(
1536 this, layer_tree_host_->property_trees()->transform_tree); 1508 this, layer_tree_host_->property_trees()->transform_tree);
1537 } 1509 }
1538 1510
1539 } // namespace cc 1511 } // namespace cc
OLDNEW
« no previous file with comments | « cc/input/scrollbar_animation_controller.cc ('k') | cc/layers/layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698