| Index: cc/test/fake_external_begin_frame_source.cc
|
| diff --git a/cc/test/fake_external_begin_frame_source.cc b/cc/test/fake_external_begin_frame_source.cc
|
| index 7dc4bef3073e4b90d6d529e39cf8b570218c58a7..9beff1540566e6df3001846178205339ca1ee42d 100644
|
| --- a/cc/test/fake_external_begin_frame_source.cc
|
| +++ b/cc/test/fake_external_begin_frame_source.cc
|
| @@ -12,8 +12,11 @@
|
|
|
| namespace cc {
|
|
|
| -FakeExternalBeginFrameSource::FakeExternalBeginFrameSource(double refresh_rate)
|
| - : milliseconds_per_frame_(1000.0 / refresh_rate),
|
| +FakeExternalBeginFrameSource::FakeExternalBeginFrameSource(
|
| + double refresh_rate,
|
| + bool tick_automatically)
|
| + : tick_automatically_(tick_automatically),
|
| + milliseconds_per_frame_(1000.0 / refresh_rate),
|
| weak_ptr_factory_(this) {
|
| DetachFromThread();
|
| }
|
| @@ -22,20 +25,47 @@ FakeExternalBeginFrameSource::~FakeExternalBeginFrameSource() {
|
| DCHECK(CalledOnValidThread());
|
| }
|
|
|
| -void FakeExternalBeginFrameSource::OnNeedsBeginFramesChanged(
|
| - bool needs_begin_frames) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (needs_begin_frames) {
|
| +void FakeExternalBeginFrameSource::SetPaused(bool paused) {
|
| + if (paused != paused_) {
|
| + paused_ = paused;
|
| + std::set<BeginFrameObserver*> observers(observers_);
|
| + for (auto* obs : observers)
|
| + obs->OnBeginFrameSourcePausedChanged(paused_);
|
| + }
|
| +}
|
| +
|
| +void FakeExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
|
| + DCHECK(obs);
|
| + DCHECK(observers_.find(obs) == observers_.end());
|
| +
|
| + bool observers_was_empty = observers_.empty();
|
| + observers_.insert(obs);
|
| + obs->OnBeginFrameSourcePausedChanged(paused_);
|
| + if (observers_was_empty && tick_automatically_)
|
| PostTestOnBeginFrame();
|
| - } else {
|
| + if (client_)
|
| + client_->OnAddObserver(obs);
|
| +}
|
| +
|
| +void FakeExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
|
| + DCHECK(obs);
|
| + DCHECK(observers_.find(obs) != observers_.end());
|
| +
|
| + observers_.erase(obs);
|
| + if (observers_.empty())
|
| begin_frame_task_.Cancel();
|
| - }
|
| + if (client_)
|
| + client_->OnRemoveObserver(obs);
|
| }
|
|
|
| -void FakeExternalBeginFrameSource::TestOnBeginFrame() {
|
| +void FakeExternalBeginFrameSource::TestOnBeginFrame(
|
| + const BeginFrameArgs& args) {
|
| DCHECK(CalledOnValidThread());
|
| - CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
|
| - PostTestOnBeginFrame();
|
| + std::set<BeginFrameObserver*> observers(observers_);
|
| + for (auto* obs : observers)
|
| + obs->OnBeginFrame(args);
|
| + if (tick_automatically_)
|
| + PostTestOnBeginFrame();
|
| }
|
|
|
| void FakeExternalBeginFrameSource::PostTestOnBeginFrame() {
|
| @@ -43,7 +73,9 @@ void FakeExternalBeginFrameSource::PostTestOnBeginFrame() {
|
| base::Bind(&FakeExternalBeginFrameSource::TestOnBeginFrame,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
| - FROM_HERE, begin_frame_task_.callback(),
|
| + FROM_HERE,
|
| + base::Bind(begin_frame_task_.callback(),
|
| + CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)),
|
| base::TimeDelta::FromMilliseconds(milliseconds_per_frame_));
|
| }
|
|
|
|
|