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

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

Issue 2639723002: [NOT FOR REVIEW]
Patch Set: . Created 3 years, 10 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') | tools/perf/benchmarks/draw_properties.py » ('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 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 node->clip = viewport_rect; 1085 node->clip = viewport_rect;
1086 set_needs_update(true); 1086 set_needs_update(true);
1087 } 1087 }
1088 1088
1089 gfx::RectF ClipTree::ViewportClip() const { 1089 gfx::RectF ClipTree::ViewportClip() const {
1090 const unsigned long min_size = 1; 1090 const unsigned long min_size = 1;
1091 DCHECK_GT(size(), min_size); 1091 DCHECK_GT(size(), min_size);
1092 return Node(kViewportNodeId)->clip; 1092 return Node(kViewportNodeId)->clip;
1093 } 1093 }
1094 1094
1095 void ClipTree::set_needs_update(bool needs_update) {
1096 if (needs_update && !needs_update_)
1097 property_trees()->UpdateClipTreeUpdateNumber();
1098 needs_update_ = needs_update;
1099 }
1100
1095 bool ClipTree::operator==(const ClipTree& other) const { 1101 bool ClipTree::operator==(const ClipTree& other) const {
1096 return PropertyTree::operator==(other); 1102 return PropertyTree::operator==(other);
1097 } 1103 }
1098 1104
1099 EffectTree& EffectTree::operator=(const EffectTree& from) { 1105 EffectTree& EffectTree::operator=(const EffectTree& from) {
1100 PropertyTree::operator=(from); 1106 PropertyTree::operator=(from);
1101 mask_layer_ids_ = from.mask_layer_ids_; 1107 mask_layer_ids_ = from.mask_layer_ids_;
1102 // copy_requests_ are omitted here, since these need to be moved rather 1108 // copy_requests_ are omitted here, since these need to be moved rather
1103 // than copied or assigned. 1109 // than copied or assigned.
1104 return *this; 1110 return *this;
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
1530 1536
1531 gfx::ScrollOffset ScrollTree::ClampScrollOffsetToLimits( 1537 gfx::ScrollOffset ScrollTree::ClampScrollOffsetToLimits(
1532 gfx::ScrollOffset offset, 1538 gfx::ScrollOffset offset,
1533 ScrollNode* scroll_node) const { 1539 ScrollNode* scroll_node) const {
1534 offset.SetToMin(MaxScrollOffset(scroll_node->id)); 1540 offset.SetToMin(MaxScrollOffset(scroll_node->id));
1535 offset.SetToMax(gfx::ScrollOffset()); 1541 offset.SetToMax(gfx::ScrollOffset());
1536 return offset; 1542 return offset;
1537 } 1543 }
1538 1544
1539 PropertyTreesCachedData::PropertyTreesCachedData() 1545 PropertyTreesCachedData::PropertyTreesCachedData()
1540 : transform_tree_update_number(0) { 1546 : transform_tree_update_number(0), clip_tree_update_number(0) {
1541 animation_scales.clear(); 1547 animation_scales.clear();
1542 } 1548 }
1543 1549
1544 PropertyTreesCachedData::~PropertyTreesCachedData() {} 1550 PropertyTreesCachedData::~PropertyTreesCachedData() {}
1545 1551
1546 PropertyTrees::PropertyTrees() 1552 PropertyTrees::PropertyTrees()
1547 : needs_rebuild(true), 1553 : needs_rebuild(true),
1548 non_root_surfaces_enabled(true), 1554 non_root_surfaces_enabled(true),
1549 changed(false), 1555 changed(false),
1550 full_tree_damaged(false), 1556 full_tree_damaged(false),
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
1995 } 2001 }
1996 } 2002 }
1997 // Add an entry to the cache. 2003 // Add an entry to the cache.
1998 cached_data_.draw_transforms[transform_id].push_back(DrawTransformData()); 2004 cached_data_.draw_transforms[transform_id].push_back(DrawTransformData());
1999 DrawTransformData& data = cached_data_.draw_transforms[transform_id].back(); 2005 DrawTransformData& data = cached_data_.draw_transforms[transform_id].back();
2000 data.update_number = -1; 2006 data.update_number = -1;
2001 data.target_id = dest_id; 2007 data.target_id = dest_id;
2002 return data; 2008 return data;
2003 } 2009 }
2004 2010
2011 int PropertyTrees::ClipRectCacheId(int clip_id, int target_id) const {
2012 auto& cached_clips = cached_data_.clip_rects[clip_id];
2013 for (size_t i = 0; i < cached_clips.size(); i++) {
2014 if (cached_clips[i].target_id == target_id &&
2015 cached_clips[i].update_number == cached_data_.clip_tree_update_number)
2016 return static_cast<int>(i);
2017 }
2018 return -1;
2019 }
2020
2021 ConditionalClip& PropertyTrees::FetchClipRectFromCache(int clip_id,
2022 int target_id,
2023 int cache_index) const {
2024 DCHECK_GE(cache_index, 0);
2025 DCHECK_NE(ClipRectCacheId(clip_id, target_id), -1);
2026 DCHECK_EQ(cached_data_.clip_rects[clip_id][cache_index].update_number,
2027 cached_data_.clip_tree_update_number);
2028 return cached_data_.clip_rects[clip_id][cache_index].clip;
2029 }
2030
2031 void PropertyTrees::AddToClipRectCache(int clip_id,
2032 int target_id,
2033 const ConditionalClip& clip) {
2034 auto& cached_clips = cached_data_.clip_rects[clip_id];
2035
2036 if (cached_clips.size() > 1 || cached_clips.back().target_id != -1) {
2037 cached_clips.push_back(ClipRectData());
2038 }
2039
2040 ClipRectData& data = cached_clips.back();
2041 data.update_number = cached_data_.clip_tree_update_number;
2042 data.target_id = target_id;
2043 data.clip = clip;
2044 }
2045
2046 bool PropertyTrees::IsInVisibleRectCache(int clip_id) const {
2047 return cached_data_.visible_rects[clip_id].update_number ==
2048 cached_data_.clip_tree_update_number;
2049 }
2050
2051 gfx::RectF PropertyTrees::FetchVisibleRectFromCache(int clip_id) const {
2052 DCHECK_EQ(cached_data_.visible_rects[clip_id].update_number,
2053 cached_data_.clip_tree_update_number);
2054 return cached_data_.visible_rects[clip_id].visible_rect;
2055 }
2056
2057 void PropertyTrees::AddToVisibleRectCache(int clip_id, const gfx::RectF& rect) {
2058 auto& visible_rect_data = cached_data_.visible_rects[clip_id];
2059 visible_rect_data.update_number = cached_data_.clip_tree_update_number;
2060 visible_rect_data.visible_rect = rect;
2061 }
2062
2005 DrawTransforms& PropertyTrees::GetDrawTransforms(int transform_id, 2063 DrawTransforms& PropertyTrees::GetDrawTransforms(int transform_id,
2006 int effect_id) const { 2064 int effect_id) const {
2007 const EffectNode* effect_node = effect_tree.Node(effect_id); 2065 const EffectNode* effect_node = effect_tree.Node(effect_id);
2008 int dest_id = effect_node->transform_id; 2066 int dest_id = effect_node->transform_id;
2009 2067
2010 DrawTransformData& data = 2068 DrawTransformData& data =
2011 FetchDrawTransformsDataFromCache(transform_id, dest_id); 2069 FetchDrawTransformsDataFromCache(transform_id, dest_id);
2012 2070
2013 DCHECK(data.update_number != cached_data_.transform_tree_update_number || 2071 DCHECK(data.update_number != cached_data_.transform_tree_update_number ||
2014 data.target_id != EffectTree::kInvalidNodeId); 2072 data.target_id != EffectTree::kInvalidNodeId);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2053 data.transforms.to_valid = true; 2111 data.transforms.to_valid = true;
2054 data.update_number = cached_data_.transform_tree_update_number; 2112 data.update_number = cached_data_.transform_tree_update_number;
2055 data.target_id = dest_id; 2113 data.target_id = dest_id;
2056 data.transforms.from_target = from_target; 2114 data.transforms.from_target = from_target;
2057 data.transforms.to_target = target_space_transform; 2115 data.transforms.to_target = target_space_transform;
2058 return data.transforms; 2116 return data.transforms;
2059 } 2117 }
2060 2118
2061 void PropertyTrees::ResetCachedData() { 2119 void PropertyTrees::ResetCachedData() {
2062 cached_data_.transform_tree_update_number = 0; 2120 cached_data_.transform_tree_update_number = 0;
2121 cached_data_.clip_tree_update_number = 0;
2063 cached_data_.animation_scales = std::vector<AnimationScaleData>( 2122 cached_data_.animation_scales = std::vector<AnimationScaleData>(
2064 transform_tree.nodes().size(), AnimationScaleData()); 2123 transform_tree.nodes().size(), AnimationScaleData());
2065 cached_data_.draw_transforms = std::vector<std::vector<DrawTransformData>>( 2124 cached_data_.draw_transforms = std::vector<std::vector<DrawTransformData>>(
2066 transform_tree.nodes().size(), std::vector<DrawTransformData>(1)); 2125 transform_tree.nodes().size(), std::vector<DrawTransformData>(1));
2126 cached_data_.clip_rects = std::vector<std::vector<ClipRectData>>(
2127 clip_tree.nodes().size(), std::vector<ClipRectData>(1));
2128 cached_data_.visible_rects =
2129 std::vector<VisibleRectData>(clip_tree.nodes().size());
2067 } 2130 }
2068 2131
2069 void PropertyTrees::UpdateTransformTreeUpdateNumber() { 2132 void PropertyTrees::UpdateTransformTreeUpdateNumber() {
2070 cached_data_.transform_tree_update_number++; 2133 cached_data_.transform_tree_update_number++;
2071 } 2134 }
2072 2135
2136 void PropertyTrees::UpdateClipTreeUpdateNumber() {
2137 cached_data_.clip_tree_update_number++;
2138 }
2139
2073 gfx::Transform PropertyTrees::ToScreenSpaceTransformWithoutSurfaceContentsScale( 2140 gfx::Transform PropertyTrees::ToScreenSpaceTransformWithoutSurfaceContentsScale(
2074 int transform_id, 2141 int transform_id,
2075 int effect_id) const { 2142 int effect_id) const {
2076 if (transform_id == TransformTree::kRootNodeId) { 2143 if (transform_id == TransformTree::kRootNodeId) {
2077 return gfx::Transform(); 2144 return gfx::Transform();
2078 } 2145 }
2079 gfx::Transform screen_space_transform = transform_tree.ToScreen(transform_id); 2146 gfx::Transform screen_space_transform = transform_tree.ToScreen(transform_id);
2080 const EffectNode* effect_node = effect_tree.Node(effect_id); 2147 const EffectNode* effect_node = effect_tree.Node(effect_id);
2081 2148
2082 if (effect_node->surface_contents_scale.x() != 0.0 && 2149 if (effect_node->surface_contents_scale.x() != 0.0 &&
(...skipping 13 matching lines...) Expand all
2096 2163
2097 const EffectNode* effect_node = effect_tree.Node(effect_id); 2164 const EffectNode* effect_node = effect_tree.Node(effect_id);
2098 2165
2099 bool success = GetFromTarget(transform_id, effect_id, transform); 2166 bool success = GetFromTarget(transform_id, effect_id, transform);
2100 transform->Scale(effect_node->surface_contents_scale.x(), 2167 transform->Scale(effect_node->surface_contents_scale.x(),
2101 effect_node->surface_contents_scale.y()); 2168 effect_node->surface_contents_scale.y());
2102 return success; 2169 return success;
2103 } 2170 }
2104 2171
2105 } // namespace cc 2172 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | tools/perf/benchmarks/draw_properties.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698