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

Side by Side Diff: cc/scheduler/frame_source_unittest.cc

Issue 267783004: Refactoring the way begin frame sources inside scheduler work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Scheduler now uses frame sources, working on scheduler_unittests. Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <deque>
6
7 #include "base/basictypes.h"
8 #include "base/test/test_simple_task_runner.h"
9 #include "cc/scheduler/frame_source.h"
10 #include "cc/test/output_test_common.h"
11 #include "cc/test/scheduler_test_common.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace cc {
15 namespace {
16
17 /*
18 base::TimeDelta Interval() {
19 return base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond /
20 60);
21 }
22 */
23
24 class FakeFrameSink : public FrameSink {
25 public:
26 void Expect(BeginFrameArgs args) { expected_.push_back(args); }
27
28 virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {
29 ASSERT_GT(expected_.size(), 0U) << "Unexpected BeginFrame("
30 << ::testing::PrintToString(args)
31 << ") call!";
32 EXPECT_EQ(expected_[0], args);
33 expected_.pop_front();
34 }
35
36 virtual void Reset() {
37 EXPECT_EQ(expected_.size(), 0U) << "Missing " << expected_.size()
38 << " BeginFrame calls!";
39 expected_.clear();
40 }
41
42 virtual ~FakeFrameSink() { Reset(); }
43
44 private:
45 std::deque<BeginFrameArgs> expected_;
46 };
47
48 class FakeFrameSource : public BaseFrameSource {
49 public:
50 FakeFrameSource() : BaseFrameSource(0) {}
51
52 bool needs_begin_frame_;
53 base::TimeTicks timebase_;
54 base::TimeDelta interval_;
55
56 virtual void SetNeedsBeginFrame(bool needs_begin_frame) OVERRIDE {
57 needs_begin_frame_ = needs_begin_frame;
58 }
59 virtual void SetTimeBaseAndInterval(base::TimeTicks timebase,
60 base::TimeDelta interval) OVERRIDE {
61 timebase_ = timebase;
62 interval_ = interval;
63 }
64 virtual scoped_ptr<base::Value> FrameSourceAsValue() const OVERRIDE {
65 return make_scoped_ptr(base::Value::CreateNullValue());
66 }
67 virtual std::string FrameSourceType() const OVERRIDE {
68 return "FakeFrameSource";
69 }
70
71 void SendTestBeginFrame(const BeginFrameArgs& args) { SendBeginFrame(args); }
72 };
73
74 TEST(ProxyFrameSourceTest, Works) {
75 FakeFrameSink sink;
76 FakeFrameSource source;
77
78 // BeginFrame
79 sink.Expect(BeginFrameArgsCreate(100, 200, 300));
80 sink.Expect(BeginFrameArgsCreate(400, 600, 300));
81 ProxyFrameSource proxy(&sink, &source);
82 proxy.BeginFrame(BeginFrameArgsCreate(100, 200, 300));
83 proxy.BeginFrame(BeginFrameArgsCreate(400, 600, 300));
84
85 // SetNeedsBeginFrame
86 source.needs_begin_frame_ = false;
87 proxy.SetNeedsBeginFrame(true);
88 EXPECT_EQ(source.needs_begin_frame_, true);
89 proxy.SetNeedsBeginFrame(false);
90 EXPECT_EQ(source.needs_begin_frame_, false);
91
92 // SetTimeBaseAndInterval
93 source.timebase_ = base::TimeTicks();
94 source.interval_ = base::TimeDelta();
95 proxy.SetTimeBaseAndInterval(base::TimeTicks::FromInternalValue(123),
96 base::TimeDelta::FromInternalValue(456));
97 EXPECT_EQ(source.timebase_.ToInternalValue(), 123);
98 EXPECT_EQ(source.interval_.ToInternalValue(), 456);
99 }
100
101 TEST(ThrottledFrameSource, Works) {
102 FakeFrameSink sink;
103 sink.Expect(BeginFrameArgsCreate(100, 200, 300));
104 sink.Expect(BeginFrameArgsCreate(700, 900, 300));
105
106 FakeFrameSource* fake_source = new FakeFrameSource();
107 ThrottledFrameSource source(&sink,
108 scoped_ptr<FrameSource>(fake_source),
109 base::TimeDelta::FromInternalValue(600));
110 fake_source->SendTestBeginFrame(BeginFrameArgsCreate(100, 200, 300));
111 fake_source->SendTestBeginFrame(BeginFrameArgsCreate(400, 600, 300));
112 fake_source->SendTestBeginFrame(BeginFrameArgsCreate(700, 900, 300));
113 }
114
115 TEST(BackToBackFrameSource, TickNotCalledWithTaskPosted) {
116 FakeFrameSink sink;
117
118 // BackToBackFrameSource source();
119 }
120
121 TEST(SyntheticFrameSource, Works) {
122 FakeFrameSink sink;
123 }
124
125 TEST(DualFrameSource, Works) {
126 FakeFrameSink sink;
127
128 FakeFrameSource* fake_primary = new FakeFrameSource();
129 fake_primary->needs_begin_frame_ = false;
130 FakeFrameSource* fake_secondary = new FakeFrameSource();
131 fake_secondary->needs_begin_frame_ = false;
132
133 DualFrameSource source(&sink,
134 scoped_ptr<FrameSource>(fake_primary),
135 scoped_ptr<FrameSource>(fake_secondary));
136 source.SwitchSource(source.SourcePrimary());
137
138 // Check SetNeedsBeginFrame works
139 source.SetNeedsBeginFrame(true);
140 EXPECT_EQ(fake_primary->needs_begin_frame_, true);
141 EXPECT_EQ(fake_secondary->needs_begin_frame_, false);
142 source.SetNeedsBeginFrame(false);
143 EXPECT_EQ(fake_primary->needs_begin_frame_, false);
144 EXPECT_EQ(fake_secondary->needs_begin_frame_, false);
145
146 // Checking that switching the source makes SetNeedsBeginFrame on the
147 // subsources correctly.
148 source.SetNeedsBeginFrame(true);
149 source.SwitchSource(source.SourceSecondary());
150 EXPECT_EQ(fake_primary->needs_begin_frame_, false);
151 EXPECT_EQ(fake_secondary->needs_begin_frame_, true);
152 source.SwitchSource(source.SourcePrimary());
153 EXPECT_EQ(fake_primary->needs_begin_frame_, true);
154 EXPECT_EQ(fake_secondary->needs_begin_frame_, false);
155
156 sink.Reset();
157
158 // Check that BeginFrame calls end up at the sink
159 {
160 SCOPED_TRACE("First test");
161 sink.Expect(BeginFrameArgsCreate(100, 200, 300));
162 sink.Expect(BeginFrameArgsCreate(400, 600, 300));
163 fake_primary->SendTestBeginFrame(BeginFrameArgsCreate(100, 200, 300));
164 fake_secondary->SendTestBeginFrame(BeginFrameArgsCreate(400, 600, 300));
165 sink.Reset();
166 }
167
168 // Check that BeginFrames can't go backwards
169 {
170 SCOPED_TRACE("Backwards test");
171 sink.Expect(BeginFrameArgsCreate(400, 600, 300));
172 sink.Expect(BeginFrameArgsCreate(700, 900, 300));
173 sink.Expect(BeginFrameArgsCreate(1000, 1200, 300));
174 fake_primary->SendTestBeginFrame(BeginFrameArgsCreate(400, 600, 300));
175 fake_primary->SendTestBeginFrame(BeginFrameArgsCreate(700, 900, 300));
176 fake_secondary->SendTestBeginFrame(BeginFrameArgsCreate(699, 899, 300));
177 fake_primary->SendTestBeginFrame(BeginFrameArgsCreate(1000, 1200, 300));
178 sink.Reset();
179 }
180 }
181
182 } // namespace
183 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698