Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: cc/test/scheduler_test_common.cc

Issue 2061273002: cc: Make BackToBackBeginFrameSource a SyntheticBeginFrameSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: syntheticbeginframesource: onemorenit Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698