| Index: cc/test/scheduler_test_common.cc
|
| diff --git a/cc/test/scheduler_test_common.cc b/cc/test/scheduler_test_common.cc
|
| index 36201961c82b57c9e8df5549ce78bb094636fd62..4cefb26945caf890a552fac61b1a1b0e3a66c35b 100644
|
| --- a/cc/test/scheduler_test_common.cc
|
| +++ b/cc/test/scheduler_test_common.cc
|
| @@ -22,10 +22,8 @@ base::TimeTicks FakeDelayBasedTimeSource::Now() const { return now_; }
|
|
|
| TestDelayBasedTimeSource::TestDelayBasedTimeSource(
|
| base::SimpleTestTickClock* now_src,
|
| - base::TimeDelta interval,
|
| OrderedSimpleTaskRunner* task_runner)
|
| - : DelayBasedTimeSource(interval, task_runner), now_src_(now_src) {
|
| -}
|
| + : DelayBasedTimeSource(task_runner), now_src_(now_src) {}
|
|
|
| base::TimeTicks TestDelayBasedTimeSource::Now() const {
|
| return now_src_->NowTicks();
|
| @@ -45,26 +43,61 @@ FakeBeginFrameSource::~FakeBeginFrameSource() {}
|
| TestBackToBackBeginFrameSource::TestBackToBackBeginFrameSource(
|
| base::SimpleTestTickClock* now_src,
|
| base::SingleThreadTaskRunner* task_runner)
|
| - : BackToBackBeginFrameSource(task_runner), now_src_(now_src) {
|
| + : now_src_(now_src), task_runner_(task_runner), weak_factory_(this) {}
|
| +
|
| +TestBackToBackBeginFrameSource::~TestBackToBackBeginFrameSource() = default;
|
| +
|
| +void TestBackToBackBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
|
| + BeginFrameSourceBase::AddObserver(obs);
|
| + pending_begin_frame_observers_.insert(obs);
|
| + PostPendingBeginFramesTask();
|
| +}
|
| +
|
| +void TestBackToBackBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
|
| + BeginFrameSourceBase::RemoveObserver(obs);
|
| + pending_begin_frame_observers_.erase(obs);
|
| + if (pending_begin_frame_observers_.empty())
|
| + begin_frame_task_.Cancel();
|
| }
|
|
|
| -TestBackToBackBeginFrameSource::~TestBackToBackBeginFrameSource() {
|
| +void TestBackToBackBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs,
|
| + size_t remaining_frames) {
|
| + BeginFrameSourceBase::DidFinishFrame(obs, remaining_frames);
|
| + if (remaining_frames == 0 && observers_.find(obs) != observers_.end()) {
|
| + pending_begin_frame_observers_.insert(obs);
|
| + PostPendingBeginFramesTask();
|
| + }
|
| }
|
|
|
| base::TimeTicks TestBackToBackBeginFrameSource::Now() {
|
| return now_src_->NowTicks();
|
| }
|
|
|
| -TestSyntheticBeginFrameSource::TestSyntheticBeginFrameSource(
|
| - base::SimpleTestTickClock* now_src,
|
| - OrderedSimpleTaskRunner* task_runner,
|
| - base::TimeDelta initial_interval)
|
| - : SyntheticBeginFrameSource(
|
| - TestDelayBasedTimeSource::Create(now_src,
|
| - initial_interval,
|
| - task_runner)) {}
|
| +void TestBackToBackBeginFrameSource::PostPendingBeginFramesTask() {
|
| + DCHECK(needs_begin_frames());
|
| + DCHECK(!pending_begin_frame_observers_.empty());
|
| + if (begin_frame_task_.IsCancelled()) {
|
| + begin_frame_task_.Reset(
|
| + base::Bind(&TestBackToBackBeginFrameSource::SendPendingBeginFrames,
|
| + weak_factory_.GetWeakPtr()));
|
| + task_runner_->PostTask(FROM_HERE, begin_frame_task_.callback());
|
| + }
|
| +}
|
| +
|
| +void TestBackToBackBeginFrameSource::SendPendingBeginFrames() {
|
| + DCHECK(needs_begin_frames());
|
| + DCHECK(!begin_frame_task_.IsCancelled());
|
| + begin_frame_task_.Cancel();
|
| +
|
| + base::TimeTicks now = Now();
|
| + BeginFrameArgs args = BeginFrameArgs::Create(
|
| + BEGINFRAME_FROM_HERE, now, now + BeginFrameArgs::DefaultInterval(),
|
| + BeginFrameArgs::DefaultInterval(), BeginFrameArgs::NORMAL);
|
|
|
| -TestSyntheticBeginFrameSource::~TestSyntheticBeginFrameSource() {
|
| + std::set<BeginFrameObserver*> pending_observers;
|
| + pending_observers.swap(pending_begin_frame_observers_);
|
| + for (BeginFrameObserver* obs : pending_observers)
|
| + obs->OnBeginFrame(args);
|
| }
|
|
|
| std::unique_ptr<FakeCompositorTimingHistory>
|
|
|