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

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 817603002: cc: Make scheduling be driven by vsync for android webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Do not reset active_tree_needs_first_draw_ Created 5 years, 9 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_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 76affb9aa21cdf1e2ed9d418ab125deb2f07ac72..6534fe653eed04b8ee26627b869721eb833d6f04 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -778,7 +778,6 @@ void RenderWidgetHostViewAndroid::OnDidChangeBodyBackgroundColor(
}
void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames(bool enabled) {
- DCHECK(using_browser_compositor_);
TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrames",
"enabled", enabled);
if (enabled)
@@ -1531,10 +1530,6 @@ void RenderWidgetHostViewAndroid::RemoveLayers() {
}
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;
@@ -1582,15 +1577,25 @@ void RenderWidgetHostViewAndroid::SendBeginFrame(base::TimeTicks frame_time,
base::TimeDelta vsync_period) {
TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::SendBeginFrame",
"frame_time_us", frame_time.ToInternalValue());
- base::TimeTicks display_time = frame_time + vsync_period;
- base::TimeTicks deadline =
- display_time - host_->GetEstimatedBrowserCompositeTime();
+ 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(
jdduke (slow) 2015/04/01 16:01:14 Hmm, the other places we use SynchronousCompositor
sunnyps 2015/04/01 19:53:02 Done.
+ host_->GetProcess()->GetID(), host_->GetRoutingID());
jdduke (slow) 2015/04/01 16:01:15 Can you add a note here briefly mentioning why the
sunnyps 2015/04/01 19:53:02 Done.
- host_->Send(new ViewMsg_BeginFrame(
- host_->GetRoutingID(),
- cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline,
- vsync_period, cc::BeginFrameArgs::NORMAL)));
+ compositor->SendBeginFrame(cc::BeginFrameArgs::Create(
jdduke (slow) 2015/04/01 16:01:15 I'm sure this has already been covered, but why is
sunnyps 2015/04/01 19:53:01 Done.
+ BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks(), vsync_period,
+ cc::BeginFrameArgs::NORMAL));
+ }
}
bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
@@ -1925,19 +1930,21 @@ void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
if (!host_ || host_->is_hidden())
return;
- const uint32 current_vsync_requests = outstanding_vsync_requests_;
- outstanding_vsync_requests_ = 0;
-
- if (current_vsync_requests & FLUSH_INPUT)
+ if (outstanding_vsync_requests_ & FLUSH_INPUT) {
+ outstanding_vsync_requests_ &= ~FLUSH_INPUT;
host_->FlushInput();
+ }
- if (current_vsync_requests & BEGIN_FRAME ||
- current_vsync_requests & PERSISTENT_BEGIN_FRAME) {
+ if (outstanding_vsync_requests_ & BEGIN_FRAME ||
+ outstanding_vsync_requests_ & PERSISTENT_BEGIN_FRAME) {
+ outstanding_vsync_requests_ &= ~BEGIN_FRAME;
SendBeginFrame(frame_time, vsync_period);
}
- if (current_vsync_requests & PERSISTENT_BEGIN_FRAME)
- RequestVSyncUpdate(PERSISTENT_BEGIN_FRAME);
+ // This allows for SendBeginFrame to modify outstanding_vsync_requests.
jdduke (slow) 2015/04/01 16:01:14 "allows for SendBeginFrame and FlushInput"
sunnyps 2015/04/01 19:53:02 Done.
+ uint32 outstanding_vsync_requests = outstanding_vsync_requests_;
+ outstanding_vsync_requests_ = 0;
+ RequestVSyncUpdate(outstanding_vsync_requests);
}
void RenderWidgetHostViewAndroid::OnAnimate(base::TimeTicks begin_frame_time) {

Powered by Google App Engine
This is Rietveld 408576698