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