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

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

Issue 735723005: cc: Adding creation location to debug BeginFrameArgs objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Patch without DEPS. Created 6 years, 1 month 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 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( \ 40 #define SEND_BEGIN_FRAME(args_equal_to, source, frame_time, deadline, \
42 args_equal_to, source, frame_time, deadline, 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_TRUE(!(old_args == new_args)); \ 46 ASSERT_TRUE(!(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 new FROM_HERE_WITH_EXPLICIT_FUNCTION(
164 "MockBeginFrameObserver::kDefaultBeginFrameArgs"),
165 -1,
166 -1,
167 -1);
150 168
151 // BeginFrameObserverMixIn testing --------------------------------------- 169 // BeginFrameObserverMixIn testing ---------------------------------------
152 class MockMinimalBeginFrameObserverMixIn : public BeginFrameObserverMixIn { 170 class MockMinimalBeginFrameObserverMixIn : public BeginFrameObserverMixIn {
153 public: 171 public:
154 MOCK_METHOD1(OnBeginFrameMixInDelegate, bool(const BeginFrameArgs&)); 172 MOCK_METHOD1(OnBeginFrameMixInDelegate, bool(const BeginFrameArgs&));
155 int64_t dropped_begin_frame_args() const { return dropped_begin_frame_args_; } 173 int64_t dropped_begin_frame_args() const { return dropped_begin_frame_args_; }
156 }; 174 };
157 175
158 TEST(BeginFrameObserverMixInTest, OnBeginFrameImplementation) { 176 TEST(BeginFrameObserverMixInTest, OnBeginFrameImplementation) {
159 using ::testing::Return; 177 using ::testing::Return;
160 MockMinimalBeginFrameObserverMixIn obs; 178 MockMinimalBeginFrameObserverMixIn obs;
161 ::testing::InSequence ordered; // These calls should be ordered 179 ::testing::InSequence ordered; // These calls should be ordered
162 180
163 // Initial conditions 181 // Initial conditions
164 EXPECT_EQ(BeginFrameArgs(), obs.LastUsedBeginFrameArgs()); 182 EXPECT_EQ(BeginFrameArgs(), obs.LastUsedBeginFrameArgs());
165 EXPECT_EQ(0, obs.dropped_begin_frame_args()); 183 EXPECT_EQ(0, obs.dropped_begin_frame_args());
166 184
167 #ifndef NDEBUG 185 #ifndef NDEBUG
168 EXPECT_DEATH({ obs.OnBeginFrame(BeginFrameArgs()); }, ""); 186 EXPECT_DEATH({ obs.OnBeginFrame(BeginFrameArgs()); }, "");
169 #endif 187 #endif
170 188
171 BeginFrameArgs args1 = CreateBeginFrameArgsForTesting(100, 200, 300); 189 BeginFrameArgs args1 =
190 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300);
172 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args1)).WillOnce(Return(true)); 191 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args1)).WillOnce(Return(true));
173 obs.OnBeginFrame(args1); 192 obs.OnBeginFrame(args1);
174 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs()); 193 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs());
175 EXPECT_EQ(0, obs.dropped_begin_frame_args()); 194 EXPECT_EQ(0, obs.dropped_begin_frame_args());
176 195
177 #ifndef NDEBUG 196 #ifndef NDEBUG
178 EXPECT_DEATH( 197 EXPECT_DEATH({
179 { obs.OnBeginFrame(CreateBeginFrameArgsForTesting(50, 200, 300)); }, ""); 198 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(
199 BEGINFRAME_FROM_HERE, 50, 200, 300));
200 },
201 "");
180 #endif 202 #endif
181 203
182 // Returning false shouldn't update the LastUsedBeginFrameArgs value. 204 // Returning false shouldn't update the LastUsedBeginFrameArgs value.
183 BeginFrameArgs args2 = CreateBeginFrameArgsForTesting(200, 300, 400); 205 BeginFrameArgs args2 =
206 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 200, 300, 400);
184 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args2)).WillOnce(Return(false)); 207 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args2)).WillOnce(Return(false));
185 obs.OnBeginFrame(args2); 208 obs.OnBeginFrame(args2);
186 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs()); 209 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs());
187 EXPECT_EQ(1, obs.dropped_begin_frame_args()); 210 EXPECT_EQ(1, obs.dropped_begin_frame_args());
188 211
189 BeginFrameArgs args3 = CreateBeginFrameArgsForTesting(150, 300, 400); 212 BeginFrameArgs args3 =
213 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 150, 300, 400);
190 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args3)).WillOnce(Return(true)); 214 EXPECT_CALL(obs, OnBeginFrameMixInDelegate(args3)).WillOnce(Return(true));
191 obs.OnBeginFrame(args3); 215 obs.OnBeginFrame(args3);
192 EXPECT_EQ(args3, obs.LastUsedBeginFrameArgs()); 216 EXPECT_EQ(args3, obs.LastUsedBeginFrameArgs());
193 EXPECT_EQ(1, obs.dropped_begin_frame_args()); 217 EXPECT_EQ(1, obs.dropped_begin_frame_args());
194 } 218 }
195 219
196 // BeginFrameSource testing ---------------------------------------------- 220 // BeginFrameSource testing ----------------------------------------------
197 TEST(BeginFrameSourceMixInTest, ObserverManipulation) { 221 TEST(BeginFrameSourceMixInTest, ObserverManipulation) {
198 MockBeginFrameObserver obs; 222 MockBeginFrameObserver obs;
199 MockBeginFrameObserver otherObs; 223 MockBeginFrameObserver otherObs;
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 source_->AddObserver(obs_.get()); 512 source_->AddObserver(obs_.get());
489 } 513 }
490 514
491 void TearDown() override { obs_.reset(); } 515 void TearDown() override { obs_.reset(); }
492 }; 516 };
493 517
494 TEST_F(SyntheticBeginFrameSourceTest, 518 TEST_F(SyntheticBeginFrameSourceTest,
495 SetNeedsBeginFramesCallsOnBeginFrameWithMissedTick) { 519 SetNeedsBeginFramesCallsOnBeginFrameWithMissedTick) {
496 now_src_->SetNowMicroseconds(10010); 520 now_src_->SetNowMicroseconds(10010);
497 EXPECT_CALL((*obs_), OnBeginFrame(CreateBeginFrameArgsForTesting( 521 EXPECT_CALL((*obs_), OnBeginFrame(CreateBeginFrameArgsForTesting(
498 10000, 20000, 10000, BeginFrameArgs::MISSED))); 522 BEGINFRAME_FROM_HERE, 10000, 20000, 10000,
523 BeginFrameArgs::MISSED)));
499 source_->SetNeedsBeginFrames(true); // Should cause the last tick to be sent 524 source_->SetNeedsBeginFrames(true); // Should cause the last tick to be sent
500 // No tasks should need to be run for this to occur. 525 // No tasks should need to be run for this to occur.
501 } 526 }
502 527
503 TEST_F(SyntheticBeginFrameSourceTest, 528 TEST_F(SyntheticBeginFrameSourceTest,
504 SetNeedsBeginFramesCallsCausesOnBeginFrame) { 529 SetNeedsBeginFramesCallsCausesOnBeginFrame) {
505 source_->SetNeedsBeginFrames(true); 530 source_->SetNeedsBeginFrames(true);
506 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue()); 531 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue());
507 532
508 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 533 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 mux_->SetActiveSource(source2_); 762 mux_->SetActiveSource(source2_);
738 SEND_BEGIN_FRAME_DROP(*source2_, 750, 1050, 300); 763 SEND_BEGIN_FRAME_DROP(*source2_, 750, 1050, 300);
739 SEND_BEGIN_FRAME_USED(*source2_, 1050, 1250, 300); 764 SEND_BEGIN_FRAME_USED(*source2_, 1050, 1250, 300);
740 765
741 mux_->SetActiveSource(source1_); 766 mux_->SetActiveSource(source1_);
742 SEND_BEGIN_FRAME_DROP(*source2_, 1100, 1400, 300); 767 SEND_BEGIN_FRAME_DROP(*source2_, 1100, 1400, 300);
743 } 768 }
744 769
745 } // namespace 770 } // namespace
746 } // namespace cc 771 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698