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

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

Issue 2035863003: cc: Add mask and replica layer ids to the effect tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments Created 4 years, 6 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/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 double_sided(false), 524 double_sided(false),
525 is_drawn(true), 525 is_drawn(true),
526 subtree_hidden(false), 526 subtree_hidden(false),
527 has_potential_opacity_animation(false), 527 has_potential_opacity_animation(false),
528 is_currently_animating_opacity(false), 528 is_currently_animating_opacity(false),
529 effect_changed(false), 529 effect_changed(false),
530 num_copy_requests_in_subtree(0), 530 num_copy_requests_in_subtree(0),
531 has_unclipped_descendants(false), 531 has_unclipped_descendants(false),
532 transform_id(0), 532 transform_id(0),
533 clip_id(0), 533 clip_id(0),
534 target_id(0) {} 534 target_id(0),
535 mask_layer_id(-1),
536 replica_layer_id(-1),
537 replica_mask_layer_id(-1) {}
535 538
536 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default; 539 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default;
537 540
538 bool EffectNodeData::operator==(const EffectNodeData& other) const { 541 bool EffectNodeData::operator==(const EffectNodeData& other) const {
539 return opacity == other.opacity && 542 return opacity == other.opacity &&
540 screen_space_opacity == other.screen_space_opacity && 543 screen_space_opacity == other.screen_space_opacity &&
541 has_render_surface == other.has_render_surface && 544 has_render_surface == other.has_render_surface &&
542 has_copy_request == other.has_copy_request && 545 has_copy_request == other.has_copy_request &&
543 has_background_filters == other.has_background_filters && 546 has_background_filters == other.has_background_filters &&
544 hidden_by_backface_visibility == other.hidden_by_backface_visibility && 547 hidden_by_backface_visibility == other.hidden_by_backface_visibility &&
545 double_sided == other.double_sided && is_drawn == other.is_drawn && 548 double_sided == other.double_sided && is_drawn == other.is_drawn &&
546 subtree_hidden == other.subtree_hidden && 549 subtree_hidden == other.subtree_hidden &&
547 has_potential_opacity_animation == 550 has_potential_opacity_animation ==
548 other.has_potential_opacity_animation && 551 other.has_potential_opacity_animation &&
549 is_currently_animating_opacity == 552 is_currently_animating_opacity ==
550 other.is_currently_animating_opacity && 553 other.is_currently_animating_opacity &&
551 effect_changed == other.effect_changed && 554 effect_changed == other.effect_changed &&
552 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && 555 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree &&
553 transform_id == other.transform_id && clip_id == other.clip_id && 556 transform_id == other.transform_id && clip_id == other.clip_id &&
554 target_id == other.target_id; 557 target_id == other.target_id && mask_layer_id == other.mask_layer_id &&
558 replica_layer_id == other.replica_layer_id &&
559 replica_mask_layer_id == other.replica_mask_layer_id;
555 } 560 }
556 561
557 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { 562 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const {
558 DCHECK(!proto->has_effect_node_data()); 563 DCHECK(!proto->has_effect_node_data());
559 proto::EffectNodeData* data = proto->mutable_effect_node_data(); 564 proto::EffectNodeData* data = proto->mutable_effect_node_data();
560 data->set_opacity(opacity); 565 data->set_opacity(opacity);
561 data->set_screen_space_opacity(screen_space_opacity); 566 data->set_screen_space_opacity(screen_space_opacity);
562 data->set_has_render_surface(has_render_surface); 567 data->set_has_render_surface(has_render_surface);
563 data->set_has_copy_request(has_copy_request); 568 data->set_has_copy_request(has_copy_request);
564 data->set_has_background_filters(has_background_filters); 569 data->set_has_background_filters(has_background_filters);
565 data->set_hidden_by_backface_visibility(hidden_by_backface_visibility); 570 data->set_hidden_by_backface_visibility(hidden_by_backface_visibility);
566 data->set_double_sided(double_sided); 571 data->set_double_sided(double_sided);
567 data->set_is_drawn(is_drawn); 572 data->set_is_drawn(is_drawn);
568 data->set_subtree_hidden(subtree_hidden); 573 data->set_subtree_hidden(subtree_hidden);
569 data->set_has_potential_opacity_animation(has_potential_opacity_animation); 574 data->set_has_potential_opacity_animation(has_potential_opacity_animation);
570 data->set_is_currently_animating_opacity(is_currently_animating_opacity); 575 data->set_is_currently_animating_opacity(is_currently_animating_opacity);
571 data->set_effect_changed(effect_changed); 576 data->set_effect_changed(effect_changed);
572 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); 577 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree);
573 data->set_transform_id(transform_id); 578 data->set_transform_id(transform_id);
574 data->set_clip_id(clip_id); 579 data->set_clip_id(clip_id);
575 data->set_target_id(target_id); 580 data->set_target_id(target_id);
581 data->set_mask_layer_id(mask_layer_id);
582 data->set_replica_layer_id(replica_layer_id);
583 data->set_replica_mask_layer_id(replica_mask_layer_id);
576 } 584 }
577 585
578 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { 586 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) {
579 DCHECK(proto.has_effect_node_data()); 587 DCHECK(proto.has_effect_node_data());
580 const proto::EffectNodeData& data = proto.effect_node_data(); 588 const proto::EffectNodeData& data = proto.effect_node_data();
581 589
582 opacity = data.opacity(); 590 opacity = data.opacity();
583 screen_space_opacity = data.screen_space_opacity(); 591 screen_space_opacity = data.screen_space_opacity();
584 has_render_surface = data.has_render_surface(); 592 has_render_surface = data.has_render_surface();
585 has_copy_request = data.has_copy_request(); 593 has_copy_request = data.has_copy_request();
586 has_background_filters = data.has_background_filters(); 594 has_background_filters = data.has_background_filters();
587 hidden_by_backface_visibility = data.hidden_by_backface_visibility(); 595 hidden_by_backface_visibility = data.hidden_by_backface_visibility();
588 double_sided = data.double_sided(); 596 double_sided = data.double_sided();
589 is_drawn = data.is_drawn(); 597 is_drawn = data.is_drawn();
590 subtree_hidden = data.subtree_hidden(); 598 subtree_hidden = data.subtree_hidden();
591 has_potential_opacity_animation = data.has_potential_opacity_animation(); 599 has_potential_opacity_animation = data.has_potential_opacity_animation();
592 is_currently_animating_opacity = data.is_currently_animating_opacity(); 600 is_currently_animating_opacity = data.is_currently_animating_opacity();
593 effect_changed = data.effect_changed(); 601 effect_changed = data.effect_changed();
594 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); 602 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree();
595 transform_id = data.transform_id(); 603 transform_id = data.transform_id();
596 clip_id = data.clip_id(); 604 clip_id = data.clip_id();
597 target_id = data.target_id(); 605 target_id = data.target_id();
606 mask_layer_id = data.mask_layer_id();
607 replica_layer_id = data.replica_layer_id();
608 replica_mask_layer_id = data.replica_mask_layer_id();
598 } 609 }
599 610
600 void EffectNodeData::AsValueInto(base::trace_event::TracedValue* value) const { 611 void EffectNodeData::AsValueInto(base::trace_event::TracedValue* value) const {
601 value->SetDouble("opacity", opacity); 612 value->SetDouble("opacity", opacity);
602 value->SetBoolean("has_render_surface", has_render_surface); 613 value->SetBoolean("has_render_surface", has_render_surface);
603 value->SetBoolean("has_copy_request", has_copy_request); 614 value->SetBoolean("has_copy_request", has_copy_request);
604 value->SetBoolean("has_background_filters", has_background_filters); 615 value->SetBoolean("has_background_filters", has_background_filters);
605 value->SetBoolean("double_sided", double_sided); 616 value->SetBoolean("double_sided", double_sided);
606 value->SetBoolean("is_drawn", is_drawn); 617 value->SetBoolean("is_drawn", is_drawn);
607 value->SetBoolean("has_potential_opacity_animation", 618 value->SetBoolean("has_potential_opacity_animation",
608 has_potential_opacity_animation); 619 has_potential_opacity_animation);
609 value->SetBoolean("effect_changed", effect_changed); 620 value->SetBoolean("effect_changed", effect_changed);
610 value->SetInteger("num_copy_requests_in_subtree", 621 value->SetInteger("num_copy_requests_in_subtree",
611 num_copy_requests_in_subtree); 622 num_copy_requests_in_subtree);
612 value->SetInteger("transform_id", transform_id); 623 value->SetInteger("transform_id", transform_id);
613 value->SetInteger("clip_id", clip_id); 624 value->SetInteger("clip_id", clip_id);
614 value->SetInteger("target_id", target_id); 625 value->SetInteger("target_id", target_id);
626 value->SetInteger("mask_layer_id", mask_layer_id);
627 value->SetInteger("replica_layer_id", replica_layer_id);
628 value->SetInteger("replica_mask_layer_id", replica_mask_layer_id);
615 } 629 }
616 630
617 ScrollNodeData::ScrollNodeData() 631 ScrollNodeData::ScrollNodeData()
618 : scrollable(false), 632 : scrollable(false),
619 main_thread_scrolling_reasons( 633 main_thread_scrolling_reasons(
620 MainThreadScrollingReason::kNotScrollingOnMain), 634 MainThreadScrollingReason::kNotScrollingOnMain),
621 contains_non_fast_scrollable_region(false), 635 contains_non_fast_scrollable_region(false),
622 max_scroll_offset_affected_by_page_scale(false), 636 max_scroll_offset_affected_by_page_scale(false),
623 is_inner_viewport_scroll_layer(false), 637 is_inner_viewport_scroll_layer(false),
624 is_outer_viewport_scroll_layer(false), 638 is_outer_viewport_scroll_layer(false),
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 for (int i = 1; i < data.cached_data_size(); ++i) { 1439 for (int i = 1; i < data.cached_data_size(); ++i) {
1426 cached_data_.push_back(TransformCachedNodeData()); 1440 cached_data_.push_back(TransformCachedNodeData());
1427 cached_data_.back().FromProtobuf(data.cached_data(i)); 1441 cached_data_.back().FromProtobuf(data.cached_data(i));
1428 } 1442 }
1429 } 1443 }
1430 1444
1431 EffectTree::EffectTree() {} 1445 EffectTree::EffectTree() {}
1432 1446
1433 EffectTree::~EffectTree() {} 1447 EffectTree::~EffectTree() {}
1434 1448
1449 void EffectTree::clear() {
1450 PropertyTree<EffectNode>::clear();
1451 mask_replica_layer_ids_.clear();
1452 }
1453
1435 float EffectTree::EffectiveOpacity(const EffectNode* node) const { 1454 float EffectTree::EffectiveOpacity(const EffectNode* node) const {
1436 return node->data.subtree_hidden ? 0.f : node->data.opacity; 1455 return node->data.subtree_hidden ? 0.f : node->data.opacity;
1437 } 1456 }
1438 1457
1439 void EffectTree::UpdateOpacities(EffectNode* node, EffectNode* parent_node) { 1458 void EffectTree::UpdateOpacities(EffectNode* node, EffectNode* parent_node) {
1440 node->data.screen_space_opacity = EffectiveOpacity(node); 1459 node->data.screen_space_opacity = EffectiveOpacity(node);
1441 1460
1442 if (parent_node) 1461 if (parent_node)
1443 node->data.screen_space_opacity *= parent_node->data.screen_space_opacity; 1462 node->data.screen_space_opacity *= parent_node->data.screen_space_opacity;
1444 } 1463 }
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 node.data.num_copy_requests_in_subtree = 0; 1618 node.data.num_copy_requests_in_subtree = 0;
1600 node.data.has_copy_request = false; 1619 node.data.has_copy_request = false;
1601 } 1620 }
1602 1621
1603 // Any copy requests that are still left will be aborted (sending an empty 1622 // Any copy requests that are still left will be aborted (sending an empty
1604 // result) on destruction. 1623 // result) on destruction.
1605 copy_requests_.clear(); 1624 copy_requests_.clear();
1606 set_needs_update(true); 1625 set_needs_update(true);
1607 } 1626 }
1608 1627
1628 void EffectTree::AddMaskOrReplicaLayerId(int id) {
1629 mask_replica_layer_ids_.push_back(id);
1630 }
1631
1609 bool EffectTree::ContributesToDrawnSurface(int id) { 1632 bool EffectTree::ContributesToDrawnSurface(int id) {
1610 // All drawn nodes contribute to drawn surface. 1633 // All drawn nodes contribute to drawn surface.
1611 // Exception : Nodes that are hidden and are drawn only for the sake of 1634 // Exception : Nodes that are hidden and are drawn only for the sake of
1612 // copy requests. 1635 // copy requests.
1613 EffectNode* node = Node(id); 1636 EffectNode* node = Node(id);
1614 EffectNode* parent_node = parent(node); 1637 EffectNode* parent_node = parent(node);
1615 return node->data.is_drawn && (!parent_node || parent_node->data.is_drawn); 1638 return node->data.is_drawn && (!parent_node || parent_node->data.is_drawn);
1616 } 1639 }
1617 1640
1618 void EffectTree::ResetChangeTracking() { 1641 void EffectTree::ResetChangeTracking() {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 const proto::PropertyTree& proto, 1687 const proto::PropertyTree& proto,
1665 std::unordered_map<int, int>* node_id_to_index_map) { 1688 std::unordered_map<int, int>* node_id_to_index_map) {
1666 DCHECK(proto.has_property_type()); 1689 DCHECK(proto.has_property_type());
1667 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Clip); 1690 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Clip);
1668 1691
1669 PropertyTree::FromProtobuf(proto, node_id_to_index_map); 1692 PropertyTree::FromProtobuf(proto, node_id_to_index_map);
1670 } 1693 }
1671 1694
1672 EffectTree& EffectTree::operator=(const EffectTree& from) { 1695 EffectTree& EffectTree::operator=(const EffectTree& from) {
1673 PropertyTree::operator=(from); 1696 PropertyTree::operator=(from);
1697 mask_replica_layer_ids_ = from.mask_replica_layer_ids_;
1674 // copy_requests_ are omitted here, since these need to be moved rather 1698 // copy_requests_ are omitted here, since these need to be moved rather
1675 // than copied or assigned. 1699 // than copied or assigned.
1676 return *this; 1700 return *this;
1677 } 1701 }
1678 1702
1679 bool EffectTree::operator==(const EffectTree& other) const { 1703 bool EffectTree::operator==(const EffectTree& other) const {
1680 return PropertyTree::operator==(other); 1704 return PropertyTree::operator==(other) &&
1705 mask_replica_layer_ids_ == other.mask_replica_layer_ids_;
1681 } 1706 }
1682 1707
1683 void EffectTree::ToProtobuf(proto::PropertyTree* proto) const { 1708 void EffectTree::ToProtobuf(proto::PropertyTree* proto) const {
1684 DCHECK(!proto->has_property_type()); 1709 DCHECK(!proto->has_property_type());
1685 proto->set_property_type(proto::PropertyTree::Effect); 1710 proto->set_property_type(proto::PropertyTree::Effect);
1686 1711
1687 PropertyTree::ToProtobuf(proto); 1712 PropertyTree::ToProtobuf(proto);
1713 proto::EffectTreeData* data = proto->mutable_effect_tree_data();
1714
1715 for (auto i : mask_replica_layer_ids_)
1716 data->add_mask_replica_layer_ids(i);
1688 } 1717 }
1689 1718
1690 void EffectTree::FromProtobuf( 1719 void EffectTree::FromProtobuf(
1691 const proto::PropertyTree& proto, 1720 const proto::PropertyTree& proto,
1692 std::unordered_map<int, int>* node_id_to_index_map) { 1721 std::unordered_map<int, int>* node_id_to_index_map) {
1693 DCHECK(proto.has_property_type()); 1722 DCHECK(proto.has_property_type());
1694 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect); 1723 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect);
1695 1724
1696 PropertyTree::FromProtobuf(proto, node_id_to_index_map); 1725 PropertyTree::FromProtobuf(proto, node_id_to_index_map);
1726 const proto::EffectTreeData& data = proto.effect_tree_data();
1727
1728 DCHECK(mask_replica_layer_ids_.empty());
1729 for (int i = 0; i < data.mask_replica_layer_ids_size(); ++i) {
1730 mask_replica_layer_ids_.push_back(data.mask_replica_layer_ids(i));
1731 }
1697 } 1732 }
1698 1733
1699 ScrollTree::ScrollTree() 1734 ScrollTree::ScrollTree()
1700 : currently_scrolling_node_id_(-1), 1735 : currently_scrolling_node_id_(-1),
1701 layer_id_to_scroll_offset_map_(ScrollTree::ScrollOffsetMap()) {} 1736 layer_id_to_scroll_offset_map_(ScrollTree::ScrollOffsetMap()) {}
1702 1737
1703 ScrollTree::~ScrollTree() {} 1738 ScrollTree::~ScrollTree() {}
1704 1739
1705 ScrollTree& ScrollTree::operator=(const ScrollTree& from) { 1740 ScrollTree& ScrollTree::operator=(const ScrollTree& from) {
1706 PropertyTree::operator=(from); 1741 PropertyTree::operator=(from);
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
2340 value->EndDictionary(); 2375 value->EndDictionary();
2341 2376
2342 value->BeginDictionary("scroll_tree"); 2377 value->BeginDictionary("scroll_tree");
2343 scroll_tree.AsValueInto(value.get()); 2378 scroll_tree.AsValueInto(value.get());
2344 value->EndDictionary(); 2379 value->EndDictionary();
2345 2380
2346 return value; 2381 return value;
2347 } 2382 }
2348 2383
2349 } // namespace cc 2384 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698