| 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 |