| 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..0c080dd2ace2e883c98e64cbcac10a239db34d0b 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;
|
| @@ -120,8 +122,6 @@ void AddTransformNodeIfNeeded(const DataForRecursion& data_from_ancestor,
|
| layer->layer_animation_controller()->IsAnimatingProperty(
|
| Animation::TRANSFORM);
|
|
|
| - const bool has_transform_origin = layer->transform_origin() != gfx::Point3F();
|
| -
|
| const bool has_surface = !!layer->render_surface();
|
|
|
| const bool flattening_change = layer->parent() &&
|
| @@ -131,7 +131,7 @@ void AddTransformNodeIfNeeded(const DataForRecursion& data_from_ancestor,
|
| bool requires_node = is_root || is_scrollable || is_fixed ||
|
| has_significant_transform || has_animated_transform ||
|
| is_page_scale_application_layer || flattening_change ||
|
| - has_transform_origin || has_surface;
|
| + has_surface;
|
|
|
| Layer* transform_parent = GetTransformParent(data_from_ancestor, layer);
|
|
|
| @@ -223,6 +223,32 @@ 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) ||
|
| + layer->OpacityCanAnimateOnImplThread();
|
| + 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);
|
| @@ -232,6 +258,9 @@ void BuildPropertyTreesInternal(Layer* layer,
|
| AddTransformNodeIfNeeded(data_from_parent, layer, &data_for_children);
|
| AddClipNodeIfNeeded(data_from_parent, layer, &data_for_children);
|
|
|
| + if (data_from_parent.opacity_tree)
|
| + 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 +289,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;
|
|
|