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

Unified Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 171513012: Make --disable-gpu-vsync work with CoreAnimation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add swap ack scoped runner fix Created 6 years, 10 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_mac.mm
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 31f286e09372f2c20fd145b6ebd70d120144e127..f241c8ff5d9d79cde15e555c18374e1cbc10b36f 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1331,6 +1331,12 @@ void RenderWidgetHostViewMac::CompositorSwapBuffers(
const gfx::Size& size,
float surface_scale_factor,
const std::vector<ui::LatencyInfo>& latency_info) {
+ // Ensure that the frame be acked unless it is explicitly passed to a
+ // display function.
+ base::ScopedClosureRunner scoped_ack(
+ base::Bind(&RenderWidgetHostViewMac::SendPendingSwapAck,
+ weak_factory_.GetWeakPtr()));
+
if (render_widget_host_->is_hidden())
return;
@@ -1354,7 +1360,6 @@ void RenderWidgetHostViewMac::CompositorSwapBuffers(
compositing_iosurface_->CopyToVideoFrame(
gfx::Rect(size), frame,
base::Bind(callback, present_time));
- SendPendingSwapAck();
return;
}
}
@@ -1440,6 +1445,7 @@ void RenderWidgetHostViewMac::CompositorSwapBuffers(
// No need to draw the surface if we are inside a drawRect. It will be done
// later.
if (!about_to_validate_and_paint_) {
+ scoped_ack.Reset();
if (use_core_animation_) {
DCHECK(compositing_iosurface_layer_);
compositing_iosurface_layer_async_timer_.Reset();
@@ -1696,9 +1702,6 @@ void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped(
params.size,
params.scale_factor,
params.latency_info);
- // TODO(ccameron): This ack should not be needed, and will inappropriately
- // remove GPU back-pressure. Remove this.
- SendPendingSwapAck();
}
void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer(
@@ -1716,9 +1719,6 @@ void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer(
params.surface_size,
params.surface_scale_factor,
params.latency_info);
- // TODO(ccameron): This ack should not be needed, and will inappropriately
- // remove GPU back-pressure. Remove this.
- SendPendingSwapAck();
}
void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() {
@@ -1891,6 +1891,7 @@ void RenderWidgetHostViewMac::GotAcceleratedFrame() {
base::TimeTicks timebase;
base::TimeDelta interval;
if (compositing_iosurface_context_ &&
+ compositing_iosurface_context_->display_link() &&
compositing_iosurface_context_->display_link()->GetVSyncParameters(
&timebase, &interval)) {
render_widget_host_->UpdateVSyncParameters(timebase, interval);
@@ -2094,10 +2095,6 @@ void RenderWidgetHostViewMac::AddPendingSwapAck(
// loss. Drop the old acks.
pending_swap_ack_.reset(new PendingSwapAck(
route_id, gpu_host_id, renderer_id));
- // Ack this immediately if we're already inside a paint call, or if we're
- // hidden and this may not paint for a long time.
- if (about_to_validate_and_paint_ || render_widget_host_->is_hidden())
- SendPendingSwapAck();
}
void RenderWidgetHostViewMac::SendPendingSwapAck() {

Powered by Google App Engine
This is Rietveld 408576698