OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/scheduler_test_common.h" | 5 #include "cc/test/scheduler_test_common.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
13 #include "cc/debug/rendering_stats_instrumentation.h" | 13 #include "cc/debug/rendering_stats_instrumentation.h" |
14 | 14 |
15 namespace cc { | 15 namespace cc { |
16 | 16 |
17 void FakeDelayBasedTimeSourceClient::OnTimerTick() { | 17 void FakeDelayBasedTimeSourceClient::OnTimerTick() { |
18 tick_called_ = true; | 18 tick_called_ = true; |
19 } | 19 } |
20 | 20 |
21 base::TimeTicks FakeDelayBasedTimeSource::Now() const { return now_; } | 21 base::TimeTicks FakeDelayBasedTimeSource::Now() const { return now_; } |
22 | 22 |
23 TestDelayBasedTimeSource::TestDelayBasedTimeSource( | 23 TestDelayBasedTimeSource::TestDelayBasedTimeSource( |
24 base::SimpleTestTickClock* now_src, | 24 base::SimpleTestTickClock* now_src, |
25 base::TimeDelta interval, | |
26 OrderedSimpleTaskRunner* task_runner) | 25 OrderedSimpleTaskRunner* task_runner) |
27 : DelayBasedTimeSource(interval, task_runner), now_src_(now_src) { | 26 : DelayBasedTimeSource(task_runner), now_src_(now_src) {} |
28 } | |
29 | 27 |
30 base::TimeTicks TestDelayBasedTimeSource::Now() const { | 28 base::TimeTicks TestDelayBasedTimeSource::Now() const { |
31 return now_src_->NowTicks(); | 29 return now_src_->NowTicks(); |
32 } | 30 } |
33 | 31 |
34 std::string TestDelayBasedTimeSource::TypeString() const { | 32 std::string TestDelayBasedTimeSource::TypeString() const { |
35 return "TestDelayBasedTimeSource"; | 33 return "TestDelayBasedTimeSource"; |
36 } | 34 } |
37 | 35 |
38 TestDelayBasedTimeSource::~TestDelayBasedTimeSource() { | 36 TestDelayBasedTimeSource::~TestDelayBasedTimeSource() { |
39 } | 37 } |
40 | 38 |
41 FakeBeginFrameSource::FakeBeginFrameSource() {} | 39 FakeBeginFrameSource::FakeBeginFrameSource() {} |
42 | 40 |
43 FakeBeginFrameSource::~FakeBeginFrameSource() {} | 41 FakeBeginFrameSource::~FakeBeginFrameSource() {} |
44 | 42 |
45 TestBackToBackBeginFrameSource::TestBackToBackBeginFrameSource( | 43 TestBackToBackBeginFrameSource::TestBackToBackBeginFrameSource( |
46 base::SimpleTestTickClock* now_src, | 44 base::SimpleTestTickClock* now_src, |
47 base::SingleThreadTaskRunner* task_runner) | 45 base::SingleThreadTaskRunner* task_runner) |
48 : BackToBackBeginFrameSource(task_runner), now_src_(now_src) { | 46 : now_src_(now_src), task_runner_(task_runner), weak_factory_(this) {} |
| 47 |
| 48 TestBackToBackBeginFrameSource::~TestBackToBackBeginFrameSource() = default; |
| 49 |
| 50 void TestBackToBackBeginFrameSource::AddObserver(BeginFrameObserver* obs) { |
| 51 BeginFrameSourceBase::AddObserver(obs); |
| 52 pending_begin_frame_observers_.insert(obs); |
| 53 PostPendingBeginFramesTask(); |
49 } | 54 } |
50 | 55 |
51 TestBackToBackBeginFrameSource::~TestBackToBackBeginFrameSource() { | 56 void TestBackToBackBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) { |
| 57 BeginFrameSourceBase::RemoveObserver(obs); |
| 58 pending_begin_frame_observers_.erase(obs); |
| 59 if (pending_begin_frame_observers_.empty()) |
| 60 begin_frame_task_.Cancel(); |
| 61 } |
| 62 |
| 63 void TestBackToBackBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs, |
| 64 size_t remaining_frames) { |
| 65 BeginFrameSourceBase::DidFinishFrame(obs, remaining_frames); |
| 66 if (remaining_frames == 0 && observers_.find(obs) != observers_.end()) { |
| 67 pending_begin_frame_observers_.insert(obs); |
| 68 PostPendingBeginFramesTask(); |
| 69 } |
52 } | 70 } |
53 | 71 |
54 base::TimeTicks TestBackToBackBeginFrameSource::Now() { | 72 base::TimeTicks TestBackToBackBeginFrameSource::Now() { |
55 return now_src_->NowTicks(); | 73 return now_src_->NowTicks(); |
56 } | 74 } |
57 | 75 |
58 TestSyntheticBeginFrameSource::TestSyntheticBeginFrameSource( | 76 void TestBackToBackBeginFrameSource::PostPendingBeginFramesTask() { |
59 base::SimpleTestTickClock* now_src, | 77 DCHECK(needs_begin_frames()); |
60 OrderedSimpleTaskRunner* task_runner, | 78 DCHECK(!pending_begin_frame_observers_.empty()); |
61 base::TimeDelta initial_interval) | 79 if (begin_frame_task_.IsCancelled()) { |
62 : SyntheticBeginFrameSource( | 80 begin_frame_task_.Reset( |
63 TestDelayBasedTimeSource::Create(now_src, | 81 base::Bind(&TestBackToBackBeginFrameSource::SendPendingBeginFrames, |
64 initial_interval, | 82 weak_factory_.GetWeakPtr())); |
65 task_runner)) {} | 83 task_runner_->PostTask(FROM_HERE, begin_frame_task_.callback()); |
| 84 } |
| 85 } |
66 | 86 |
67 TestSyntheticBeginFrameSource::~TestSyntheticBeginFrameSource() { | 87 void TestBackToBackBeginFrameSource::SendPendingBeginFrames() { |
| 88 DCHECK(needs_begin_frames()); |
| 89 DCHECK(!begin_frame_task_.IsCancelled()); |
| 90 begin_frame_task_.Cancel(); |
| 91 |
| 92 base::TimeTicks now = Now(); |
| 93 BeginFrameArgs args = BeginFrameArgs::Create( |
| 94 BEGINFRAME_FROM_HERE, now, now + BeginFrameArgs::DefaultInterval(), |
| 95 BeginFrameArgs::DefaultInterval(), BeginFrameArgs::NORMAL); |
| 96 |
| 97 std::set<BeginFrameObserver*> pending_observers; |
| 98 pending_observers.swap(pending_begin_frame_observers_); |
| 99 for (BeginFrameObserver* obs : pending_observers) |
| 100 obs->OnBeginFrame(args); |
68 } | 101 } |
69 | 102 |
70 std::unique_ptr<FakeCompositorTimingHistory> | 103 std::unique_ptr<FakeCompositorTimingHistory> |
71 FakeCompositorTimingHistory::Create( | 104 FakeCompositorTimingHistory::Create( |
72 bool using_synchronous_renderer_compositor) { | 105 bool using_synchronous_renderer_compositor) { |
73 std::unique_ptr<RenderingStatsInstrumentation> | 106 std::unique_ptr<RenderingStatsInstrumentation> |
74 rendering_stats_instrumentation = RenderingStatsInstrumentation::Create(); | 107 rendering_stats_instrumentation = RenderingStatsInstrumentation::Create(); |
75 return base::WrapUnique(new FakeCompositorTimingHistory( | 108 return base::WrapUnique(new FakeCompositorTimingHistory( |
76 using_synchronous_renderer_compositor, | 109 using_synchronous_renderer_compositor, |
77 std::move(rendering_stats_instrumentation))); | 110 std::move(rendering_stats_instrumentation))); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 now_src_(now_src) {} | 233 now_src_(now_src) {} |
201 | 234 |
202 base::TimeTicks TestScheduler::Now() const { | 235 base::TimeTicks TestScheduler::Now() const { |
203 return now_src_->NowTicks(); | 236 return now_src_->NowTicks(); |
204 } | 237 } |
205 | 238 |
206 TestScheduler::~TestScheduler() { | 239 TestScheduler::~TestScheduler() { |
207 } | 240 } |
208 | 241 |
209 } // namespace cc | 242 } // namespace cc |
OLD | NEW |