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

Unified Diff: cc/trees/property_tree_builder.cc

Issue 953093002: cc: Derive draw opacity from property trees (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/property_tree_builder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/property_tree_builder.cc
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
index 7fe0494aec17d07fe26edcf6db8547b0be1cc3b3..f80f324affab5b77a29fe9c9c87fc41bb1130704 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -21,10 +21,12 @@ namespace {
struct DataForRecursion {
TransformTree* transform_tree;
ClipTree* clip_tree;
+ OpacityTree* opacity_tree;
Layer* transform_tree_parent;
Layer* transform_fixed_parent;
Layer* render_target;
int clip_tree_parent;
+ int opacity_tree_parent;
gfx::Vector2dF offset_to_transform_tree_parent;
gfx::Vector2dF offset_to_transform_fixed_parent;
const Layer* page_scale_layer;
@@ -223,6 +225,31 @@ void AddTransformNodeIfNeeded(const DataForRecursion& data_from_ancestor,
layer->set_offset_to_transform_parent(gfx::Vector2dF());
}
+void AddOpacityNodeIfNeeded(const DataForRecursion& data_from_ancestor,
+ Layer* layer,
+ DataForRecursion* data_for_children) {
+ const bool is_root = !layer->parent();
+ const bool has_transparency = layer->opacity() != 1.f;
+ const bool has_animated_opacity =
+ layer->layer_animation_controller()->IsAnimatingProperty(
+ Animation::OPACITY);
Ian Vollick 2015/02/24 21:25:36 Does this capture impl-only opacity animations? Th
ajuma 2015/02/24 21:30:38 Afaik, PZ scrollbars no longer use impl-only anima
ajuma 2015/02/24 21:53:29 Updated to also create nodes for layers that can a
+ bool requires_node = is_root || has_transparency || has_animated_opacity;
+
+ int parent_id = data_from_ancestor.opacity_tree_parent;
+
+ if (!requires_node) {
+ layer->set_opacity_tree_index(parent_id);
+ data_for_children->opacity_tree_parent = parent_id;
+ return;
+ }
+
+ OpacityNode node;
+ node.data = layer->opacity();
+ data_for_children->opacity_tree_parent =
+ data_for_children->opacity_tree->Insert(node, parent_id);
+ layer->set_opacity_tree_index(data_for_children->opacity_tree_parent);
+}
+
void BuildPropertyTreesInternal(Layer* layer,
const DataForRecursion& data_from_parent) {
DataForRecursion data_for_children(data_from_parent);
@@ -231,6 +258,7 @@ void BuildPropertyTreesInternal(Layer* layer,
AddTransformNodeIfNeeded(data_from_parent, layer, &data_for_children);
AddClipNodeIfNeeded(data_from_parent, layer, &data_for_children);
+ AddOpacityNodeIfNeeded(data_from_parent, layer, &data_for_children);
if (layer == data_from_parent.page_scale_layer)
data_for_children.in_subtree_of_page_scale_application_layer = true;
@@ -260,14 +288,17 @@ void PropertyTreeBuilder::BuildPropertyTrees(
const gfx::Rect& viewport,
const gfx::Transform& device_transform,
TransformTree* transform_tree,
- ClipTree* clip_tree) {
+ ClipTree* clip_tree,
+ OpacityTree* opacity_tree) {
DataForRecursion data_for_recursion;
data_for_recursion.transform_tree = transform_tree;
data_for_recursion.clip_tree = clip_tree;
+ data_for_recursion.opacity_tree = opacity_tree;
data_for_recursion.transform_tree_parent = nullptr;
data_for_recursion.transform_fixed_parent = nullptr;
data_for_recursion.render_target = root_layer;
data_for_recursion.clip_tree_parent = 0;
+ data_for_recursion.opacity_tree_parent = -1;
data_for_recursion.page_scale_layer = page_scale_layer;
data_for_recursion.page_scale_factor = page_scale_factor;
data_for_recursion.device_scale_factor = device_scale_factor;
« no previous file with comments | « cc/trees/property_tree_builder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698