| Index: cc/trees/draw_property_utils.cc
|
| diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
|
| index 694bf45f272a36c628b21b201db7edd86683b36d..1fe57213e6c7cc02c3146a455bd348c4b1830a4d 100644
|
| --- a/cc/trees/draw_property_utils.cc
|
| +++ b/cc/trees/draw_property_utils.cc
|
| @@ -54,21 +54,6 @@ static void ValidateRenderSurfaceForLayer(LayerImpl* layer) {
|
| DCHECK(effect_node->background_filters.IsEmpty());
|
| }
|
|
|
| -#endif
|
| -
|
| -static void ApplySublayerScale(const int effect_node_id,
|
| - const EffectTree& effect_tree,
|
| - gfx::Transform* transform) {
|
| - const EffectNode* effect_node = effect_tree.Node(effect_node_id);
|
| - const EffectNode* target_effect_node =
|
| - effect_node->has_render_surface
|
| - ? effect_node
|
| - : effect_tree.Node(effect_node->target_id);
|
| - transform->matrix().postScale(target_effect_node->sublayer_scale.x(),
|
| - target_effect_node->sublayer_scale.y(), 1.f);
|
| -}
|
| -
|
| -#if DCHECK_IS_ON()
|
| void VerifySublayerScalesMatch(const int effect_node_id,
|
| const int target_transform_id,
|
| const EffectTree& effect_tree,
|
| @@ -108,8 +93,8 @@ bool ComputeClipRectInTargetSpace(const LayerType* layer,
|
| target_node_id, &clip_to_target)) {
|
| // We don't have to apply sublayer scale when target is root.
|
| if (target_node_id != 0) {
|
| - ApplySublayerScale(layer->effect_tree_index(), effect_tree,
|
| - &clip_to_target);
|
| + PostConcatSublayerScale(layer->effect_tree_index(), effect_tree,
|
| + &clip_to_target);
|
| #if DCHECK_IS_ON()
|
| VerifySublayerScalesMatch(layer->effect_tree_index(), target_node_id,
|
| effect_tree, transform_tree);
|
| @@ -177,7 +162,7 @@ static ConditionalClip ComputeLocalRectInTargetSpace(
|
| return ConditionalClip{false, gfx::RectF()};
|
| // We don't have to apply sublayer scale when target is root.
|
| if (target_transform_id != 0) {
|
| - ApplySublayerScale(target_effect_id, effect_tree, ¤t_to_target);
|
| + PostConcatSublayerScale(target_effect_id, effect_tree, ¤t_to_target);
|
| #if DCHECK_IS_ON()
|
| VerifySublayerScalesMatch(target_effect_id, target_transform_id,
|
| effect_tree, transform_tree);
|
| @@ -715,6 +700,30 @@ static void ResetIfHasNanCoordinate(gfx::RectF* rect) {
|
| *rect = gfx::RectF();
|
| }
|
|
|
| +void PostConcatSublayerScale(const int effect_node_id,
|
| + const EffectTree& effect_tree,
|
| + gfx::Transform* transform) {
|
| + // TODO(jaydasika): This function should not compute target effect node id. It
|
| + // should receive it from callers.
|
| + const EffectNode* effect_node = effect_tree.Node(effect_node_id);
|
| + const EffectNode* target_effect_node =
|
| + effect_node->has_render_surface
|
| + ? effect_node
|
| + : effect_tree.Node(effect_node->target_id);
|
| + transform->matrix().postScale(target_effect_node->sublayer_scale.x(),
|
| + target_effect_node->sublayer_scale.y(), 1.f);
|
| +}
|
| +
|
| +void ConcatInverseSublayerScale(const int effect_node_id,
|
| + const EffectTree& effect_tree,
|
| + gfx::Transform* transform) {
|
| + const EffectNode* effect_node = effect_tree.Node(effect_node_id);
|
| + if (effect_node->sublayer_scale.x() != 0.0 &&
|
| + effect_node->sublayer_scale.y() != 0.0)
|
| + transform->Scale(1.0 / effect_node->sublayer_scale.x(),
|
| + 1.0 / effect_node->sublayer_scale.y());
|
| +}
|
| +
|
| void ComputeClips(ClipTree* clip_tree,
|
| const TransformTree& transform_tree,
|
| const EffectTree& effect_tree,
|
| @@ -761,8 +770,8 @@ void ComputeClips(ClipTree* clip_tree,
|
| &parent_to_current);
|
| // We don't have to apply sublayer scale when target is root.
|
| if (clip_node->target_transform_id != 0) {
|
| - ApplySublayerScale(clip_node->target_effect_id, effect_tree,
|
| - &parent_to_current);
|
| + PostConcatSublayerScale(clip_node->target_effect_id, effect_tree,
|
| + &parent_to_current);
|
| #if DCHECK_IS_ON()
|
| VerifySublayerScalesMatch(clip_node->target_effect_id,
|
| clip_node->target_transform_id, effect_tree,
|
| @@ -835,8 +844,8 @@ void ComputeClips(ClipTree* clip_tree,
|
| &source_to_target);
|
| // We don't have to apply sublayer scale when target is root.
|
| if (clip_node->target_transform_id != 0) {
|
| - ApplySublayerScale(clip_node->target_effect_id, effect_tree,
|
| - &source_to_target);
|
| + PostConcatSublayerScale(clip_node->target_effect_id, effect_tree,
|
| + &source_to_target);
|
| #if DCHECK_IS_ON()
|
| VerifySublayerScalesMatch(clip_node->target_effect_id,
|
| clip_node->target_transform_id, effect_tree,
|
| @@ -997,8 +1006,8 @@ static void VerifyDrawTransformsMatch(LayerImpl* layer,
|
| &draw_transform);
|
| // We don't have to apply sublayer scale when target is root.
|
| if (destination_id != 0) {
|
| - ApplySublayerScale(layer->effect_tree_index(), property_trees->effect_tree,
|
| - &draw_transform);
|
| + PostConcatSublayerScale(layer->effect_tree_index(),
|
| + property_trees->effect_tree, &draw_transform);
|
| #if DCHECK_IS_ON()
|
| VerifySublayerScalesMatch(layer->effect_tree_index(), destination_id,
|
| property_trees->effect_tree,
|
| @@ -1194,8 +1203,8 @@ static void SetSurfaceDrawTransform(const TransformTree& transform_tree,
|
| &render_surface_transform);
|
| // We don't have to apply sublayer scale when target is root.
|
| if (target_transform_node->id != 0) {
|
| - ApplySublayerScale(effect_node->target_id, effect_tree,
|
| - &render_surface_transform);
|
| + PostConcatSublayerScale(effect_node->target_id, effect_tree,
|
| + &render_surface_transform);
|
| #if DCHECK_IS_ON()
|
| VerifySublayerScalesMatch(effect_node->target_id, target_transform_node->id,
|
| effect_tree, transform_tree);
|
| @@ -1252,8 +1261,8 @@ static void SetSurfaceClipRect(const ClipNode* parent_clip_node,
|
|
|
| // We don't have to apply sublayer scale when target is root.
|
| if (transform_tree.TargetId(transform_node->id) != 0) {
|
| - ApplySublayerScale(render_surface->EffectTreeIndex(), effect_tree,
|
| - &clip_parent_target_to_target);
|
| + PostConcatSublayerScale(render_surface->EffectTreeIndex(), effect_tree,
|
| + &clip_parent_target_to_target);
|
| #if DCHECK_IS_ON()
|
| VerifySublayerScalesMatch(render_surface->EffectTreeIndex(),
|
| transform_tree.TargetId(transform_node->id),
|
|
|