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

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

Issue 761903003: Update from https://crrev.com/306655 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/scheduler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 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 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 <deque> 5 #include <deque>
6 #include <string> 6 #include <string>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/gtest_prod_util.h" 9 #include "base/gtest_prod_util.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "cc/scheduler/begin_frame_source.h" 11 #include "cc/scheduler/begin_frame_source.h"
12 #include "cc/test/begin_frame_args_test.h" 12 #include "cc/test/begin_frame_args_test.h"
13 #include "cc/test/scheduler_test_common.h" 13 #include "cc/test/scheduler_test_common.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 // Macros to help set up expected calls on the MockBeginFrameObserver. 17 // Macros to help set up expected calls on the MockBeginFrameObserver.
18 #define EXPECT_BEGIN_FRAME_DROP(obs, frame_time, deadline, interval) \ 18 #define EXPECT_BEGIN_FRAME_DROP(obs, frame_time, deadline, interval) \
19 { \ 19 { \
20 ::testing::Expectation exp = \ 20 ::testing::Expectation exp = \
21 EXPECT_CALL((obs), \ 21 EXPECT_CALL((obs), OnBeginFrame(CreateBeginFrameArgsForTesting( \
22 OnBeginFrame(CreateBeginFrameArgsForTesting( \ 22 BEGINFRAME_FROM_HERE, frame_time, deadline, \
23 frame_time, deadline, interval))) \ 23 interval))).InSequence((obs).sequence); \
24 .InSequence((obs).sequence); \
25 } 24 }
26 25
27 #define EXPECT_BEGIN_FRAME_USED(obs, frame_time, deadline, interval) \ 26 #define EXPECT_BEGIN_FRAME_USED(obs, frame_time, deadline, interval) \
28 { \ 27 { \
29 BeginFrameArgs args = \ 28 BeginFrameArgs args = CreateBeginFrameArgsForTesting( \
30 CreateBeginFrameArgsForTesting(frame_time, deadline, interval); \ 29 BEGINFRAME_FROM_HERE, frame_time, deadline, interval); \
31 ::testing::Expectation exp = \ 30 ::testing::Expectation exp = \
32 EXPECT_CALL((obs), OnBeginFrame(args)).InSequence((obs).sequence); \ 31 EXPECT_CALL((obs), OnBeginFrame(args)).InSequence((obs).sequence); \
33 EXPECT_CALL((obs), LastUsedBeginFrameArgs()) \ 32 EXPECT_CALL((obs), LastUsedBeginFrameArgs()) \
34 .Times(::testing::AnyNumber()) \ 33 .Times(::testing::AnyNumber()) \
35 .After(exp) \ 34 .After(exp) \
36 .WillRepeatedly(::testing::Return(args)); \ 35 .WillRepeatedly(::testing::Return(args)); \
37 } 36 }
38 37
39 // Macros to send BeginFrameArgs on a FakeBeginFrameSink (and verify resulting 38 // Macros to send BeginFrameArgs on a FakeBeginFrameSink (and verify resulting
40 // observer behaviour). 39 // observer behaviour).
41 #define SEND_BEGIN_FRAME(args_equal_to, source, frame_time, deadline, \ 40 #define SEND_BEGIN_FRAME(args_equal_to, source, frame_time, deadline, \
42 interval) \ 41 interval) \
43 { \ 42 { \
44 BeginFrameArgs old_args = (source).TestLastUsedBeginFrameArgs(); \ 43 BeginFrameArgs old_args = (source).TestLastUsedBeginFrameArgs(); \
45 BeginFrameArgs new_args = \ 44 BeginFrameArgs new_args = CreateBeginFrameArgsForTesting( \
46 CreateBeginFrameArgsForTesting(frame_time, deadline, interval); \ 45 BEGINFRAME_FROM_HERE, frame_time, deadline, interval); \
47 ASSERT_FALSE(old_args == new_args); \ 46 ASSERT_FALSE(old_args == new_args); \
48 (source).TestOnBeginFrame(new_args); \ 47 (source).TestOnBeginFrame(new_args); \
49 EXPECT_EQ(args_equal_to, (source).TestLastUsedBeginFrameArgs()); \ 48 EXPECT_EQ(args_equal_to, (source).TestLastUsedBeginFrameArgs()); \
50 } 49 }
51 50
52 // When dropping LastUsedBeginFrameArgs **shouldn't** change. 51 // When dropping LastUsedBeginFrameArgs **shouldn't** change.
53 #define SEND_BEGIN_FRAME_DROP(source, frame_time, deadline, interval) \ 52 #define SEND_BEGIN_FRAME_DROP(source, frame_time, deadline, interval) \
54 SEND_BEGIN_FRAME(old_args, source, frame_time, deadline, interval); 53 SEND_BEGIN_FRAME(old_args, source, frame_time, deadline, interval);
55 54
56 // When used LastUsedBeginFrameArgs **should** be updated. 55 // When used LastUsedBeginFrameArgs **should** be updated.
57 #define SEND_BEGIN_FRAME_USED(source, frame_time, deadline, interval) \ 56 #define SEND_BEGIN_FRAME_USED(source, frame_time, deadline, interval) \
58 SEND_BEGIN_FRAME(new_args, source, frame_time, deadline, interval); 57 SEND_BEGIN_FRAME(new_args, source, frame_time, deadline, interval);
59 58
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 TEST(MockBeginFrameObserverTest, ExpectOnBeginFrame) { 91 TEST(MockBeginFrameObserverTest, ExpectOnBeginFrame) {
93 ::testing::NiceMock<MockBeginFrameObserver> obs; 92 ::testing::NiceMock<MockBeginFrameObserver> obs;
94 EXPECT_BEGIN_FRAME_USED(obs, 100, 200, 300); 93 EXPECT_BEGIN_FRAME_USED(obs, 100, 200, 300);
95 EXPECT_BEGIN_FRAME_USED(obs, 400, 600, 300); 94 EXPECT_BEGIN_FRAME_USED(obs, 400, 600, 300);
96 EXPECT_BEGIN_FRAME_USED(obs, 700, 900, 300); 95 EXPECT_BEGIN_FRAME_USED(obs, 700, 900, 300);
97 96
98 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 97 EXPECT_EQ(obs.LastUsedBeginFrameArgs(),
99 MockBeginFrameObserver::kDefaultBeginFrameArgs); 98 MockBeginFrameObserver::kDefaultBeginFrameArgs);
100 99
101 obs.OnBeginFrame(CreateBeginFrameArgsForTesting( 100 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(
102 100, 200, 300)); // One call to LastUsedBeginFrameArgs 101 BEGINFRAME_FROM_HERE, 100, 200,
103 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 102 300)); // One call to LastUsedBeginFrameArgs
104 CreateBeginFrameArgsForTesting(100, 200, 300)); 103 EXPECT_EQ(
104 obs.LastUsedBeginFrameArgs(),
105 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300));
105 106
106 obs.OnBeginFrame(CreateBeginFrameArgsForTesting( 107 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(
107 400, 600, 300)); // Multiple calls to LastUsedBeginFrameArgs 108 BEGINFRAME_FROM_HERE, 400, 600,
108 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 109 300)); // Multiple calls to LastUsedBeginFrameArgs
109 CreateBeginFrameArgsForTesting(400, 600, 300)); 110 EXPECT_EQ(
110 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 111 obs.LastUsedBeginFrameArgs(),
111 CreateBeginFrameArgsForTesting(400, 600, 300)); 112 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 400, 600, 300));
113 EXPECT_EQ(
114 obs.LastUsedBeginFrameArgs(),
115 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 400, 600, 300));
112 116
113 obs.OnBeginFrame(CreateBeginFrameArgsForTesting( 117 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(
114 700, 900, 300)); // No calls to LastUsedBeginFrameArgs 118 BEGINFRAME_FROM_HERE, 700, 900,
119 300)); // No calls to LastUsedBeginFrameArgs
115 } 120 }
116 121
117 TEST(MockBeginFrameObserverTest, ExpectOnBeginFrameStatus) { 122 TEST(MockBeginFrameObserverTest, ExpectOnBeginFrameStatus) {
118 ::testing::NiceMock<MockBeginFrameObserver> obs; 123 ::testing::NiceMock<MockBeginFrameObserver> obs;
119 EXPECT_BEGIN_FRAME_USED(obs, 100, 200, 300); 124 EXPECT_BEGIN_FRAME_USED(obs, 100, 200, 300);
120 EXPECT_BEGIN_FRAME_DROP(obs, 400, 600, 300); 125 EXPECT_BEGIN_FRAME_DROP(obs, 400, 600, 300);
121 EXPECT_BEGIN_FRAME_DROP(obs, 450, 650, 300); 126 EXPECT_BEGIN_FRAME_DROP(obs, 450, 650, 300);
122 EXPECT_BEGIN_FRAME_USED(obs, 700, 900, 300); 127 EXPECT_BEGIN_FRAME_USED(obs, 700, 900, 300);
123 128
124 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 129 EXPECT_EQ(obs.LastUsedBeginFrameArgs(),
125 MockBeginFrameObserver::kDefaultBeginFrameArgs); 130 MockBeginFrameObserver::kDefaultBeginFrameArgs);
126 131
127 // Used 132 // Used
128 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(100, 200, 300)); 133 obs.OnBeginFrame(
129 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 134 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300));
130 CreateBeginFrameArgsForTesting(100, 200, 300)); 135 EXPECT_EQ(
136 obs.LastUsedBeginFrameArgs(),
137 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300));
131 138
132 // Dropped 139 // Dropped
133 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(400, 600, 300)); 140 obs.OnBeginFrame(
134 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 141 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 400, 600, 300));
135 CreateBeginFrameArgsForTesting(100, 200, 300)); 142 EXPECT_EQ(
143 obs.LastUsedBeginFrameArgs(),
144 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300));
136 145
137 // Dropped 146 // Dropped
138 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(450, 650, 300)); 147 obs.OnBeginFrame(
139 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 148 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 450, 650, 300));
140 CreateBeginFrameArgsForTesting(100, 200, 300)); 149 EXPECT_EQ(
150 obs.LastUsedBeginFrameArgs(),
151 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300));
141 152
142 // Used 153 // Used
143 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(700, 900, 300)); 154 obs.OnBeginFrame(
144 EXPECT_EQ(obs.LastUsedBeginFrameArgs(), 155 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 700, 900, 300));
145 CreateBeginFrameArgsForTesting(700, 900, 300)); 156 EXPECT_EQ(
157 obs.LastUsedBeginFrameArgs(),
158 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 700, 900, 300));
146 } 159 }
147 160
148 const BeginFrameArgs MockBeginFrameObserver::kDefaultBeginFrameArgs = 161 const BeginFrameArgs MockBeginFrameObserver::kDefaultBeginFrameArgs =
149 CreateBeginFrameArgsForTesting(-1, -1, -1); 162 CreateBeginFrameArgsForTesting(
163 #ifdef NDEBUG
164 nullptr,
165 #else
166 FROM_HERE_WITH_EXPLICIT_FUNCTION(
167 "MockBeginFrameObserver::kDefaultBeginFrameArgs"),
168 #endif
169 -1,
170 -1,
171 -1);
150 172
151 // BeginFrameObserverMixIn testing --------------------------------------- 173 // BeginFrameObserverMixIn testing ---------------------------------------
152 class MockMinimalBeginFrameObserverMixIn : public BeginFrameObserverMixIn { 174 class MockMinimalBeginFrameObserverMixIn : public BeginFrameObserverMixIn {
153 public: 175 public:
154 MOCK_METHOD1(OnBeginFrameMixInDelegate, bool(const BeginFrameArgs&)); 176 MOCK_METHOD1(OnBeginFrameMixInDelegate, bool(const BeginFrameArgs&));
155 int64_t dropped_begin_frame_args() const { return dropped_begin_frame_args_; } 177 int64_t dropped_begin_frame_args() const { return dropped_begin_frame_args_; }
156 }; 178 };
157 179
158 TEST(BeginFrameObserverMixInTest, OnBeginFrameImplementation) { 180 TEST(BeginFrameObserverMixInTest, OnBeginFrameImplementation) {
159 using ::testing::Return; 181 using ::testing::Return;
160 MockMinimalBeginFrameObserverMixIn obs; 182 MockMinimalBeginFrameObserverMixIn obs;
161 ::testing::InSequence ordered; // These calls should be ordered 183 ::testing::InSequence ordered; // These calls should be ordered
162 184
163 // Initial conditions 185 // Initial conditions
164 EXPECT_EQ(BeginFrameArgs(), obs.LastUsedBeginFrameArgs()); 186 EXPECT_EQ(BeginFrameArgs(), obs.LastUsedBeginFrameArgs());
165 EXPECT_EQ(0, obs.dropped_begin_frame_args()); 187 EXPECT_EQ(0, obs.dropped_begin_frame_args());
166 188
167 #ifndef NDEBUG 189 #ifndef NDEBUG
168 EXPECT_DEATH({ obs.OnBeginFrame(BeginFrameArgs()); }, ""); 190 EXPECT_DEATH({ obs.OnBeginFrame(BeginFrameArgs()); }, "");
169 #endif 191 #endif
170 192
171 BeginFrameArgs args1 = CreateBeginFrameArgsForTesting(100, 200, 300); 193 BeginFrameArgs args1 =
194 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300);
172 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args1)).WillOnce(Return(true)); 195 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args1)).WillOnce(Return(true));
173 obs.OnBeginFrame(args1); 196 obs.OnBeginFrame(args1);
174 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs()); 197 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs());
175 EXPECT_EQ(0, obs.dropped_begin_frame_args()); 198 EXPECT_EQ(0, obs.dropped_begin_frame_args());
176 199
177 #ifndef NDEBUG 200 #ifndef NDEBUG
178 EXPECT_DEATH( 201 EXPECT_DEATH({
179 { obs.OnBeginFrame(CreateBeginFrameArgsForTesting(50, 200, 300)); }, ""); 202 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(
203 BEGINFRAME_FROM_HERE, 50, 200, 300));
204 },
205 "");
180 #endif 206 #endif
181 207
182 // Returning false shouldn't update the LastUsedBeginFrameArgs value. 208 // Returning false shouldn't update the LastUsedBeginFrameArgs value.
183 BeginFrameArgs args2 = CreateBeginFrameArgsForTesting(200, 300, 400); 209 BeginFrameArgs args2 =
210 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 200, 300, 400);
184 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args2)).WillOnce(Return(false)); 211 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args2)).WillOnce(Return(false));
185 obs.OnBeginFrame(args2); 212 obs.OnBeginFrame(args2);
186 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs()); 213 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs());
187 EXPECT_EQ(1, obs.dropped_begin_frame_args()); 214 EXPECT_EQ(1, obs.dropped_begin_frame_args());
188 215
189 BeginFrameArgs args3 = CreateBeginFrameArgsForTesting(150, 300, 400); 216 BeginFrameArgs args3 =
217 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 150, 300, 400);
190 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args3)).WillOnce(Return(true)); 218 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args3)).WillOnce(Return(true));
191 obs.OnBeginFrame(args3); 219 obs.OnBeginFrame(args3);
192 EXPECT_EQ(args3, obs.LastUsedBeginFrameArgs()); 220 EXPECT_EQ(args3, obs.LastUsedBeginFrameArgs());
193 EXPECT_EQ(1, obs.dropped_begin_frame_args()); 221 EXPECT_EQ(1, obs.dropped_begin_frame_args());
194 } 222 }
195 223
196 // BeginFrameSource testing ---------------------------------------------- 224 // BeginFrameSource testing ----------------------------------------------
197 TEST(BeginFrameSourceMixInTest, ObserverManipulation) { 225 TEST(BeginFrameSourceMixInTest, ObserverManipulation) {
198 MockBeginFrameObserver obs; 226 MockBeginFrameObserver obs;
199 MockBeginFrameObserver otherObs; 227 MockBeginFrameObserver otherObs;
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 source_->AddObserver(obs_.get()); 516 source_->AddObserver(obs_.get());
489 } 517 }
490 518
491 void TearDown() override { obs_.reset(); } 519 void TearDown() override { obs_.reset(); }
492 }; 520 };
493 521
494 TEST_F(SyntheticBeginFrameSourceTest, 522 TEST_F(SyntheticBeginFrameSourceTest,
495 SetNeedsBeginFramesCallsOnBeginFrameWithMissedTick) { 523 SetNeedsBeginFramesCallsOnBeginFrameWithMissedTick) {
496 now_src_->SetNowMicroseconds(10010); 524 now_src_->SetNowMicroseconds(10010);
497 EXPECT_CALL((*obs_), OnBeginFrame(CreateBeginFrameArgsForTesting( 525 EXPECT_CALL((*obs_), OnBeginFrame(CreateBeginFrameArgsForTesting(
498 10000, 20000, 10000, BeginFrameArgs::MISSED))); 526 BEGINFRAME_FROM_HERE, 10000, 20000, 10000,
527 BeginFrameArgs::MISSED)));
499 source_->SetNeedsBeginFrames(true); // Should cause the last tick to be sent 528 source_->SetNeedsBeginFrames(true); // Should cause the last tick to be sent
500 // No tasks should need to be run for this to occur. 529 // No tasks should need to be run for this to occur.
501 } 530 }
502 531
503 TEST_F(SyntheticBeginFrameSourceTest, 532 TEST_F(SyntheticBeginFrameSourceTest,
504 SetNeedsBeginFramesCallsCausesOnBeginFrame) { 533 SetNeedsBeginFramesCallsCausesOnBeginFrame) {
505 source_->SetNeedsBeginFrames(true); 534 source_->SetNeedsBeginFrames(true);
506 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue()); 535 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue());
507 536
508 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 537 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 mux_->SetActiveSource(source2_); 766 mux_->SetActiveSource(source2_);
738 SEND_BEGIN_FRAME_DROP(*source2_, 750, 1050, 300); 767 SEND_BEGIN_FRAME_DROP(*source2_, 750, 1050, 300);
739 SEND_BEGIN_FRAME_USED(*source2_, 1050, 1250, 300); 768 SEND_BEGIN_FRAME_USED(*source2_, 1050, 1250, 300);
740 769
741 mux_->SetActiveSource(source1_); 770 mux_->SetActiveSource(source1_);
742 SEND_BEGIN_FRAME_DROP(*source2_, 1100, 1400, 300); 771 SEND_BEGIN_FRAME_DROP(*source2_, 1100, 1400, 300);
743 } 772 }
744 773
745 } // namespace 774 } // namespace
746 } // namespace cc 775 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698