diff options
author | ccameron@chromium.org <ccameron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-15 06:36:21 +0000 |
---|---|---|
committer | ccameron@chromium.org <ccameron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-15 06:36:21 +0000 |
commit | 9f1576fecbe122e524cb3735f99c3fc3a1c1788d (patch) | |
tree | da2b622d8ac574aa8160738f95be88826126bb95 | |
parent | 5c20eadfe8d8e278c9483b7e37be14d893655472 (diff) | |
download | chromium_src-9f1576fecbe122e524cb3735f99c3fc3a1c1788d.zip chromium_src-9f1576fecbe122e524cb3735f99c3fc3a1c1788d.tar.gz chromium_src-9f1576fecbe122e524cb3735f99c3fc3a1c1788d.tar.bz2 |
Allow software and delegated swaps to come in while waiting for resize
Also clean up the resize logic for the delegated renderer on Mac, now
that the ui::Compositor components have been cleaned up.
BUG=314190
Review URL: https://codereview.chromium.org/282063002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@270596 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 19 insertions, 13 deletions
diff --git a/content/browser/renderer_host/dip_util.cc b/content/browser/renderer_host/dip_util.cc index f855abf..a41c4d1 100644 --- a/content/browser/renderer_host/dip_util.cc +++ b/content/browser/renderer_host/dip_util.cc @@ -35,13 +35,12 @@ gfx::Point ConvertViewPointToDIP(const RenderWidgetHostView* view, gfx::Size ConvertViewSizeToPixel(const RenderWidgetHostView* view, const gfx::Size& size_in_dip) { - return gfx::ToFlooredSize( - gfx::ScaleSize(size_in_dip, GetScaleForView(view))); + return ConvertSizeToPixel(GetScaleForView(view), size_in_dip); } gfx::Rect ConvertViewRectToPixel(const RenderWidgetHostView* view, const gfx::Rect& rect_in_dip) { - return ConvertRectToPixel(GetScaleForView(view), rect_in_dip); + return ConvertRectToPixel(GetScaleForView(view), rect_in_dip); } gfx::Size ConvertSizeToDIP(float scale_factor, @@ -56,6 +55,10 @@ gfx::Rect ConvertRectToDIP(float scale_factor, gfx::ScaleRect(rect_in_pixel, 1.0f / scale_factor)); } +gfx::Size ConvertSizeToPixel(float scale_factor, + const gfx::Size& size_in_dip) { + return gfx::ToFlooredSize(gfx::ScaleSize(size_in_dip, scale_factor)); +} gfx::Rect ConvertRectToPixel(float scale_factor, const gfx::Rect& rect_in_dip) { diff --git a/content/browser/renderer_host/dip_util.h b/content/browser/renderer_host/dip_util.h index a7e1876..82c9772 100644 --- a/content/browser/renderer_host/dip_util.h +++ b/content/browser/renderer_host/dip_util.h @@ -35,6 +35,8 @@ CONTENT_EXPORT gfx::Size ConvertSizeToDIP( float scale_factor, const gfx::Size& size_in_pixel); CONTENT_EXPORT gfx::Rect ConvertRectToDIP( float scale_factor, const gfx::Rect& rect_in_pixel); +CONTENT_EXPORT gfx::Size ConvertSizeToPixel( + float scale_factor, const gfx::Size& size_in_pixel); CONTENT_EXPORT gfx::Rect ConvertRectToPixel( float scale_factor, const gfx::Rect& rect_in_dip); diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc index 3895081..11f80ee 100644 --- a/content/browser/renderer_host/render_message_filter.cc +++ b/content/browser/renderer_host/render_message_filter.cc @@ -433,6 +433,8 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message, IPC_MESSAGE_HANDLER(ViewHostMsg_OpenChannelToPpapiBroker, OnOpenChannelToPpapiBroker) #endif + IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_SwapCompositorFrame, + render_widget_helper_->DidReceiveBackingStoreMsg(message)) IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_UpdateRect, render_widget_helper_->DidReceiveBackingStoreMsg(message)) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_CheckPermission, diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm index a2893ee..bfe9071 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm @@ -1913,17 +1913,16 @@ void RenderWidgetHostViewMac::OnSwapCompositorFrame( frame->delegated_frame_data.Pass(), frame->metadata.device_scale_factor, frame->metadata.latency_info); - gfx::Size size = ToCeiledSize(frame->metadata.viewport_size); - float scale_factor = frame->metadata.device_scale_factor; - if (compositor_->size() != size || - compositor_->device_scale_factor() != scale_factor) { - // TODO(ccameron): The scale factor here does not result in the - // composited frame that is received having the right scale factor. Fix - // this. - compositor_->SetScaleAndSize(scale_factor, size); - root_layer_->SetBounds(gfx::Rect(size)); - } compositor_->SetRootLayer(root_layer_.get()); + + // Update the compositor and root layer size and scale factor to match + // the frame just received. + float scale_factor = frame->metadata.device_scale_factor; + gfx::Size dip_size = ToCeiledSize(frame->metadata.viewport_size); + gfx::Size pixel_size = ConvertSizeToPixel( + scale_factor, dip_size); + compositor_->SetScaleAndSize(scale_factor, pixel_size); + root_layer_->SetBounds(gfx::Rect(dip_size)); } else if (frame->software_frame_data) { if (!software_frame_manager_->SwapToNewFrame( output_surface_id, |