Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 311253004: Invert DSF to map from delegated frame to layer space (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: scale android layer up, remove cc::DRL::SetDisplaySize Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 =

Powered by Google App Engine
This is Rietveld 408576698