| 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)));
|
| }
|
| }
|
|
|
|
|