| 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 3e70aeb38d24ba19239123b16c3b32a16d3cacfd..e12e272653ab7fa2ed335c41ed084711a0da16c0 100644
 | 
| --- a/cc/trees/layer_tree_host_common.cc
 | 
| +++ b/cc/trees/layer_tree_host_common.cc
 | 
| @@ -1831,14 +1831,6 @@ static void CalculateDrawPropertiesInternal(
 | 
|    data_for_children.full_hierarchy_matrix =
 | 
|        data_from_ancestor.full_hierarchy_matrix;
 | 
|  
 | 
| -  // If the subtree will scale layer contents by the transform hierarchy, then
 | 
| -  // we should scale things into the render surface by the transform hierarchy
 | 
| -  // to take advantage of that.
 | 
| -  gfx::Vector2dF render_surface_sublayer_scale =
 | 
| -      globals.can_adjust_raster_scales
 | 
| -      ? combined_transform_scales
 | 
| -      : gfx::Vector2dF(layer_scale_factors, layer_scale_factors);
 | 
| -
 | 
|    bool render_to_separate_surface =
 | 
|        IsRootLayer(layer) ||
 | 
|        (globals.can_render_to_separate_surface && layer->render_surface());
 | 
| @@ -1873,17 +1865,19 @@ static void CalculateDrawPropertiesInternal(
 | 
|        // space which we do not want; so here we use the combined_transform
 | 
|        // instead of the draw_transform. However, we do need to add a different
 | 
|        // scale factor that accounts for the surface's pixel dimensions.
 | 
| -      combined_transform.Scale(1.0 / render_surface_sublayer_scale.x(),
 | 
| -                               1.0 / render_surface_sublayer_scale.y());
 | 
| -      render_surface->SetDrawTransform(combined_transform);
 | 
| +      // Remove the combined_transform scale from the draw transform.
 | 
| +      gfx::Transform draw_transform = combined_transform;
 | 
| +      draw_transform.Scale(1.0 / combined_transform_scales.x(),
 | 
| +                           1.0 / combined_transform_scales.y());
 | 
| +      render_surface->SetDrawTransform(draw_transform);
 | 
|  
 | 
|        // The owning layer's transform was re-parented by the surface, so the
 | 
|        // layer's new draw_transform only needs to scale the layer to surface
 | 
|        // space.
 | 
|        layer_draw_properties.target_space_transform.MakeIdentity();
 | 
| -      layer_draw_properties.target_space_transform.
 | 
| -          Scale(render_surface_sublayer_scale.x() / layer->contents_scale_x(),
 | 
| -                render_surface_sublayer_scale.y() / layer->contents_scale_y());
 | 
| +      layer_draw_properties.target_space_transform.Scale(
 | 
| +          combined_transform_scales.x() / layer->contents_scale_x(),
 | 
| +          combined_transform_scales.y() / layer->contents_scale_y());
 | 
|  
 | 
|        // Inside the surface's subtree, we scale everything to the owning layer's
 | 
|        // scale.  The sublayer matrix transforms layer rects into target surface
 | 
| @@ -1892,8 +1886,8 @@ static void CalculateDrawPropertiesInternal(
 | 
|        // but we apply it explicitly to the owning layer and the remainder of the
 | 
|        // subtree independently.
 | 
|        DCHECK(data_for_children.parent_matrix.IsIdentity());
 | 
| -      data_for_children.parent_matrix.Scale(render_surface_sublayer_scale.x(),
 | 
| -                            render_surface_sublayer_scale.y());
 | 
| +      data_for_children.parent_matrix.Scale(combined_transform_scales.x(),
 | 
| +                                            combined_transform_scales.y());
 | 
|  
 | 
|        // Even if the |layer_is_drawn|, it only contributes to a drawn surface
 | 
|        // when the |layer_is_visible|.
 | 
| @@ -2311,14 +2305,14 @@ static void CalculateDrawPropertiesInternal(
 | 
|      // surface's subtree into layer space.
 | 
|      gfx::Transform screen_space_transform = layer->screen_space_transform();
 | 
|      screen_space_transform.Scale(
 | 
| -        layer->contents_scale_x() / render_surface_sublayer_scale.x(),
 | 
| -        layer->contents_scale_y() / render_surface_sublayer_scale.y());
 | 
| +        layer->contents_scale_x() / combined_transform_scales.x(),
 | 
| +        layer->contents_scale_y() / combined_transform_scales.y());
 | 
|      render_surface->SetScreenSpaceTransform(screen_space_transform);
 | 
|  
 | 
|      if (layer->replica_layer()) {
 | 
|        gfx::Transform surface_origin_to_replica_origin_transform;
 | 
|        surface_origin_to_replica_origin_transform.Scale(
 | 
| -          render_surface_sublayer_scale.x(), render_surface_sublayer_scale.y());
 | 
| +          combined_transform_scales.x(), combined_transform_scales.y());
 | 
|        surface_origin_to_replica_origin_transform.Translate(
 | 
|            layer->replica_layer()->position().x() +
 | 
|                layer->replica_layer()->transform_origin().x(),
 | 
| @@ -2330,8 +2324,8 @@ static void CalculateDrawPropertiesInternal(
 | 
|            -layer->replica_layer()->transform_origin().x(),
 | 
|            -layer->replica_layer()->transform_origin().y());
 | 
|        surface_origin_to_replica_origin_transform.Scale(
 | 
| -          1.0 / render_surface_sublayer_scale.x(),
 | 
| -          1.0 / render_surface_sublayer_scale.y());
 | 
| +          1.0 / combined_transform_scales.x(),
 | 
| +          1.0 / combined_transform_scales.y());
 | 
|  
 | 
|        // Compute the replica's "originTransform" that maps from the replica's
 | 
|        // origin space to the target surface origin space.
 | 
| 
 |