Index: cc/scheduler/scheduler.cc |
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
index 52e0f9e093e4dc560c7af23768ef568caf0e9f3b..6e4aebcba470da286859107e3a1e8adcc900184a 100644 |
--- a/cc/scheduler/scheduler.cc |
+++ b/cc/scheduler/scheduler.cc |
@@ -12,21 +12,13 @@ |
#include "cc/debug/devtools_instrumentation.h" |
#include "cc/debug/traced_value.h" |
#include "cc/scheduler/delay_based_time_source.h" |
-#include "ui/gfx/frame_time.h" |
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); |
} |
@@ -124,9 +116,21 @@ Scheduler::~Scheduler() { |
} |
void Scheduler::SetupSyntheticBeginFrames() { |
+ scoped_refptr<DelayBasedTimeSource> time_source; |
+ if (gfx::FrameTime::TimestampsAreHighRes()) { |
+ time_source = DelayBasedTimeSourceHighRes::Create(VSyncInterval(), |
+ impl_task_runner_.get()); |
+ } else { |
+ time_source = |
+ DelayBasedTimeSource::Create(VSyncInterval(), impl_task_runner_.get()); |
+ } |
DCHECK(!synthetic_begin_frame_source_); |
synthetic_begin_frame_source_.reset( |
- new SyntheticBeginFrameSource(this, impl_task_runner_.get())); |
+ new SyntheticBeginFrameSource(this, time_source)); |
+} |
+ |
+base::TimeTicks Scheduler::Now() const { |
+ return gfx::FrameTime::Now(); |
} |
void Scheduler::CommitVSyncParameters(base::TimeTicks timebase, |
@@ -260,7 +264,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); |
@@ -335,7 +339,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 = |
@@ -446,7 +450,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(), |
@@ -562,7 +566,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(); |
impl_task_runner_->PostDelayedTask( |
@@ -688,9 +692,8 @@ scoped_ptr<base::Value> Scheduler::AsValue() const { |
synthetic_begin_frame_source_->AsValue().release()); |
scoped_ptr<base::DictionaryValue> scheduler_state(new base::DictionaryValue); |
- scheduler_state->SetDouble( |
- "time_until_anticipated_draw_time_ms", |
- (AnticipatedDrawTime() - base::TimeTicks::Now()).InMillisecondsF()); |
+ scheduler_state->SetDouble("time_until_anticipated_draw_time_ms", |
+ (AnticipatedDrawTime() - Now()).InMillisecondsF()); |
scheduler_state->SetDouble("vsync_interval_ms", |
vsync_interval_.InMillisecondsF()); |
scheduler_state->SetDouble("estimated_parent_draw_time_ms", |