Index: cc/trees/layer_tree_host_common.cc |
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc |
index 6b2c5b6d6c3c94be5aa9da22bc67403407f1633e..63ee1981d798a8c7959af2ac30a64b98b506f48c 100644 |
--- a/cc/trees/layer_tree_host_common.cc |
+++ b/cc/trees/layer_tree_host_common.cc |
@@ -913,11 +913,14 @@ static inline void UpdateLayerScaleDrawProperties( |
LayerType* layer, |
float ideal_contents_scale, |
float maximum_animation_contents_scale, |
+ float starting_animation_contents_scale, |
float page_scale_factor, |
float device_scale_factor) { |
layer->draw_properties().ideal_contents_scale = ideal_contents_scale; |
layer->draw_properties().maximum_animation_contents_scale = |
maximum_animation_contents_scale; |
+ layer->draw_properties().starting_animation_contents_scale = |
+ starting_animation_contents_scale; |
layer->draw_properties().page_scale_factor = page_scale_factor; |
layer->draw_properties().device_scale_factor = device_scale_factor; |
} |
@@ -1017,9 +1020,11 @@ static inline void CalculateAnimationContentsScale( |
const gfx::Transform& parent_transform, |
const gfx::Transform& combined_transform, |
bool* combined_is_animating_scale, |
- float* combined_maximum_animation_contents_scale) { |
+ float* combined_maximum_animation_contents_scale, |
+ float* combined_starting_animation_contents_scale) { |
*combined_is_animating_scale = false; |
*combined_maximum_animation_contents_scale = 0.f; |
+ *combined_starting_animation_contents_scale = 0.f; |
} |
static inline void CalculateAnimationContentsScale( |
@@ -1029,12 +1034,14 @@ static inline void CalculateAnimationContentsScale( |
const gfx::Transform& ancestor_transform, |
const gfx::Transform& combined_transform, |
bool* combined_is_animating_scale, |
- float* combined_maximum_animation_contents_scale) { |
+ float* combined_maximum_animation_contents_scale, |
+ float* combined_starting_animation_contents_scale) { |
if (ancestor_is_animating_scale && |
ancestor_maximum_animation_contents_scale == 0.f) { |
// We've already failed to compute a maximum animated scale at an |
// ancestor, so we'll continue to fail. |
*combined_maximum_animation_contents_scale = 0.f; |
+ *combined_starting_animation_contents_scale = 0.f; |
*combined_is_animating_scale = true; |
return; |
} |
@@ -1043,6 +1050,7 @@ static inline void CalculateAnimationContentsScale( |
// Computing maximum animated scale in the presence of |
// non-scale/translation transforms isn't supported. |
*combined_maximum_animation_contents_scale = 0.f; |
+ *combined_starting_animation_contents_scale = 0.f; |
*combined_is_animating_scale = true; |
return; |
} |
@@ -1056,6 +1064,7 @@ static inline void CalculateAnimationContentsScale( |
if (!layer_is_animating_scale && !ancestor_is_animating_scale) { |
*combined_maximum_animation_contents_scale = 0.f; |
+ *combined_starting_animation_contents_scale = 0.f; |
*combined_is_animating_scale = false; |
return; |
} |
@@ -1067,6 +1076,7 @@ static inline void CalculateAnimationContentsScale( |
// a scale of 100. |
if (layer_is_animating_scale && ancestor_is_animating_scale) { |
*combined_maximum_animation_contents_scale = 0.f; |
+ *combined_starting_animation_contents_scale = 0.f; |
*combined_is_animating_scale = true; |
return; |
} |
@@ -1080,20 +1090,32 @@ static inline void CalculateAnimationContentsScale( |
*combined_maximum_animation_contents_scale = |
ancestor_maximum_animation_contents_scale * |
std::max(layer_transform_scales.x(), layer_transform_scales.y()); |
+ *combined_starting_animation_contents_scale = |
+ *combined_maximum_animation_contents_scale; |
return; |
} |
float layer_maximum_animated_scale = 0.f; |
+ float layer_start_animated_scale = 0.f; |
if (!layer->layer_animation_controller()->MaximumTargetScale( |
&layer_maximum_animated_scale)) { |
*combined_maximum_animation_contents_scale = 0.f; |
return; |
} |
+ if (!layer->layer_animation_controller()->AnimationStartScale( |
+ &layer_start_animated_scale)) { |
+ *combined_starting_animation_contents_scale = 0.f; |
+ return; |
+ } |
+ |
gfx::Vector2dF ancestor_transform_scales = |
MathUtil::ComputeTransform2dScaleComponents(ancestor_transform, 0.f); |
- *combined_maximum_animation_contents_scale = |
- layer_maximum_animated_scale * |
+ float max_scale_xy = |
std::max(ancestor_transform_scales.x(), ancestor_transform_scales.y()); |
+ *combined_maximum_animation_contents_scale = |
+ layer_maximum_animated_scale * max_scale_xy; |
+ *combined_starting_animation_contents_scale = |
+ layer_start_animated_scale * max_scale_xy; |
} |
template <typename LayerTypePtr> |
@@ -1703,15 +1725,15 @@ static void CalculateDrawPropertiesInternal( |
bool combined_is_animating_scale = false; |
float combined_maximum_animation_contents_scale = 0.f; |
+ float combined_starting_animation_contents_scale = 0.f; |
if (globals.can_adjust_raster_scales) { |
CalculateAnimationContentsScale( |
- layer, |
- data_from_ancestor.ancestor_is_animating_scale, |
+ layer, data_from_ancestor.ancestor_is_animating_scale, |
data_from_ancestor.maximum_animation_contents_scale, |
- data_from_ancestor.parent_matrix, |
- combined_transform, |
+ data_from_ancestor.parent_matrix, combined_transform, |
&combined_is_animating_scale, |
- &combined_maximum_animation_contents_scale); |
+ &combined_maximum_animation_contents_scale, |
+ &combined_starting_animation_contents_scale); |
} |
data_for_children.ancestor_is_animating_scale = combined_is_animating_scale; |
data_for_children.maximum_animation_contents_scale = |
@@ -1743,9 +1765,8 @@ static void CalculateDrawPropertiesInternal( |
animating_transform_to_screen); |
UpdateLayerScaleDrawProperties( |
- layer, |
- ideal_contents_scale, |
- combined_maximum_animation_contents_scale, |
+ layer, ideal_contents_scale, combined_maximum_animation_contents_scale, |
+ combined_starting_animation_contents_scale, |
data_from_ancestor.in_subtree_of_page_scale_application_layer |
? globals.page_scale_factor |
: 1.f, |
@@ -1754,9 +1775,9 @@ static void CalculateDrawPropertiesInternal( |
LayerType* mask_layer = layer->mask_layer(); |
if (mask_layer) { |
UpdateLayerScaleDrawProperties( |
- mask_layer, |
- ideal_contents_scale, |
+ mask_layer, ideal_contents_scale, |
combined_maximum_animation_contents_scale, |
+ combined_starting_animation_contents_scale, |
data_from_ancestor.in_subtree_of_page_scale_application_layer |
? globals.page_scale_factor |
: 1.f, |
@@ -1767,9 +1788,9 @@ static void CalculateDrawPropertiesInternal( |
layer->replica_layer() ? layer->replica_layer()->mask_layer() : NULL; |
if (replica_mask_layer) { |
UpdateLayerScaleDrawProperties( |
- replica_mask_layer, |
- ideal_contents_scale, |
+ replica_mask_layer, ideal_contents_scale, |
combined_maximum_animation_contents_scale, |
+ combined_starting_animation_contents_scale, |
data_from_ancestor.in_subtree_of_page_scale_application_layer |
? globals.page_scale_factor |
: 1.f, |