| Index: cc/scheduler/scheduler.cc
|
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
|
| index 65f63fc8b641040ad3e26a8e572ae97fd9c6943f..1c66f01ab320d34187eca2bf73b1cad3687e22da 100644
|
| --- a/cc/scheduler/scheduler.cc
|
| +++ b/cc/scheduler/scheduler.cc
|
| @@ -19,15 +19,8 @@ namespace cc {
|
|
|
| Scheduler::SyntheticBeginFrameSource::SyntheticBeginFrameSource(
|
| Scheduler* scheduler,
|
| - base::SingleThreadTaskRunner* task_runner)
|
| - : scheduler_(scheduler) {
|
| - if (gfx::FrameTime::TimestampsAreHighRes()) {
|
| - time_source_ = DelayBasedTimeSourceHighRes::Create(
|
| - scheduler_->VSyncInterval(), task_runner);
|
| - } else {
|
| - time_source_ = DelayBasedTimeSource::Create(scheduler_->VSyncInterval(),
|
| - task_runner);
|
| - }
|
| + scoped_refptr<DelayBasedTimeSource> time_source)
|
| + : scheduler_(scheduler), time_source_(time_source) {
|
| time_source_->SetClient(this);
|
| }
|
|
|
| @@ -126,9 +119,21 @@ Scheduler::~Scheduler() {
|
| }
|
|
|
| void Scheduler::SetupSyntheticBeginFrames() {
|
| + scoped_refptr<DelayBasedTimeSource> time_source;
|
| + if (gfx::FrameTime::TimestampsAreHighRes()) {
|
| + time_source = DelayBasedTimeSourceHighRes::Create(VSyncInterval(),
|
| + task_runner_.get());
|
| + } else {
|
| + time_source =
|
| + DelayBasedTimeSource::Create(VSyncInterval(), task_runner_.get());
|
| + }
|
| DCHECK(!synthetic_begin_frame_source_);
|
| synthetic_begin_frame_source_.reset(
|
| - new SyntheticBeginFrameSource(this, task_runner_.get()));
|
| + new SyntheticBeginFrameSource(this, time_source));
|
| +}
|
| +
|
| +base::TimeTicks Scheduler::Now() const {
|
| + return gfx::FrameTime::Now();
|
| }
|
|
|
| void Scheduler::CommitVSyncParameters(base::TimeTicks timebase,
|
| @@ -262,7 +267,7 @@ base::TimeTicks Scheduler::AnticipatedDrawTime() const {
|
| begin_impl_frame_args_.interval <= base::TimeDelta())
|
| return base::TimeTicks();
|
|
|
| - base::TimeTicks now = gfx::FrameTime::Now();
|
| + base::TimeTicks now = Now();
|
| base::TimeTicks timebase = std::max(begin_impl_frame_args_.frame_time,
|
| begin_impl_frame_args_.deadline);
|
| int64 intervals = 1 + ((now - timebase) / begin_impl_frame_args_.interval);
|
| @@ -340,7 +345,7 @@ void Scheduler::BeginUnthrottledFrame() {
|
| DCHECK(!settings_.throttle_frame_production);
|
| DCHECK(begin_retro_frame_args_.empty());
|
|
|
| - base::TimeTicks now = gfx::FrameTime::Now();
|
| + base::TimeTicks now = Now();
|
| base::TimeTicks deadline = now + vsync_interval_;
|
|
|
| BeginFrameArgs begin_frame_args =
|
| @@ -451,7 +456,7 @@ void Scheduler::BeginRetroFrame() {
|
| // TODO(brianderson): In the future, long deadlines could result in us not
|
| // draining the queue if we don't catch up. If we consistently can't catch
|
| // up, our fallback should be to lower our frame rate.
|
| - base::TimeTicks now = gfx::FrameTime::Now();
|
| + base::TimeTicks now = Now();
|
| base::TimeDelta draw_duration_estimate = client_->DrawDurationEstimate();
|
| while (!begin_retro_frame_args_.empty() &&
|
| now > AdjustedBeginImplFrameDeadline(begin_retro_frame_args_.front(),
|
| @@ -479,6 +484,10 @@ void Scheduler::BeginRetroFrame() {
|
| // will check if there is a pending BeginRetroFrame to ensure we handle
|
| // BeginFrames in FIFO order.
|
| void Scheduler::PostBeginRetroFrameIfNeeded() {
|
| + TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"),
|
| + "Scheduler::PostBeginRetroFrameIfNeeded",
|
| + "state",
|
| + AsValue());
|
| if (!last_set_needs_begin_frame_)
|
| return;
|
|
|
| @@ -555,6 +564,8 @@ base::TimeTicks Scheduler::AdjustedBeginImplFrameDeadline(
|
| }
|
|
|
| void Scheduler::ScheduleBeginImplFrameDeadline(base::TimeTicks deadline) {
|
| + TRACE_EVENT1(
|
| + "cc", "Scheduler::ScheduleBeginImplFrameDeadline", "deadline", deadline);
|
| if (settings_.using_synchronous_renderer_compositor) {
|
| // The synchronous renderer compositor has to make its GL calls
|
| // within this call.
|
| @@ -567,7 +578,7 @@ void Scheduler::ScheduleBeginImplFrameDeadline(base::TimeTicks deadline) {
|
| begin_impl_frame_deadline_task_.Cancel();
|
| begin_impl_frame_deadline_task_.Reset(begin_impl_frame_deadline_closure_);
|
|
|
| - base::TimeDelta delta = deadline - gfx::FrameTime::Now();
|
| + base::TimeDelta delta = deadline - Now();
|
| if (delta <= base::TimeDelta())
|
| delta = base::TimeDelta();
|
| task_runner_->PostDelayedTask(
|
| @@ -697,9 +708,8 @@ scoped_refptr<base::debug::ConvertableToTraceFormat> Scheduler::AsValue()
|
| }
|
|
|
| state->BeginDictionary("scheduler_state");
|
| - state->SetDouble(
|
| - "time_until_anticipated_draw_time_ms",
|
| - (AnticipatedDrawTime() - base::TimeTicks::Now()).InMillisecondsF());
|
| + state->SetDouble("time_until_anticipated_draw_time_ms",
|
| + (AnticipatedDrawTime() - Now()).InMillisecondsF());
|
| state->SetDouble("vsync_interval_ms", vsync_interval_.InMillisecondsF());
|
| state->SetDouble("estimated_parent_draw_time_ms",
|
| estimated_parent_draw_time_.InMillisecondsF());
|
|
|