| Index: cc/trees/draw_property_utils.cc
|
| diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
|
| index d46151d683598cdf8f0e0e53c3f8ae36c3585c0e..2199e085dbb2ee39f17141c9ae1ad87fb7328360 100644
|
| --- a/cc/trees/draw_property_utils.cc
|
| +++ b/cc/trees/draw_property_utils.cc
|
| @@ -888,6 +888,45 @@ static void ComputeLayerClipRect(const PropertyTrees* property_trees,
|
| }
|
| }
|
|
|
| +static int FindTargetTransformTreeIndexFromEffectTree(
|
| + const EffectTree& effect_tree,
|
| + const int effect_tree_index) {
|
| + const EffectNode* node = effect_tree.Node(effect_tree_index);
|
| + if (node->data.has_render_surface)
|
| + return node->data.transform_id;
|
| + node = effect_tree.Node(node->data.target_id);
|
| + return node->data.transform_id;
|
| +}
|
| +
|
| +static void VerifyDrawTransformsMatch(LayerImpl* layer,
|
| + PropertyTrees* property_trees) {
|
| + const int source_id = layer->transform_tree_index();
|
| + int destination_id = FindTargetTransformTreeIndexFromEffectTree(
|
| + property_trees->effect_tree, layer->effect_tree_index());
|
| + // TODO(jaydasika) : Remove this after sorting out how sublayer scale works
|
| + // for these ids.
|
| + if (destination_id == 0 || destination_id == 1)
|
| + return;
|
| + gfx::Transform draw_transform;
|
| + property_trees->transform_tree.ComputeTransform(source_id, destination_id,
|
| + &draw_transform);
|
| + TransformNode* target_node =
|
| + property_trees->transform_tree.Node(destination_id);
|
| + draw_transform.matrix().postScale(target_node->data.sublayer_scale.x(),
|
| + target_node->data.sublayer_scale.y(), 1.f);
|
| + if (layer->should_flatten_transform_from_property_tree())
|
| + draw_transform.FlattenTo2d();
|
| + draw_transform.Translate(layer->offset_to_transform_parent().x(),
|
| + layer->offset_to_transform_parent().y());
|
| + DCHECK(draw_transform.ApproximatelyEqual(
|
| + DrawTransform(layer, property_trees->transform_tree)))
|
| + << " layer: " << layer->id() << " source transform id: " << source_id
|
| + << " destination transform id: " << destination_id
|
| + << " draw transform from transform tree: "
|
| + << DrawTransform(layer, property_trees->transform_tree).ToString()
|
| + << " v.s." << draw_transform.ToString();
|
| +}
|
| +
|
| static void ComputeVisibleRectsInternal(
|
| LayerImpl* root_layer,
|
| PropertyTrees* property_trees,
|
| @@ -980,6 +1019,12 @@ void VerifyClipTreeCalculations(const LayerImplList& layer_list,
|
| ComputeLayerClipRect(property_trees, layer);
|
| }
|
|
|
| +void VerifyTransformTreeCalculations(const LayerImplList& layer_list,
|
| + PropertyTrees* property_trees) {
|
| + for (auto layer : layer_list)
|
| + VerifyDrawTransformsMatch(layer, property_trees);
|
| +}
|
| +
|
| void ComputeVisibleRects(LayerImpl* root_layer,
|
| PropertyTrees* property_trees,
|
| bool can_render_to_separate_surface,
|
|
|