| Index: cc/trees/property_tree_builder.cc | 
| diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc | 
| index 2ad73f16529b919037f8de37bb3761280031b17b..8d3f4ef189d58e50bcfa112fa2dfc9b1950eda07 100644 | 
| --- a/cc/trees/property_tree_builder.cc | 
| +++ b/cc/trees/property_tree_builder.cc | 
| @@ -630,12 +630,10 @@ bool AddTransformNodeIfNeeded( | 
| } | 
|  | 
| float post_local_scale_factor = 1.0f; | 
| -  if (is_root) | 
| -    post_local_scale_factor = | 
| -        data_for_children->property_trees->transform_tree.device_scale_factor(); | 
|  | 
| if (is_page_scale_layer) { | 
| -    post_local_scale_factor *= data_from_ancestor.page_scale_factor; | 
| +    if (!is_root) | 
| +      post_local_scale_factor *= data_from_ancestor.page_scale_factor; | 
| data_for_children->property_trees->transform_tree.set_page_scale_factor( | 
| data_from_ancestor.page_scale_factor); | 
| } | 
| @@ -646,10 +644,14 @@ bool AddTransformNodeIfNeeded( | 
| node->source_node_id = source_index; | 
| node->post_local_scale_factor = post_local_scale_factor; | 
| if (is_root) { | 
| -    data_for_children->property_trees->transform_tree.SetDeviceTransform( | 
| -        *data_from_ancestor.device_transform, layer->position()); | 
| +    float page_scale_factor_for_root = | 
| +        is_page_scale_layer ? data_from_ancestor.page_scale_factor : 1.f; | 
| data_for_children->property_trees->transform_tree | 
| -        .SetDeviceTransformScaleFactor(*data_from_ancestor.device_transform); | 
| +        .SetRootTransformsAndScales(data_for_children->property_trees | 
| +                                        ->transform_tree.device_scale_factor(), | 
| +                                    page_scale_factor_for_root, | 
| +                                    *data_from_ancestor.device_transform, | 
| +                                    layer->position()); | 
| } else { | 
| node->source_offset = source_offset; | 
| node->update_post_local_transform(layer->position(), | 
| @@ -1346,8 +1348,11 @@ void BuildPropertyTreesTopLevelInternal( | 
| draw_property_utils::UpdateElasticOverscroll( | 
| property_trees, overscroll_elasticity_layer, elastic_overscroll); | 
| property_trees->clip_tree.SetViewportClip(gfx::RectF(viewport)); | 
| -    property_trees->transform_tree.SetDeviceTransform(device_transform, | 
| -                                                      root_layer->position()); | 
| +    float page_scale_factor_for_root = | 
| +        page_scale_layer == root_layer ? page_scale_factor : 1.f; | 
| +    property_trees->transform_tree.SetRootTransformsAndScales( | 
| +        device_scale_factor, page_scale_factor_for_root, device_transform, | 
| +        root_layer->position()); | 
| return; | 
| } | 
|  | 
| @@ -1391,6 +1396,7 @@ void BuildPropertyTreesTopLevelInternal( | 
| root_clip.applies_local_clip = true; | 
| root_clip.clip = gfx::RectF(viewport); | 
| root_clip.transform_id = kRootPropertyTreeNodeId; | 
| +  root_clip.target_transform_id = kRootPropertyTreeNodeId; | 
| data_for_recursion.clip_tree_parent = | 
| data_for_recursion.property_trees->clip_tree.Insert( | 
| root_clip, kRootPropertyTreeNodeId); | 
|  |