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

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

Issue 1879833002: Android: Browser-side scheduling latency tweaks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/compositor_impl_android.cc
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 56b9201dcc5b70abac801a1e398ffac1b25a33d9..a34da7218e20ff43f780cd52c437e41db3f9a8c4 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -160,7 +160,7 @@ class ExternalBeginFrameSource : public cc::BeginFrameSourceBase,
public CompositorImpl::VSyncObserver {
public:
ExternalBeginFrameSource(CompositorImpl* compositor)
- : compositor_(compositor) {
+ : compositor_(compositor), needs_begin_frames_(false) {
compositor_->AddObserver(this);
}
@@ -170,19 +170,41 @@ class ExternalBeginFrameSource : public cc::BeginFrameSourceBase,
// cc::BeginFrameSourceBase implementation:
void OnNeedsBeginFramesChanged(bool needs_begin_frames) override {
+ TRACE_EVENT1("compositor", "OnNeedsBeginFramesChanged",
+ "needs_begin_frames", needs_begin_frames);
compositor_->OnNeedsBeginFramesChange(needs_begin_frames);
+ needs_begin_frames_ = needs_begin_frames;
+ if (needs_begin_frames) {
no sievers 2016/04/11 23:10:10 Oh I was going to ask: Should I also remember the
+ base::TimeTicks now = base::TimeTicks::Now();
+ // Since |needs_begin_frames_| turned on, the scheduler wants to draw,
+ // so the dealine doesn't matter much. But pass something large enough
+ // to make sure we don't get discarded in BeginRetroFrame(), see
+ // crbug.com/602485.
+ base::TimeTicks deadline = now + base::TimeDelta::FromMilliseconds(16);
+ cc::BeginFrameArgs args(cc::BeginFrameArgs::Create(
+ BEGINFRAME_FROM_HERE, now, deadline,
+ base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL));
+ base::Closure tick =
+ base::Bind(&ExternalBeginFrameSource::CallOnBeginFrame,
+ base::Unretained(this), args);
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, tick);
+ }
}
// CompositorImpl::VSyncObserver implementation:
void OnVSync(base::TimeTicks frame_time,
base::TimeDelta vsync_period) override {
- CallOnBeginFrame(cc::BeginFrameArgs::Create(
- BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks::Now(), vsync_period,
- cc::BeginFrameArgs::NORMAL));
+ base::TimeTicks deadline = frame_time + 2 * vsync_period / 3;
+ if (needs_begin_frames_) {
+ CallOnBeginFrame(
+ cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline,
+ vsync_period, cc::BeginFrameArgs::NORMAL));
+ }
}
private:
CompositorImpl* compositor_;
+ bool needs_begin_frames_;
};
static bool g_initialized = false;
@@ -406,6 +428,7 @@ void CompositorImpl::SetHasTransparentBackground(bool flag) {
void CompositorImpl::SetNeedsComposite() {
if (!host_->visible())
return;
+ TRACE_EVENT0("compositor", "Compositor::SetNeedsComposite");
host_->SetNeedsAnimate();
}
@@ -585,10 +608,12 @@ void CompositorImpl::RemoveObserver(VSyncObserver* observer) {
cc::UIResourceId CompositorImpl::CreateUIResource(
cc::UIResourceClient* client) {
+ TRACE_EVENT0("compositor", "CompositorImpl::CreateUIResource");
return host_->CreateUIResource(client);
}
void CompositorImpl::DeleteUIResource(cc::UIResourceId resource_id) {
+ TRACE_EVENT0("compositor", "CompositorImpl::DeleteUIResource");
host_->DeleteUIResource(resource_id);
}
@@ -649,6 +674,7 @@ void CompositorImpl::SetNeedsAnimate() {
if (!host_->visible())
return;
+ TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate");
host_->SetNeedsAnimate();
}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698