Commit 43debccc authored by Christopher Cameron's avatar Christopher Cameron Committed by Commit Bot

viz/mac: Add autoresize functionality

Add a mechanism for allowing an autoresize frame to resize the
renderer's surface.

When in auto-resize, make BrowserCompositorMac not update its size
based on the NSView size.

Bug: 805774
Change-Id: Ibc0b8b14ec7c1f4bdef30ac815d759f5894ab315
Reviewed-on: https://chromium-review.googlesource.com/892288
Commit-Queue: ccameron <ccameron@chromium.org>
Reviewed-by: default avatarFady Samuel <fsamuel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#533183}
parent c3d46ef6
......@@ -63,12 +63,20 @@ class CONTENT_EXPORT BrowserCompositorMac : public DelegatedFrameHostClient {
void OnDidNotProduceFrame(const viz::BeginFrameAck& ack);
void SetBackgroundColor(SkColor background_color);
void SetDisplayColorSpace(const gfx::ColorSpace& color_space);
void OnNSViewWasResized();
void UpdateVSyncParameters(const base::TimeTicks& timebase,
const base::TimeDelta& interval);
void SetNeedsBeginFrames(bool needs_begin_frames);
void SetWantsAnimateOnlyBeginFrames();
// Update the renderer's SurfaceId to reflect the current dimensions of the
// NSView. This will allocate a new SurfaceId if the dimensions have indeed
// changed.
void OnNSViewWasResized();
// Update the renderer's SurfaceId to reflect |size_dip| in anticipation of
// the NSView resizing during auto-resize.
void OnNSViewWillAutoResize(const gfx::Size& size_dip);
// This is used to ensure that the ui::Compositor be attached to the
// DelegatedFrameHost while the RWHImpl is visible.
// Note: This should be called before the RWHImpl is made visible and after
......@@ -187,7 +195,9 @@ class CONTENT_EXPORT BrowserCompositorMac : public DelegatedFrameHostClient {
nullptr;
// The surface for the delegated frame host, rendered into by the renderer
// process. Updated by OnNSViewWasResized.
// process.
void UpdateDelegatedFrameHostSurface(const gfx::Size& size_dip,
float scale_factor);
viz::LocalSurfaceId delegated_frame_host_surface_id_;
gfx::Size delegated_frame_host_size_pixels_;
gfx::Size delegated_frame_host_size_dip_;
......
......@@ -323,19 +323,27 @@ void BrowserCompositorMac::SetDisplayColorSpace(
}
void BrowserCompositorMac::OnNSViewWasResized() {
// Update the parameters we will send to the renderer via the
// DelgatedFrameHost.
gfx::Size dip_size;
gfx::Size size_dip;
float scale_factor = 1.f;
GetViewProperties(&dip_size, &scale_factor, nullptr);
if (dip_size == delegated_frame_host_size_dip_ &&
GetViewProperties(&size_dip, &scale_factor, nullptr);
UpdateDelegatedFrameHostSurface(size_dip, scale_factor);
}
void BrowserCompositorMac::OnNSViewWillAutoResize(const gfx::Size& size_dip) {
UpdateDelegatedFrameHostSurface(size_dip, delegated_frame_host_scale_factor_);
}
void BrowserCompositorMac::UpdateDelegatedFrameHostSurface(
const gfx::Size& size_dip,
float scale_factor) {
if (size_dip == delegated_frame_host_size_dip_ &&
scale_factor == delegated_frame_host_scale_factor_) {
return;
}
delegated_frame_host_surface_id_ =
parent_local_surface_id_allocator_.GenerateId();
delegated_frame_host_size_dip_ = dip_size;
delegated_frame_host_size_dip_ = size_dip;
delegated_frame_host_size_pixels_ = gfx::ConvertSizeToPixel(
delegated_frame_host_scale_factor_, delegated_frame_host_size_dip_);
delegated_frame_host_scale_factor_ = scale_factor;
......
......@@ -343,6 +343,8 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
bool ShouldContinueToPauseForFrame() override;
gfx::Rect GetBoundsInRootWindow() override;
void OnSynchronizedDisplayPropertiesChanged() override;
void ResizeDueToAutoResize(const gfx::Size& new_size,
uint64_t sequence_number) override;
void DidNavigate() override;
bool LockMouse() override;
......
......@@ -1092,6 +1092,12 @@ void RenderWidgetHostViewMac::OnSynchronizedDisplayPropertiesChanged() {
browser_compositor_->OnNSViewWasResized();
}
void RenderWidgetHostViewMac::ResizeDueToAutoResize(const gfx::Size& new_size,
uint64_t sequence_number) {
browser_compositor_->OnNSViewWillAutoResize(new_size);
RenderWidgetHostViewBase::ResizeDueToAutoResize(new_size, sequence_number);
}
void RenderWidgetHostViewMac::DidNavigate() {
browser_compositor_->DidNavigate();
}
......@@ -2838,6 +2844,11 @@ Class GetRenderWidgetHostViewCocoaClassForTesting() {
if (!renderWidgetHostView_->render_widget_host_)
return;
// During auto-resize it is the responsibility of the caller to ensure that
// the NSView and RenderWidgetHostImpl are kept in sync.
if (renderWidgetHostView_->render_widget_host_->auto_resize_enabled())
return;
if (renderWidgetHostView_->render_widget_host_->delegate())
renderWidgetHostView_->render_widget_host_->delegate()->SendScreenRects();
else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment