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

Unified Diff: cc/trees/draw_property_utils.cc

Issue 2147283002: cc : Fix occlusion tracking bug for contributing surface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mask test Created 4 years, 5 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/draw_property_utils.h ('k') | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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, &current_to_target);
+ PostConcatSublayerScale(target_effect_id, effect_tree, &current_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),
« no previous file with comments | « cc/trees/draw_property_utils.h ('k') | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698