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

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

Issue 15666007: Use correct device scale factors in Aura (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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_aura.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 0da585350faa3e1e3fd09dbd9c5df1c4a8cde9d5..ad8ba8188220cb1f1f54f3bbab447cf54fa0c0b9 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -632,6 +632,7 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host)
text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
can_compose_inline_(true),
has_composition_text_(false),
+ last_swapped_surface_scale_factor_(1.f),
paint_canvas_(NULL),
synthetic_move_sent_(false),
accelerated_compositing_state_changed_(false),
@@ -1195,7 +1196,9 @@ void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHelper(
gfx::Rect src_subrect_in_gl = src_subrect;
src_subrect_in_gl.set_y(GetViewBounds().height() - src_subrect.bottom());
- gfx::Rect src_subrect_in_pixel = ConvertRectToPixel(this, src_subrect_in_gl);
+ gfx::Rect src_subrect_in_pixel =
+ ConvertRectToPixel(current_surface_->device_scale_factor(),
+ src_subrect_in_gl);
gl_helper->CropScaleReadbackAndCleanTexture(
current_surface_->PrepareTexture(),
current_surface_->size(),
@@ -1316,11 +1319,13 @@ void RenderWidgetHostViewAura::UpdateExternalTexture() {
bool is_compositing_active = host_->is_accelerated_compositing_active();
if (is_compositing_active && current_surface_) {
window_->SetExternalTexture(current_surface_.get());
- current_frame_size_ = ConvertSizeToDIP(this, current_surface_->size());
+ current_frame_size_ = ConvertSizeToDIP(
+ current_surface_->device_scale_factor(), current_surface_->size());
CheckResizeLock();
} else if (is_compositing_active && current_dib_) {
window_->SetExternalTexture(NULL);
- current_frame_size_ = ConvertSizeToDIP(this, last_swapped_surface_size_);
+ current_frame_size_ = ConvertSizeToDIP(last_swapped_surface_scale_factor_,
+ last_swapped_surface_size_);
CheckResizeLock();
} else {
window_->SetExternalTexture(NULL);
@@ -1331,6 +1336,7 @@ void RenderWidgetHostViewAura::UpdateExternalTexture() {
bool RenderWidgetHostViewAura::SwapBuffersPrepare(
const gfx::Rect& surface_rect,
+ float surface_scale_factor,
const gfx::Rect& damage_rect,
const std::string& mailbox_name,
const BufferPresentedCallback& ack_callback) {
@@ -1340,9 +1346,11 @@ bool RenderWidgetHostViewAura::SwapBuffersPrepare(
DLOG_IF(ERROR, damage_rect != surface_rect) << "Expected full damage rect";
skipped_damage_.setEmpty();
last_swapped_surface_size_ = surface_rect.size();
+ last_swapped_surface_scale_factor_ = surface_scale_factor;
}
- if (ShouldSkipFrame(ConvertSizeToDIP(this, surface_rect.size())) ||
+ if (ShouldSkipFrame(ConvertSizeToDIP(surface_scale_factor,
+ surface_rect.size())) ||
mailbox_name.empty()) {
skipped_damage_.op(RectToSkIRect(damage_rect), SkRegion::kUnion_Op);
ack_callback.Run(true, scoped_refptr<ui::Texture>());
@@ -1351,7 +1359,7 @@ bool RenderWidgetHostViewAura::SwapBuffersPrepare(
ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
current_surface_ =
- factory->CreateTransportClient(current_device_scale_factor_);
+ factory->CreateTransportClient(surface_scale_factor);
if (!current_surface_) {
LOG(ERROR) << "Failed to create ImageTransport texture";
ack_callback.Run(true, scoped_refptr<ui::Texture>());
@@ -1377,7 +1385,8 @@ void RenderWidgetHostViewAura::SwapBuffersCompleted(
if (frame_subscriber()->ShouldCaptureFrame(present_time,
&frame, &callback)) {
CopyFromCompositingSurfaceToVideoFrame(
- gfx::Rect(ConvertSizeToDIP(this, current_surface_->size())),
+ gfx::Rect(ConvertSizeToDIP(current_surface_->device_scale_factor(),
+ current_surface_->size())),
frame,
base::Bind(callback, present_time));
}
@@ -1429,7 +1438,8 @@ void RenderWidgetHostViewAura::AcceleratedSurfaceBuffersSwapped(
gpu_host_id,
params_in_pixel.mailbox_name);
BuffersSwapped(
- params_in_pixel.size, params_in_pixel.mailbox_name, ack_callback);
+ params_in_pixel.size, params_in_pixel.scale_factor,
+ params_in_pixel.mailbox_name, ack_callback);
}
void RenderWidgetHostViewAura::SwapDelegatedFrame(
@@ -1497,6 +1507,7 @@ void RenderWidgetHostViewAura::SwapSoftwareFrame(
current_dib_.reset(dib.release());
current_dib_id_ = dib_id;
last_swapped_surface_size_ = frame_size;
+ last_swapped_surface_scale_factor_ = frame_device_scale_factor;
ui::Compositor* compositor = GetCompositor();
if (!compositor) {
@@ -1519,7 +1530,8 @@ void RenderWidgetHostViewAura::SwapSoftwareFrame(
CheckResizeLock();
released_front_lock_ = NULL;
window_->SetExternalTexture(NULL);
- window_->SchedulePaintInRect(ConvertRectToDIP(this, damage_rect));
+ window_->SchedulePaintInRect(
+ ConvertRectToDIP(frame_device_scale_factor, damage_rect));
ccameron 2013/05/23 23:49:28 This looks to be an unrelated bug, but came up in
piman 2013/05/24 01:03:41 good catch.
if (paint_observer_)
paint_observer_->OnUpdateCompositorContent();
@@ -1568,17 +1580,19 @@ void RenderWidgetHostViewAura::OnSwapCompositorFrame(
reinterpret_cast<const char*>(frame->gl_frame_data->mailbox.name),
sizeof(frame->gl_frame_data->mailbox.name));
BuffersSwapped(
- frame->gl_frame_data->size, mailbox_name, ack_callback);
+ frame->gl_frame_data->size, frame->metadata.device_scale_factor,
+ mailbox_name, ack_callback);
}
void RenderWidgetHostViewAura::BuffersSwapped(
const gfx::Size& size,
+ float surface_scale_factor,
const std::string& mailbox_name,
const BufferPresentedCallback& ack_callback) {
scoped_refptr<ui::Texture> texture_to_return(current_surface_);
const gfx::Rect surface_rect = gfx::Rect(size);
- if (!SwapBuffersPrepare(
- surface_rect, surface_rect, mailbox_name, ack_callback)) {
+ if (!SwapBuffersPrepare(surface_rect, surface_scale_factor, surface_rect,
+ mailbox_name, ack_callback)) {
return;
}
@@ -1587,7 +1601,7 @@ void RenderWidgetHostViewAura::BuffersSwapped(
ui::Compositor* compositor = GetCompositor();
if (compositor) {
- gfx::Size surface_size = ConvertSizeToDIP(this, size);
+ gfx::Size surface_size = ConvertSizeToDIP(surface_scale_factor, size);
window_->SchedulePaintInRect(gfx::Rect(surface_size));
}
@@ -1612,7 +1626,8 @@ void RenderWidgetHostViewAura::AcceleratedSurfacePostSubBuffer(
params_in_pixel.mailbox_name);
if (!SwapBuffersPrepare(
- surface_rect, damage_rect, params_in_pixel.mailbox_name, ack_callback)) {
+ surface_rect, params_in_pixel.surface_scale_factor, damage_rect,
+ params_in_pixel.mailbox_name, ack_callback)) {
return;
}
@@ -1646,12 +1661,13 @@ void RenderWidgetHostViewAura::AcceleratedSurfacePostSubBuffer(
if (compositor) {
// Co-ordinates come in OpenGL co-ordinate space.
// We need to convert to layer space.
- gfx::Rect rect_to_paint = ConvertRectToDIP(this, gfx::Rect(
- params_in_pixel.x,
- surface_size_in_pixel.height() - params_in_pixel.y -
- params_in_pixel.height,
- params_in_pixel.width,
- params_in_pixel.height));
+ gfx::Rect rect_to_paint = ConvertRectToDIP(
+ params_in_pixel.surface_scale_factor,
+ gfx::Rect(params_in_pixel.x,
+ surface_size_in_pixel.height() - params_in_pixel.y -
+ params_in_pixel.height,
+ params_in_pixel.width,
+ params_in_pixel.height));
// Damage may not have been DIP aligned, so inflate damage to compensate
// for any round-off error.
@@ -2228,7 +2244,8 @@ scoped_refptr<ui::Texture> RenderWidgetHostViewAura::CopyTexture() {
return scoped_refptr<ui::Texture>(
factory->CreateOwnedTexture(
- current_surface_->size(), current_device_scale_factor_, texture_id));
+ current_surface_->size(),
+ current_surface_->device_scale_factor(), texture_id));
}
////////////////////////////////////////////////////////////////////////////////

Powered by Google App Engine
This is Rietveld 408576698