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

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 tests now pass and the code is cleaner. 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
« no previous file with comments | « cc/scheduler/frame_source.cc ('k') | cc/scheduler/scheduler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/gtest_prod_util.h"
9 #include "base/test/test_simple_task_runner.h"
10 #include "cc/scheduler/frame_source.h"
11 #include "cc/test/begin_frame_args_test.h"
12 #include "cc/test/scheduler_test_common.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace cc {
16 namespace {
17
18 class FakeBeginFrameSink : public BeginFrameSink {
19 public:
20 void Expect(BeginFrameArgs args) { expected_.push_back(args); }
21
22 virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {
23 ASSERT_GT(expected_.size(), 0U) << "Unexpected BeginFrame("
24 << ::testing::PrintToString(args)
25 << ") call!";
26 EXPECT_EQ(expected_[0], args);
27 expected_.pop_front();
28 }
29
30 virtual void Reset() {
31 EXPECT_EQ(expected_.size(), 0U) << "Missing " << expected_.size()
32 << " BeginFrame calls!";
33 expected_.clear();
34 }
35
36 virtual ~FakeBeginFrameSink() { Reset(); }
37
38 private:
39 std::deque<BeginFrameArgs> expected_;
40 };
41
42 class FakeBeginFrameSource : public BaseBeginFrameSource {
43 public:
44 FakeBeginFrameSource() : BaseBeginFrameSource(0) {}
45
46 void SendTestBeginFrame(const BeginFrameArgs& args) {
47 frame_sink_->BeginFrame(args);
48 }
49
50 protected:
51 virtual std::string TypeString() const OVERRIDE {
52 return "FakeBeginFrameSource";
53 }
54
55 FRIEND_TEST_ALL_PREFIXES(BeginFrameSourceTest, ProxyFrameSource);
56 FRIEND_TEST_ALL_PREFIXES(BeginFrameSourceTest, DualFrameSource);
57 };
58
59 TEST(BeginFrameSourceTest, ProxyFrameSource) {
60 FakeBeginFrameSink sink;
61 FakeBeginFrameSource source;
62
63 // BeginFrame
64 sink.Expect(CreateBeginFrameArgsForTesting(100, 200, 300));
65 sink.Expect(CreateBeginFrameArgsForTesting(400, 600, 300));
66 ProxyBeginFrameSource proxy(&sink, &source);
67 proxy.BeginFrame(CreateBeginFrameArgsForTesting(100, 200, 300));
68 proxy.BeginFrame(CreateBeginFrameArgsForTesting(400, 600, 300));
69
70 // SetGenerateFrames
71 source.generate_frames_ = false;
72 proxy.SetGenerateFrames(true);
73 EXPECT_EQ(source.generate_frames_, true);
74 proxy.SetGenerateFrames(false);
75 EXPECT_EQ(source.generate_frames_, false);
76
77 // PendingFrames
78
79 // SetTimeBaseAndInterval
80 source.timebase_ = base::TimeTicks();
81 source.interval_ = base::TimeDelta();
82 proxy.SetTimeBaseAndInterval(base::TimeTicks::FromInternalValue(123),
83 base::TimeDelta::FromInternalValue(456));
84 EXPECT_EQ(source.timebase_.ToInternalValue(), 123);
85 EXPECT_EQ(source.interval_.ToInternalValue(), 456);
86 }
87
88 TEST(BeginFrameSourceTest, ThrottledFrameSource) {
89 FakeBeginFrameSink sink;
90 FakeBeginFrameSource source;
91
92 ThrottledBeginFrameSource throttle(
93 &sink, &source, base::TimeDelta::FromInternalValue(600));
94
95 sink.Expect(CreateBeginFrameArgsForTesting(100, 200, 300));
96 sink.Expect(CreateBeginFrameArgsForTesting(700, 900, 300));
97 source.SendTestBeginFrame(CreateBeginFrameArgsForTesting(100, 200, 300));
98 source.SendTestBeginFrame(CreateBeginFrameArgsForTesting(400, 600, 300));
99 source.SendTestBeginFrame(CreateBeginFrameArgsForTesting(700, 900, 300));
100 }
101
102 TEST(BeginFrameSourceTest, BackToBackFrameSource) {
103 FakeBeginFrameSink sink;
104 // BackToBackBeginFrameSource source;
105 }
106
107 TEST(BeginFrameSourceTest, SyntheticFrameSource) {
108 FakeBeginFrameSink sink;
109 // SyntheticFrameSource
110 }
111
112 TEST(BeginFrameSourceTest, DualFrameSource) {
113 FakeBeginFrameSink sink;
114
115 FakeBeginFrameSource* fake_primary = new FakeBeginFrameSource();
116 fake_primary->generate_frames_ = false;
117 FakeBeginFrameSource* fake_secondary = new FakeBeginFrameSource();
118 fake_secondary->generate_frames_ = false;
119
120 DualBeginFrameSource source(&sink,
121 scoped_ptr<BeginFrameSource>(fake_primary),
122 scoped_ptr<BeginFrameSource>(fake_secondary));
123 source.SwitchSource(source.SourceForeground());
124
125 // Check SetGenerateFrames works
126 source.SetGenerateFrames(true);
127 EXPECT_EQ(fake_primary->generate_frames_, true);
128 EXPECT_EQ(fake_secondary->generate_frames_, false);
129 source.SetGenerateFrames(false);
130 EXPECT_EQ(fake_primary->generate_frames_, false);
131 EXPECT_EQ(fake_secondary->generate_frames_, false);
132
133 // Checking that switching the source makes SetGenerateFrames on the
134 // subsources correctly.
135 source.SetGenerateFrames(true);
136 source.SwitchSource(source.SourceBackground());
137 EXPECT_EQ(fake_primary->generate_frames_, false);
138 EXPECT_EQ(fake_secondary->generate_frames_, true);
139 source.SwitchSource(source.SourceForeground());
140 EXPECT_EQ(fake_primary->generate_frames_, true);
141 EXPECT_EQ(fake_secondary->generate_frames_, false);
142
143 sink.Reset();
144
145 // Check that BeginFrame calls end up at the sink
146 {
147 SCOPED_TRACE("First test");
148 sink.Expect(CreateBeginFrameArgsForTesting(100, 200, 300));
149 sink.Expect(CreateBeginFrameArgsForTesting(400, 600, 300));
150 fake_primary->SendTestBeginFrame(
151 CreateBeginFrameArgsForTesting(100, 200, 300));
152 fake_secondary->SendTestBeginFrame(
153 CreateBeginFrameArgsForTesting(400, 600, 300));
154 sink.Reset();
155 }
156
157 // Check that BeginFrames can't go backwards
158 {
159 SCOPED_TRACE("Backwards test");
160 sink.Expect(CreateBeginFrameArgsForTesting(400, 600, 300));
161 sink.Expect(CreateBeginFrameArgsForTesting(700, 900, 300));
162 sink.Expect(CreateBeginFrameArgsForTesting(1000, 1200, 300));
163 fake_primary->SendTestBeginFrame(
164 CreateBeginFrameArgsForTesting(400, 600, 300));
165 fake_primary->SendTestBeginFrame(
166 CreateBeginFrameArgsForTesting(700, 900, 300));
167 fake_secondary->SendTestBeginFrame(
168 CreateBeginFrameArgsForTesting(699, 899, 300));
169 fake_primary->SendTestBeginFrame(
170 CreateBeginFrameArgsForTesting(1000, 1200, 300));
171 sink.Reset();
172 }
173 }
174
175 } // namespace
176 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/frame_source.cc ('k') | cc/scheduler/scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698