Index: cc/scheduler/begin_frame_source.cc |
diff --git a/cc/scheduler/begin_frame_source.cc b/cc/scheduler/begin_frame_source.cc |
index bc828026303bce098331606e8c675a73bf5ff110..8c97f6e20b67d292e970de193fcd57368ed68d34 100644 |
--- a/cc/scheduler/begin_frame_source.cc |
+++ b/cc/scheduler/begin_frame_source.cc |
@@ -210,12 +210,17 @@ scoped_ptr<SyntheticBeginFrameSource> SyntheticBeginFrameSource::Create( |
base::TimeDelta initial_vsync_interval) { |
scoped_ptr<DelayBasedTimeSource> time_source = |
DelayBasedTimeSource::Create(initial_vsync_interval, task_runner); |
- return make_scoped_ptr(new SyntheticBeginFrameSource(time_source.Pass())); |
+ return make_scoped_ptr( |
+ new SyntheticBeginFrameSource(task_runner, time_source.Pass())); |
} |
SyntheticBeginFrameSource::SyntheticBeginFrameSource( |
+ base::SingleThreadTaskRunner* task_runner, |
scoped_ptr<DelayBasedTimeSource> time_source) |
- : BeginFrameSourceBase(), time_source_(time_source.Pass()) { |
+ : BeginFrameSourceBase(), |
+ task_runner_(task_runner), |
+ time_source_(time_source.Pass()), |
+ weak_factory_(this) { |
time_source_->SetActive(false); |
time_source_->SetClient(this); |
} |
@@ -251,8 +256,11 @@ void SyntheticBeginFrameSource::OnNeedsBeginFramesChange( |
base::TimeTicks missed_tick_time = |
time_source_->SetActive(needs_begin_frames); |
if (!missed_tick_time.is_null()) { |
- CallOnBeginFrame( |
- CreateBeginFrameArgs(missed_tick_time, BeginFrameArgs::MISSED)); |
+ task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&SyntheticBeginFrameSource::CallOnBeginFrame, |
+ weak_factory_.GetWeakPtr(), |
+ CreateBeginFrameArgs(missed_tick_time, |
+ BeginFrameArgs::MISSED))); |
} |
} |