Index: cc/trees/layer_tree_impl.cc |
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
index 46561da920d67ada5df4ccbb8314cf19304699e9..d851b2e8d78f0da4b72fb7fbf6036a437da7949c 100644 |
--- a/cc/trees/layer_tree_impl.cc |
+++ b/cc/trees/layer_tree_impl.cc |
@@ -292,6 +292,7 @@ void LayerTreeImpl::UpdatePropertyTreesForBoundsDelta() { |
DCHECK(IsActiveTree()); |
LayerImpl* inner_container = InnerViewportContainerLayer(); |
LayerImpl* outer_container = OuterViewportContainerLayer(); |
+ LayerImpl* inner_scroll = InnerViewportScrollLayer(); |
UpdateClipTreeForBoundsDeltaOnLayer(inner_container, |
&property_trees_.clip_tree); |
@@ -300,11 +301,15 @@ void LayerTreeImpl::UpdatePropertyTreesForBoundsDelta() { |
UpdateClipTreeForBoundsDeltaOnLayer(outer_container, |
&property_trees_.clip_tree); |
- TransformTree& transform_tree = property_trees_.transform_tree; |
if (inner_container) |
- transform_tree.SetInnerViewportBoundsDelta(inner_container->bounds_delta()); |
+ property_trees_.SetInnerViewportContainerBoundsDelta( |
+ inner_container->bounds_delta()); |
if (outer_container) |
- transform_tree.SetOuterViewportBoundsDelta(outer_container->bounds_delta()); |
+ property_trees_.SetOuterViewportContainerBoundsDelta( |
+ outer_container->bounds_delta()); |
+ if (inner_scroll) |
+ property_trees_.SetInnerViewportScrollBoundsDelta( |
+ inner_scroll->bounds_delta()); |
} |
void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
@@ -487,8 +492,16 @@ void LayerTreeImpl::UpdatePropertyTreeScrollingAndAnimationFromMainThread() { |
void LayerTreeImpl::SetPageScaleOnActiveTree(float active_page_scale) { |
DCHECK(IsActiveTree()); |
if (page_scale_factor()->SetCurrent( |
- ClampPageScaleFactorToLimits(active_page_scale))) |
+ ClampPageScaleFactorToLimits(active_page_scale))) { |
DidUpdatePageScale(); |
+ if (PageScaleLayer()) { |
+ UpdatePageScaleFactorInPropertyTrees( |
+ property_trees(), PageScaleLayer(), current_page_scale_factor(), |
+ device_scale_factor(), layer_tree_host_impl_->DrawTransform()); |
+ } else { |
+ DCHECK(!root_layer_ || active_page_scale == 1); |
+ } |
+ } |
} |
void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor, |
@@ -503,6 +516,10 @@ void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, |
float max_page_scale_factor) { |
DCHECK(page_scale_factor || IsActiveTree()); |
bool changed_page_scale = false; |
+ |
+ changed_page_scale |= |
+ SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); |
+ |
if (page_scale_factor) { |
DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); |
changed_page_scale |= page_scale_factor_->Delta() != 1.f; |
@@ -512,6 +529,7 @@ void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, |
changed_page_scale |= |
page_scale_factor_->PushFromMainThread(*page_scale_factor); |
} |
+ |
if (IsActiveTree()) { |
// TODO(enne): Pushing from pending to active should never require |
// DidUpdatePageScale. The values should already be set by the fully |
@@ -520,11 +538,18 @@ void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, |
changed_page_scale |= page_scale_factor_->PushPendingToActive(); |
} |
- changed_page_scale |= |
- SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); |
- |
if (changed_page_scale) |
DidUpdatePageScale(); |
+ |
+ if (page_scale_factor) { |
+ if (PageScaleLayer()) { |
+ UpdatePageScaleFactorInPropertyTrees( |
+ property_trees(), PageScaleLayer(), current_page_scale_factor(), |
+ device_scale_factor(), layer_tree_host_impl_->DrawTransform()); |
+ } else { |
+ DCHECK(!root_layer_ || *page_scale_factor == 1); |
+ } |
+ } |
} |
void LayerTreeImpl::set_top_controls_shrink_blink_size(bool shrink) { |