Index: content/browser/renderer_host/render_widget_host_view_android.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc |
index 318584e90469b20fb2afdfe7d6e68fbc543036fd..76affb9aa21cdf1e2ed9d418ab125deb2f07ac72 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -778,6 +778,7 @@ |
} |
void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames(bool enabled) { |
+ DCHECK(using_browser_compositor_); |
TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames", |
"enabled", enabled); |
if (enabled) |
@@ -1530,6 +1531,10 @@ |
} |
void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { |
+ // The synchronous compositor does not requre BeginFrame messages. |
+ if (!using_browser_compositor_) |
+ requests &= FLUSH_INPUT; |
+ |
bool should_request_vsync = !outstanding_vsync_requests_ && requests; |
outstanding_vsync_requests_ |= requests; |
@@ -1577,28 +1582,15 @@ |
base::TimeDelta vsync_period) { |
TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::SendBeginFrame", |
"frame_time_us", frame_time.ToInternalValue()); |
- |
- if (using_browser_compositor_) { |
- base::TimeTicks display_time = frame_time + vsync_period; |
- |
- base::TimeTicks deadline = |
- display_time - host_->GetEstimatedBrowserCompositeTime(); |
- |
- host_->Send(new ViewMsg_BeginFrame( |
- host_->GetRoutingID(), |
- cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
- vsync_period, cc::BeginFrameArgs::NORMAL))); |
- } else { |
- SynchronousCompositorImpl* compositor = SynchronousCompositorImpl::FromID( |
- host_->GetProcess()->GetID(), host_->GetRoutingID()); |
- if (compositor) { |
- // The synchronous compositor synchronously does it's work in this call. |
- // It does not use a deadline. |
- compositor->BeginFrame(cc::BeginFrameArgs::Create( |
- BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks(), vsync_period, |
- cc::BeginFrameArgs::NORMAL)); |
- } |
- } |
+ base::TimeTicks display_time = frame_time + vsync_period; |
+ |
+ base::TimeTicks deadline = |
+ display_time - host_->GetEstimatedBrowserCompositeTime(); |
+ |
+ host_->Send(new ViewMsg_BeginFrame( |
+ host_->GetRoutingID(), |
+ cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
+ vsync_period, cc::BeginFrameArgs::NORMAL))); |
} |
bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
@@ -1933,22 +1925,19 @@ |
if (!host_ || host_->is_hidden()) |
return; |
- if (outstanding_vsync_requests_ & FLUSH_INPUT) { |
- outstanding_vsync_requests_ &= ~FLUSH_INPUT; |
+ const uint32 current_vsync_requests = outstanding_vsync_requests_; |
+ outstanding_vsync_requests_ = 0; |
+ |
+ if (current_vsync_requests & FLUSH_INPUT) |
host_->FlushInput(); |
- } |
- |
- if (outstanding_vsync_requests_ & BEGIN_FRAME || |
- outstanding_vsync_requests_ & PERSISTENT_BEGIN_FRAME) { |
- outstanding_vsync_requests_ &= ~BEGIN_FRAME; |
+ |
+ if (current_vsync_requests & BEGIN_FRAME || |
+ current_vsync_requests & PERSISTENT_BEGIN_FRAME) { |
SendBeginFrame(frame_time, vsync_period); |
} |
- // This allows for SendBeginFrame and FlushInput to modify |
- // outstanding_vsync_requests. |
- uint32 outstanding_vsync_requests = outstanding_vsync_requests_; |
- outstanding_vsync_requests_ = 0; |
- RequestVSyncUpdate(outstanding_vsync_requests); |
+ if (current_vsync_requests & PERSISTENT_BEGIN_FRAME) |
+ RequestVSyncUpdate(PERSISTENT_BEGIN_FRAME); |
} |
void RenderWidgetHostViewAndroid::OnAnimate(base::TimeTicks begin_frame_time) { |