| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |