OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/test/fake_external_begin_frame_source.h" | 5 #include "cc/test/fake_external_begin_frame_source.h" |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" |
9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
11 #include "cc/test/begin_frame_args_test.h" | 11 #include "cc/test/begin_frame_args_test.h" |
12 | 12 |
13 namespace cc { | 13 namespace cc { |
14 | 14 |
15 FakeExternalBeginFrameSource::FakeExternalBeginFrameSource(double refresh_rate) | 15 FakeExternalBeginFrameSource::FakeExternalBeginFrameSource( |
16 : milliseconds_per_frame_(1000.0 / refresh_rate), | 16 double refresh_rate, |
| 17 bool tick_automatically) |
| 18 : tick_automatically_(tick_automatically), |
| 19 milliseconds_per_frame_(1000.0 / refresh_rate), |
17 weak_ptr_factory_(this) { | 20 weak_ptr_factory_(this) { |
18 DetachFromThread(); | 21 DetachFromThread(); |
19 } | 22 } |
20 | 23 |
21 FakeExternalBeginFrameSource::~FakeExternalBeginFrameSource() { | 24 FakeExternalBeginFrameSource::~FakeExternalBeginFrameSource() { |
22 DCHECK(CalledOnValidThread()); | 25 DCHECK(CalledOnValidThread()); |
23 } | 26 } |
24 | 27 |
25 void FakeExternalBeginFrameSource::OnNeedsBeginFramesChanged( | 28 void FakeExternalBeginFrameSource::SetPaused(bool paused) { |
26 bool needs_begin_frames) { | 29 if (paused != paused_) { |
27 DCHECK(CalledOnValidThread()); | 30 paused_ = paused; |
28 if (needs_begin_frames) { | 31 std::set<BeginFrameObserver*> observers(observers_); |
29 PostTestOnBeginFrame(); | 32 for (auto* obs : observers) |
30 } else { | 33 obs->OnBeginFrameSourcePausedChanged(paused_); |
31 begin_frame_task_.Cancel(); | |
32 } | 34 } |
33 } | 35 } |
34 | 36 |
35 void FakeExternalBeginFrameSource::TestOnBeginFrame() { | 37 void FakeExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) { |
| 38 DCHECK(obs); |
| 39 DCHECK(observers_.find(obs) == observers_.end()); |
| 40 |
| 41 bool observers_was_empty = observers_.empty(); |
| 42 observers_.insert(obs); |
| 43 obs->OnBeginFrameSourcePausedChanged(paused_); |
| 44 if (observers_was_empty && tick_automatically_) |
| 45 PostTestOnBeginFrame(); |
| 46 if (client_) |
| 47 client_->OnAddObserver(obs); |
| 48 } |
| 49 |
| 50 void FakeExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) { |
| 51 DCHECK(obs); |
| 52 DCHECK(observers_.find(obs) != observers_.end()); |
| 53 |
| 54 observers_.erase(obs); |
| 55 if (observers_.empty()) |
| 56 begin_frame_task_.Cancel(); |
| 57 if (client_) |
| 58 client_->OnRemoveObserver(obs); |
| 59 } |
| 60 |
| 61 void FakeExternalBeginFrameSource::TestOnBeginFrame( |
| 62 const BeginFrameArgs& args) { |
36 DCHECK(CalledOnValidThread()); | 63 DCHECK(CalledOnValidThread()); |
37 CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 64 std::set<BeginFrameObserver*> observers(observers_); |
38 PostTestOnBeginFrame(); | 65 for (auto* obs : observers) |
| 66 obs->OnBeginFrame(args); |
| 67 if (tick_automatically_) |
| 68 PostTestOnBeginFrame(); |
39 } | 69 } |
40 | 70 |
41 void FakeExternalBeginFrameSource::PostTestOnBeginFrame() { | 71 void FakeExternalBeginFrameSource::PostTestOnBeginFrame() { |
42 begin_frame_task_.Reset( | 72 begin_frame_task_.Reset( |
43 base::Bind(&FakeExternalBeginFrameSource::TestOnBeginFrame, | 73 base::Bind(&FakeExternalBeginFrameSource::TestOnBeginFrame, |
44 weak_ptr_factory_.GetWeakPtr())); | 74 weak_ptr_factory_.GetWeakPtr())); |
45 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 75 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
46 FROM_HERE, begin_frame_task_.callback(), | 76 FROM_HERE, |
| 77 base::Bind(begin_frame_task_.callback(), |
| 78 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)), |
47 base::TimeDelta::FromMilliseconds(milliseconds_per_frame_)); | 79 base::TimeDelta::FromMilliseconds(milliseconds_per_frame_)); |
48 } | 80 } |
49 | 81 |
50 } // namespace cc | 82 } // namespace cc |
OLD | NEW |