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

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

Issue 1991523002: cc : Track ids for which active opacity always wins on property trees (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 1909 matching lines...) Expand 10 before | Expand all | Expand 10 after
1920 PropertyTrees::~PropertyTrees() {} 1920 PropertyTrees::~PropertyTrees() {}
1921 1921
1922 bool PropertyTrees::operator==(const PropertyTrees& other) const { 1922 bool PropertyTrees::operator==(const PropertyTrees& other) const {
1923 return transform_tree == other.transform_tree && 1923 return transform_tree == other.transform_tree &&
1924 effect_tree == other.effect_tree && clip_tree == other.clip_tree && 1924 effect_tree == other.effect_tree && clip_tree == other.clip_tree &&
1925 scroll_tree == other.scroll_tree && 1925 scroll_tree == other.scroll_tree &&
1926 transform_id_to_index_map == other.transform_id_to_index_map && 1926 transform_id_to_index_map == other.transform_id_to_index_map &&
1927 effect_id_to_index_map == other.effect_id_to_index_map && 1927 effect_id_to_index_map == other.effect_id_to_index_map &&
1928 clip_id_to_index_map == other.clip_id_to_index_map && 1928 clip_id_to_index_map == other.clip_id_to_index_map &&
1929 scroll_id_to_index_map == other.scroll_id_to_index_map && 1929 scroll_id_to_index_map == other.scroll_id_to_index_map &&
1930 always_use_active_tree_opacity_effect_ids ==
1931 other.always_use_active_tree_opacity_effect_ids &&
1930 needs_rebuild == other.needs_rebuild && changed == other.changed && 1932 needs_rebuild == other.needs_rebuild && changed == other.changed &&
1931 full_tree_damaged == other.full_tree_damaged && 1933 full_tree_damaged == other.full_tree_damaged &&
1932 is_main_thread == other.is_main_thread && 1934 is_main_thread == other.is_main_thread &&
1933 is_active == other.is_active && 1935 is_active == other.is_active &&
1934 non_root_surfaces_enabled == other.non_root_surfaces_enabled && 1936 non_root_surfaces_enabled == other.non_root_surfaces_enabled &&
1935 sequence_number == other.sequence_number; 1937 sequence_number == other.sequence_number;
1936 } 1938 }
1937 1939
1938 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { 1940 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) {
1939 transform_tree = from.transform_tree; 1941 transform_tree = from.transform_tree;
1940 effect_tree = from.effect_tree; 1942 effect_tree = from.effect_tree;
1941 clip_tree = from.clip_tree; 1943 clip_tree = from.clip_tree;
1942 scroll_tree = from.scroll_tree; 1944 scroll_tree = from.scroll_tree;
1943 transform_id_to_index_map = from.transform_id_to_index_map; 1945 transform_id_to_index_map = from.transform_id_to_index_map;
1944 effect_id_to_index_map = from.effect_id_to_index_map; 1946 effect_id_to_index_map = from.effect_id_to_index_map;
1947 always_use_active_tree_opacity_effect_ids =
1948 from.always_use_active_tree_opacity_effect_ids;
1945 clip_id_to_index_map = from.clip_id_to_index_map; 1949 clip_id_to_index_map = from.clip_id_to_index_map;
1946 scroll_id_to_index_map = from.scroll_id_to_index_map; 1950 scroll_id_to_index_map = from.scroll_id_to_index_map;
1947 needs_rebuild = from.needs_rebuild; 1951 needs_rebuild = from.needs_rebuild;
1948 changed = from.changed; 1952 changed = from.changed;
1949 full_tree_damaged = from.full_tree_damaged; 1953 full_tree_damaged = from.full_tree_damaged;
1950 non_root_surfaces_enabled = from.non_root_surfaces_enabled; 1954 non_root_surfaces_enabled = from.non_root_surfaces_enabled;
1951 sequence_number = from.sequence_number; 1955 sequence_number = from.sequence_number;
1952 is_main_thread = from.is_main_thread; 1956 is_main_thread = from.is_main_thread;
1953 is_active = from.is_active; 1957 is_active = from.is_active;
1954 inner_viewport_container_bounds_delta_ = 1958 inner_viewport_container_bounds_delta_ =
(...skipping 19 matching lines...) Expand all
1974 proto->set_needs_rebuild(needs_rebuild); 1978 proto->set_needs_rebuild(needs_rebuild);
1975 proto->set_changed(changed); 1979 proto->set_changed(changed);
1976 proto->set_full_tree_damaged(full_tree_damaged); 1980 proto->set_full_tree_damaged(full_tree_damaged);
1977 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); 1981 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled);
1978 proto->set_is_main_thread(is_main_thread); 1982 proto->set_is_main_thread(is_main_thread);
1979 proto->set_is_active(is_active); 1983 proto->set_is_active(is_active);
1980 1984
1981 // TODO(khushalsagar): Consider using the sequence number to decide if 1985 // TODO(khushalsagar): Consider using the sequence number to decide if
1982 // property trees need to be serialized again for a commit. See crbug/555370. 1986 // property trees need to be serialized again for a commit. See crbug/555370.
1983 proto->set_sequence_number(sequence_number); 1987 proto->set_sequence_number(sequence_number);
1988
1989 for (auto i : always_use_active_tree_opacity_effect_ids)
1990 proto->add_always_use_active_tree_opacity_effect_ids(i);
1984 } 1991 }
1985 1992
1986 // static 1993 // static
1987 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { 1994 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) {
1988 transform_tree.FromProtobuf(proto.transform_tree(), 1995 transform_tree.FromProtobuf(proto.transform_tree(),
1989 &transform_id_to_index_map); 1996 &transform_id_to_index_map);
1990 effect_tree.FromProtobuf(proto.effect_tree(), &effect_id_to_index_map); 1997 effect_tree.FromProtobuf(proto.effect_tree(), &effect_id_to_index_map);
1991 clip_tree.FromProtobuf(proto.clip_tree(), &clip_id_to_index_map); 1998 clip_tree.FromProtobuf(proto.clip_tree(), &clip_id_to_index_map);
1992 scroll_tree.FromProtobuf(proto.scroll_tree(), &scroll_id_to_index_map); 1999 scroll_tree.FromProtobuf(proto.scroll_tree(), &scroll_id_to_index_map);
1993 2000
1994 needs_rebuild = proto.needs_rebuild(); 2001 needs_rebuild = proto.needs_rebuild();
1995 changed = proto.changed(); 2002 changed = proto.changed();
1996 full_tree_damaged = proto.full_tree_damaged(); 2003 full_tree_damaged = proto.full_tree_damaged();
1997 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); 2004 non_root_surfaces_enabled = proto.non_root_surfaces_enabled();
1998 sequence_number = proto.sequence_number(); 2005 sequence_number = proto.sequence_number();
1999 is_main_thread = proto.is_main_thread(); 2006 is_main_thread = proto.is_main_thread();
2000 is_active = proto.is_active(); 2007 is_active = proto.is_active();
2001 2008
2002 transform_tree.SetPropertyTrees(this); 2009 transform_tree.SetPropertyTrees(this);
2003 effect_tree.SetPropertyTrees(this); 2010 effect_tree.SetPropertyTrees(this);
2004 clip_tree.SetPropertyTrees(this); 2011 clip_tree.SetPropertyTrees(this);
2005 scroll_tree.SetPropertyTrees(this); 2012 scroll_tree.SetPropertyTrees(this);
2013 for (auto i : proto.always_use_active_tree_opacity_effect_ids())
2014 always_use_active_tree_opacity_effect_ids.push_back(i);
2006 } 2015 }
2007 2016
2008 void PropertyTrees::SetInnerViewportContainerBoundsDelta( 2017 void PropertyTrees::SetInnerViewportContainerBoundsDelta(
2009 gfx::Vector2dF bounds_delta) { 2018 gfx::Vector2dF bounds_delta) {
2010 if (inner_viewport_container_bounds_delta_ == bounds_delta) 2019 if (inner_viewport_container_bounds_delta_ == bounds_delta)
2011 return; 2020 return;
2012 2021
2013 inner_viewport_container_bounds_delta_ = bounds_delta; 2022 inner_viewport_container_bounds_delta_ = bounds_delta;
2014 transform_tree.UpdateInnerViewportContainerBoundsDelta(); 2023 transform_tree.UpdateInnerViewportContainerBoundsDelta();
2015 } 2024 }
2016 2025
2017 void PropertyTrees::SetOuterViewportContainerBoundsDelta( 2026 void PropertyTrees::SetOuterViewportContainerBoundsDelta(
2018 gfx::Vector2dF bounds_delta) { 2027 gfx::Vector2dF bounds_delta) {
2019 if (outer_viewport_container_bounds_delta_ == bounds_delta) 2028 if (outer_viewport_container_bounds_delta_ == bounds_delta)
2020 return; 2029 return;
2021 2030
2022 outer_viewport_container_bounds_delta_ = bounds_delta; 2031 outer_viewport_container_bounds_delta_ = bounds_delta;
2023 transform_tree.UpdateOuterViewportContainerBoundsDelta(); 2032 transform_tree.UpdateOuterViewportContainerBoundsDelta();
2024 } 2033 }
2025 2034
2026 void PropertyTrees::SetInnerViewportScrollBoundsDelta( 2035 void PropertyTrees::SetInnerViewportScrollBoundsDelta(
2027 gfx::Vector2dF bounds_delta) { 2036 gfx::Vector2dF bounds_delta) {
2028 inner_viewport_scroll_bounds_delta_ = bounds_delta; 2037 inner_viewport_scroll_bounds_delta_ = bounds_delta;
2029 } 2038 }
2030 2039
2040 void PropertyTrees::PushOpacityIfNeeded(PropertyTrees* target_tree) {
2041 for (int id : target_tree->always_use_active_tree_opacity_effect_ids) {
2042 if (effect_id_to_index_map.find(id) == effect_id_to_index_map.end())
2043 continue;
2044 EffectNode* source_effect_node =
2045 effect_tree.Node(effect_id_to_index_map[id]);
2046 EffectNode* target_effect_node =
2047 target_tree->effect_tree.Node(target_tree->effect_id_to_index_map[id]);
2048 float source_opacity = source_effect_node->data.opacity;
2049 float target_opacity = target_effect_node->data.opacity;
2050 if (source_opacity == target_opacity)
2051 continue;
2052 target_effect_node->data.opacity = source_opacity;
2053 target_tree->effect_tree.set_needs_update(true);
2054 }
2055 }
2056
2031 void PropertyTrees::UpdateChangeTracking() { 2057 void PropertyTrees::UpdateChangeTracking() {
2032 for (int id = 1; id < static_cast<int>(effect_tree.size()); ++id) { 2058 for (int id = 1; id < static_cast<int>(effect_tree.size()); ++id) {
2033 EffectNode* node = effect_tree.Node(id); 2059 EffectNode* node = effect_tree.Node(id);
2034 EffectNode* parent_node = effect_tree.parent(node); 2060 EffectNode* parent_node = effect_tree.parent(node);
2035 effect_tree.UpdateEffectChanged(node, parent_node); 2061 effect_tree.UpdateEffectChanged(node, parent_node);
2036 } 2062 }
2037 for (int i = 1; i < static_cast<int>(transform_tree.size()); ++i) { 2063 for (int i = 1; i < static_cast<int>(transform_tree.size()); ++i) {
2038 TransformNode* node = transform_tree.Node(i); 2064 TransformNode* node = transform_tree.Node(i);
2039 TransformNode* parent_node = transform_tree.parent(node); 2065 TransformNode* parent_node = transform_tree.parent(node);
2040 TransformNode* source_node = transform_tree.Node(node->data.source_node_id); 2066 TransformNode* source_node = transform_tree.Node(node->data.source_node_id);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2098 value->EndDictionary(); 2124 value->EndDictionary();
2099 2125
2100 value->BeginDictionary("scroll_tree"); 2126 value->BeginDictionary("scroll_tree");
2101 scroll_tree.AsValueInto(value.get()); 2127 scroll_tree.AsValueInto(value.get());
2102 value->EndDictionary(); 2128 value->EndDictionary();
2103 2129
2104 return value; 2130 return value;
2105 } 2131 }
2106 2132
2107 } // namespace cc 2133 } // 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