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

Unified Diff: cc/trees/property_tree.cc

Issue 2639723002: [NOT FOR REVIEW]
Patch Set: . Created 3 years, 11 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/property_tree.cc
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
index 9850577ff4ed778e9f6fd3ce8eb87e7cd57ef092..6df4f353ea72db1fcc7ca328c44732de3d5101cd 100644
--- a/cc/trees/property_tree.cc
+++ b/cc/trees/property_tree.cc
@@ -1092,6 +1092,12 @@ gfx::RectF ClipTree::ViewportClip() const {
return Node(kViewportNodeId)->clip;
}
+void ClipTree::set_needs_update(bool needs_update) {
+ if (needs_update && !needs_update_)
+ property_trees()->UpdateClipTreeUpdateNumber();
+ needs_update_ = needs_update;
+}
+
bool ClipTree::operator==(const ClipTree& other) const {
return PropertyTree::operator==(other);
}
@@ -1537,7 +1543,7 @@ gfx::ScrollOffset ScrollTree::ClampScrollOffsetToLimits(
}
PropertyTreesCachedData::PropertyTreesCachedData()
- : transform_tree_update_number(0) {
+ : transform_tree_update_number(0), clip_tree_update_number(0) {
animation_scales.clear();
}
@@ -2002,6 +2008,58 @@ DrawTransformData& PropertyTrees::FetchDrawTransformsDataFromCache(
return data;
}
+int PropertyTrees::ClipRectCacheId(int clip_id, int target_id) const {
+ auto& cached_clips = cached_data_.clip_rects[clip_id];
+ for (size_t i = 0; i < cached_clips.size(); i++) {
+ if (cached_clips[i].target_id == target_id &&
+ cached_clips[i].update_number == cached_data_.clip_tree_update_number)
+ return static_cast<int>(i);
+ }
+ return -1;
+}
+
+ConditionalClip& PropertyTrees::FetchClipRectFromCache(int clip_id,
+ int target_id,
+ int cache_index) const {
+ DCHECK_GE(cache_index, 0);
+ DCHECK_NE(ClipRectCacheId(clip_id, target_id), -1);
+ DCHECK_EQ(cached_data_.clip_rects[clip_id][cache_index].update_number,
+ cached_data_.clip_tree_update_number);
+ return cached_data_.clip_rects[clip_id][cache_index].clip;
+}
+
+void PropertyTrees::AddToClipRectCache(int clip_id,
+ int target_id,
+ const ConditionalClip& clip) {
+ auto& cached_clips = cached_data_.clip_rects[clip_id];
+
+ if (cached_clips.size() > 1 || cached_clips.back().target_id != -1) {
+ cached_clips.push_back(ClipRectData());
+ }
+
+ ClipRectData& data = cached_clips.back();
+ data.update_number = cached_data_.clip_tree_update_number;
+ data.target_id = target_id;
+ data.clip = clip;
+}
+
+bool PropertyTrees::IsInVisibleRectCache(int clip_id) const {
+ return cached_data_.visible_rects[clip_id].update_number ==
+ cached_data_.clip_tree_update_number;
+}
+
+gfx::RectF PropertyTrees::FetchVisibleRectFromCache(int clip_id) const {
+ DCHECK_EQ(cached_data_.visible_rects[clip_id].update_number,
+ cached_data_.clip_tree_update_number);
+ return cached_data_.visible_rects[clip_id].visible_rect;
+}
+
+void PropertyTrees::AddToVisibleRectCache(int clip_id, const gfx::RectF& rect) {
+ auto& visible_rect_data = cached_data_.visible_rects[clip_id];
+ visible_rect_data.update_number = cached_data_.clip_tree_update_number;
+ visible_rect_data.visible_rect = rect;
+}
+
DrawTransforms& PropertyTrees::GetDrawTransforms(int transform_id,
int effect_id) const {
const EffectNode* effect_node = effect_tree.Node(effect_id);
@@ -2060,16 +2118,25 @@ DrawTransforms& PropertyTrees::GetDrawTransforms(int transform_id,
void PropertyTrees::ResetCachedData() {
cached_data_.transform_tree_update_number = 0;
+ cached_data_.clip_tree_update_number = 0;
cached_data_.animation_scales = std::vector<AnimationScaleData>(
transform_tree.nodes().size(), AnimationScaleData());
cached_data_.draw_transforms = std::vector<std::vector<DrawTransformData>>(
transform_tree.nodes().size(), std::vector<DrawTransformData>(1));
+ cached_data_.clip_rects = std::vector<std::vector<ClipRectData>>(
+ clip_tree.nodes().size(), std::vector<ClipRectData>(1));
+ cached_data_.visible_rects =
+ std::vector<VisibleRectData>(clip_tree.nodes().size());
}
void PropertyTrees::UpdateTransformTreeUpdateNumber() {
cached_data_.transform_tree_update_number++;
}
+void PropertyTrees::UpdateClipTreeUpdateNumber() {
+ cached_data_.clip_tree_update_number++;
+}
+
gfx::Transform PropertyTrees::ToScreenSpaceTransformWithoutSurfaceContentsScale(
int transform_id,
int effect_id) const {
« 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