| Index: content/browser/renderer_host/render_widget_host_view_android.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| index e2ececadbd97ea0e98fa001a351ae3b9979dde93..1cc054cc632693c0d825b8ca3d4b0a683cbd5a78 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| @@ -688,11 +688,13 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
|
| DCHECK(frame_provider_);
|
| scoped_refptr<cc::DelegatedRendererLayer> delegated_layer =
|
| cc::DelegatedRendererLayer::Create(frame_provider_);
|
| - delegated_layer->SetDisplaySize(texture_size_in_layer_);
|
| delegated_layer->SetBounds(content_size_in_layer_);
|
| delegated_layer->SetHideLayerAndSubtree(true);
|
| delegated_layer->SetIsDrawable(true);
|
| delegated_layer->SetContentsOpaque(true);
|
| + gfx::Transform layer_scale(
|
| + device_scale_factor, 0.f, 0.f, device_scale_factor, 0.f, 0.f);
|
| + delegated_layer->SetTransform(layer_scale);
|
| compositor->AttachLayerForReadback(delegated_layer);
|
|
|
| readback_layer = delegated_layer;
|
| @@ -812,11 +814,23 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
|
| }
|
|
|
| if (layer_.get()) {
|
| - layer_->SetDisplaySize(texture_size_in_layer_);
|
| layer_->SetIsDrawable(true);
|
| layer_->SetContentsOpaque(true);
|
| layer_->SetBounds(content_size_in_layer_);
|
| layer_->SetNeedsDisplay();
|
| + // DelegatedRendererLayer scales the frame data from physical space to DIPs
|
| + // by inverting the frame's device scale factor, assuming that the browser
|
| + // compositor will map from DIPs back to physical pixels using its own
|
| + // device scale factor. However, the Android browser compositor always uses
|
| + // a device scale factor of 1.0, so we have to transform the delegated
|
| + // layer by the device scale to get it into the same physical pixel space as
|
| + // the rest of the UI.
|
| + const gfx::Display& display =
|
| + gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
|
| + float device_scale_factor = display.device_scale_factor();
|
| + gfx::Transform layer_scale(
|
| + device_scale_factor, 0.f, 0.f, device_scale_factor, 0.f, 0.f);
|
| + layer_->SetTransform(layer_scale);
|
| }
|
|
|
| base::Closure ack_callback =
|
|
|