Surface synchronization: Plumb ScreenInfo changes with Auto-Resize changes
Prior to this CL, if an auto-resized window is moved from one display to another
then it will continue to display device scale factor corresponding to the first
display. This happens because when Auto-Resize mode is enabled, RenderWidgetHostImpl::WasResized
is short circuited and the latest ScreenInfo is not propagated to the renderer.
This CL addresses this issue. ViewHostMsg_SetLocalSurfaceIdForAutoResize now includes the latest
ScreenInfo. The latest min and max size are also included because they might be impacted
by device scale factor changes.
Bug: 672962
Change-Id: I973181bb285713f43eeec4032d9ec87d142f1c46
Reviewed-on: https://chromium-review.googlesource.com/756860
Reviewed-by: Ken Buchanan <[email protected]>
Reviewed-by: Antoine Labour <[email protected]>
Commit-Queue: Fady Samuel <[email protected]>
Cr-Commit-Position: refs/heads/master@{#514960}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 9b6b9a5..6cb9a96 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -604,6 +604,30 @@
}
#endif
+void RenderWidget::SetLocalSurfaceIdForAutoResize(
+ uint64_t sequence_number,
+ const content::ScreenInfo& screen_info,
+ const viz::LocalSurfaceId& local_surface_id) {
+ bool screen_info_changed = screen_info_ != screen_info;
+
+ screen_info_ = screen_info;
+ if (device_scale_factor_ != screen_info_.device_scale_factor) {
+ device_scale_factor_ = screen_info_.device_scale_factor;
+ OnDeviceScaleFactorChanged();
+ }
+
+ if (screen_info_changed) {
+ for (auto& observer : render_frame_proxies_)
+ observer.OnScreenInfoChanged(screen_info);
+
+ // Notify all BrowserPlugins of the updated ScreenInfo.
+ if (BrowserPluginManager::Get())
+ BrowserPluginManager::Get()->ScreenInfoChanged(screen_info);
+ }
+
+ AutoResizeCompositor(local_surface_id);
+}
+
void RenderWidget::OnShowHostContextMenu(ContextMenuParams* params) {
if (screen_metrics_emulator_)
screen_metrics_emulator_->OnShowContextMenu(params);
@@ -768,10 +792,15 @@
void RenderWidget::OnSetLocalSurfaceIdForAutoResize(
uint64_t sequence_number,
+ const gfx::Size& min_size,
+ const gfx::Size& max_size,
+ const content::ScreenInfo& screen_info,
const viz::LocalSurfaceId& local_surface_id) {
if (!auto_resize_mode_ || resize_or_repaint_ack_num_ != sequence_number)
return;
- AutoResizeCompositor(local_surface_id);
+
+ SetLocalSurfaceIdForAutoResize(sequence_number, screen_info,
+ local_surface_id);
}
void RenderWidget::OnEnableDeviceEmulation(