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

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

Issue 2583483002: [cc] Adds source_id and sequence_number to BeginFrameArgs. (Closed)
Patch Set: fix field ordering Created 4 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_unittest.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 "cc/scheduler/begin_frame_source.h" 5 #include "cc/scheduler/begin_frame_source.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "cc/test/begin_frame_args_test.h" 11 #include "cc/test/begin_frame_args_test.h"
12 #include "cc/test/begin_frame_source_test.h" 12 #include "cc/test/begin_frame_source_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 using testing::StrictMock; 17 using testing::StrictMock;
18 18
19 namespace cc { 19 namespace cc {
20 namespace { 20 namespace {
21 21
22 // BeginFrameSource testing ----------------------------------------------------
23 TEST(BeginFrameSourceTest, SourceIdsAreUnique) {
24 StubBeginFrameSource source1;
25 StubBeginFrameSource source2;
26 StubBeginFrameSource source3;
27 EXPECT_NE(source1.source_id(), source2.source_id());
28 EXPECT_NE(source1.source_id(), source3.source_id());
29 EXPECT_NE(source2.source_id(), source3.source_id());
30 }
31
32 // BackToBackBeginFrameSource testing ------------------------------------------
22 class BackToBackBeginFrameSourceTest : public ::testing::Test { 33 class BackToBackBeginFrameSourceTest : public ::testing::Test {
23 protected: 34 protected:
24 static const int64_t kDeadline; 35 static const int64_t kDeadline;
25 static const int64_t kInterval; 36 static const int64_t kInterval;
26 37
27 void SetUp() override { 38 void SetUp() override {
28 now_src_.reset(new base::SimpleTestTickClock()); 39 now_src_.reset(new base::SimpleTestTickClock());
29 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); 40 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
30 task_runner_ = 41 task_runner_ =
31 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); 42 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false));
(...skipping 16 matching lines...) Expand all
48 const int64_t BackToBackBeginFrameSourceTest::kDeadline = 59 const int64_t BackToBackBeginFrameSourceTest::kDeadline =
49 BeginFrameArgs::DefaultInterval().ToInternalValue(); 60 BeginFrameArgs::DefaultInterval().ToInternalValue();
50 61
51 const int64_t BackToBackBeginFrameSourceTest::kInterval = 62 const int64_t BackToBackBeginFrameSourceTest::kInterval =
52 BeginFrameArgs::DefaultInterval().ToInternalValue(); 63 BeginFrameArgs::DefaultInterval().ToInternalValue();
53 64
54 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) { 65 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) {
55 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 66 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
56 source_->AddObserver(obs_.get()); 67 source_->AddObserver(obs_.get());
57 EXPECT_TRUE(task_runner_->HasPendingTasks()); 68 EXPECT_TRUE(task_runner_->HasPendingTasks());
58 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 69 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
70 1000 + kDeadline, kInterval);
59 task_runner_->RunPendingTasks(); 71 task_runner_->RunPendingTasks();
60 72
61 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); 73 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
74 1100 + kDeadline, kInterval);
62 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 75 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
63 source_->DidFinishFrame(obs_.get(), 0); 76 source_->DidFinishFrame(obs_.get(), 0);
64 task_runner_->RunPendingTasks(); 77 task_runner_->RunPendingTasks();
65 } 78 }
66 79
67 TEST_F(BackToBackBeginFrameSourceTest, 80 TEST_F(BackToBackBeginFrameSourceTest,
68 DidFinishFrameThenRemoveObserverProducesNoFrame) { 81 RemoveObserverThenDidFinishFrameProducesNoFrame) {
69 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 82 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
70 source_->AddObserver(obs_.get()); 83 source_->AddObserver(obs_.get());
71 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 84 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
85 1000 + kDeadline, kInterval);
72 task_runner_->RunPendingTasks(); 86 task_runner_->RunPendingTasks();
73 87
74 source_->RemoveObserver(obs_.get()); 88 source_->RemoveObserver(obs_.get());
75 source_->DidFinishFrame(obs_.get(), 0); 89 source_->DidFinishFrame(obs_.get(), 0);
76 90
77 // Verify no BeginFrame is sent to |obs_|. There is a pending task in the 91 // Verify no BeginFrame is sent to |obs_|. There is a pending task in the
78 // task_runner_ as a BeginFrame was posted, but it gets aborted since |obs_| 92 // task_runner_ as a BeginFrame was posted, but it gets aborted since |obs_|
79 // is removed. 93 // is removed.
80 task_runner_->RunPendingTasks(); 94 task_runner_->RunPendingTasks();
81 EXPECT_FALSE(task_runner_->HasPendingTasks()); 95 EXPECT_FALSE(task_runner_->HasPendingTasks());
82 } 96 }
83 97
84 TEST_F(BackToBackBeginFrameSourceTest, 98 TEST_F(BackToBackBeginFrameSourceTest,
85 RemoveObserverThenDidFinishFrameProducesNoFrame) { 99 DidFinishFrameThenRemoveObserverProducesNoFrame) {
86 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 100 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
87 source_->AddObserver(obs_.get()); 101 source_->AddObserver(obs_.get());
88 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 102 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
103 1000 + kDeadline, kInterval);
89 task_runner_->RunPendingTasks(); 104 task_runner_->RunPendingTasks();
90 105
91 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 106 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
92 source_->DidFinishFrame(obs_.get(), 0); 107 source_->DidFinishFrame(obs_.get(), 0);
93 source_->RemoveObserver(obs_.get()); 108 source_->RemoveObserver(obs_.get());
94 109
95 EXPECT_TRUE(task_runner_->HasPendingTasks()); 110 EXPECT_TRUE(task_runner_->HasPendingTasks());
96 task_runner_->RunPendingTasks(); 111 task_runner_->RunPendingTasks();
97 } 112 }
98 113
99 TEST_F(BackToBackBeginFrameSourceTest, 114 TEST_F(BackToBackBeginFrameSourceTest,
100 TogglingObserverThenDidFinishFrameProducesCorrectFrame) { 115 TogglingObserverThenDidFinishFrameProducesCorrectFrame) {
101 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 116 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
102 source_->AddObserver(obs_.get()); 117 source_->AddObserver(obs_.get());
103 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 118 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
119 1000 + kDeadline, kInterval);
104 task_runner_->RunPendingTasks(); 120 task_runner_->RunPendingTasks();
105 121
106 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 122 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
107 source_->RemoveObserver(obs_.get()); 123 source_->RemoveObserver(obs_.get());
108 124
109 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 125 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
110 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 126 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
111 source_->AddObserver(obs_.get()); 127 source_->AddObserver(obs_.get());
112 128
113 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 129 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
114 source_->DidFinishFrame(obs_.get(), 0); 130 source_->DidFinishFrame(obs_.get(), 0);
115 131
116 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 132 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
117 // The begin frame is posted at the time when the observer was added, 133 // The begin frame is posted at the time when the observer was added,
118 // so it ignores changes to "now" afterward. 134 // so it ignores changes to "now" afterward.
119 EXPECT_BEGIN_FRAME_USED(*obs_, 1110, 1110 + kDeadline, kInterval); 135 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1110,
136 1110 + kDeadline, kInterval);
120 EXPECT_TRUE(task_runner_->HasPendingTasks()); 137 EXPECT_TRUE(task_runner_->HasPendingTasks());
121 task_runner_->RunPendingTasks(); 138 task_runner_->RunPendingTasks();
122 } 139 }
123 140
124 TEST_F(BackToBackBeginFrameSourceTest, 141 TEST_F(BackToBackBeginFrameSourceTest,
125 DidFinishFrameThenTogglingObserverProducesCorrectFrame) { 142 DidFinishFrameThenTogglingObserverProducesCorrectFrame) {
126 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 143 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
127 source_->AddObserver(obs_.get()); 144 source_->AddObserver(obs_.get());
128 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 145 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
146 1000 + kDeadline, kInterval);
129 task_runner_->RunPendingTasks(); 147 task_runner_->RunPendingTasks();
130 148
131 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 149 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
132 source_->DidFinishFrame(obs_.get(), 0); 150 source_->DidFinishFrame(obs_.get(), 0);
133 151
134 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 152 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
135 source_->RemoveObserver(obs_.get()); 153 source_->RemoveObserver(obs_.get());
136 154
137 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 155 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
138 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 156 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
139 source_->AddObserver(obs_.get()); 157 source_->AddObserver(obs_.get());
140 158
141 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 159 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
142 // Ticks at the time at which the observer was added, ignoring the 160 // Ticks at the time at which the observer was added, ignoring the
143 // last change to "now". 161 // last change to "now".
144 EXPECT_BEGIN_FRAME_USED(*obs_, 1120, 1120 + kDeadline, kInterval); 162 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1120,
163 1120 + kDeadline, kInterval);
145 EXPECT_TRUE(task_runner_->HasPendingTasks()); 164 EXPECT_TRUE(task_runner_->HasPendingTasks());
146 task_runner_->RunPendingTasks(); 165 task_runner_->RunPendingTasks();
147 } 166 }
148 167
149 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) { 168 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) {
150 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 169 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
151 source_->AddObserver(obs_.get()); 170 source_->AddObserver(obs_.get());
152 source_->RemoveObserver(obs_.get()); 171 source_->RemoveObserver(obs_.get());
153 source_->DidFinishFrame(obs_.get(), 0); 172 source_->DidFinishFrame(obs_.get(), 0);
154 EXPECT_FALSE(task_runner_->RunPendingTasks()); 173 EXPECT_FALSE(task_runner_->RunPendingTasks());
155 } 174 }
156 175
157 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) { 176 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) {
158 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 177 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
159 source_->AddObserver(obs_.get()); 178 source_->AddObserver(obs_.get());
160 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 179 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
180 1000 + kDeadline, kInterval);
161 // Runs the pending begin frame. 181 // Runs the pending begin frame.
162 task_runner_->RunPendingTasks(); 182 task_runner_->RunPendingTasks();
163 // While running the begin frame, the next frame was cancelled, this 183 // While running the begin frame, the next frame was cancelled, this
164 // runs the next frame, sees it was cancelled, and goes to sleep. 184 // runs the next frame, sees it was cancelled, and goes to sleep.
165 task_runner_->RunPendingTasks(); 185 task_runner_->RunPendingTasks();
166 EXPECT_FALSE(task_runner_->HasPendingTasks()); 186 EXPECT_FALSE(task_runner_->HasPendingTasks());
167 187
168 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 188 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
169 189
170 source_->DidFinishFrame(obs_.get(), 3); 190 source_->DidFinishFrame(obs_.get(), 3);
171 EXPECT_FALSE(task_runner_->HasPendingTasks()); 191 EXPECT_FALSE(task_runner_->HasPendingTasks());
172 source_->DidFinishFrame(obs_.get(), 2); 192 source_->DidFinishFrame(obs_.get(), 2);
173 EXPECT_FALSE(task_runner_->HasPendingTasks()); 193 EXPECT_FALSE(task_runner_->HasPendingTasks());
174 source_->DidFinishFrame(obs_.get(), 1); 194 source_->DidFinishFrame(obs_.get(), 1);
175 EXPECT_FALSE(task_runner_->HasPendingTasks()); 195 EXPECT_FALSE(task_runner_->HasPendingTasks());
176 196
177 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); 197 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
198 1100 + kDeadline, kInterval);
178 source_->DidFinishFrame(obs_.get(), 0); 199 source_->DidFinishFrame(obs_.get(), 0);
179 EXPECT_EQ(base::TimeDelta(), task_runner_->DelayToNextTaskTime()); 200 EXPECT_EQ(base::TimeDelta(), task_runner_->DelayToNextTaskTime());
180 task_runner_->RunPendingTasks(); 201 task_runner_->RunPendingTasks();
181 } 202 }
182 203
183 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameMultipleCallsIdempotent) { 204 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameMultipleCallsIdempotent) {
184 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 205 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
185 source_->AddObserver(obs_.get()); 206 source_->AddObserver(obs_.get());
186 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 207 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
208 1000 + kDeadline, kInterval);
187 task_runner_->RunPendingTasks(); 209 task_runner_->RunPendingTasks();
188 210
189 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 211 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
190 source_->DidFinishFrame(obs_.get(), 0); 212 source_->DidFinishFrame(obs_.get(), 0);
191 source_->DidFinishFrame(obs_.get(), 0); 213 source_->DidFinishFrame(obs_.get(), 0);
192 source_->DidFinishFrame(obs_.get(), 0); 214 source_->DidFinishFrame(obs_.get(), 0);
193 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); 215 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
216 1100 + kDeadline, kInterval);
194 task_runner_->RunPendingTasks(); 217 task_runner_->RunPendingTasks();
195 218
196 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 219 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
197 source_->DidFinishFrame(obs_.get(), 0); 220 source_->DidFinishFrame(obs_.get(), 0);
198 source_->DidFinishFrame(obs_.get(), 0); 221 source_->DidFinishFrame(obs_.get(), 0);
199 source_->DidFinishFrame(obs_.get(), 0); 222 source_->DidFinishFrame(obs_.get(), 0);
200 EXPECT_BEGIN_FRAME_USED(*obs_, 1200, 1200 + kDeadline, kInterval); 223 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 1200,
224 1200 + kDeadline, kInterval);
201 task_runner_->RunPendingTasks(); 225 task_runner_->RunPendingTasks();
202 } 226 }
203 227
204 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) { 228 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) {
205 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 229 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
206 source_->AddObserver(obs_.get()); 230 source_->AddObserver(obs_.get());
207 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 231 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
232 1000 + kDeadline, kInterval);
208 task_runner_->RunPendingTasks(); 233 task_runner_->RunPendingTasks();
209 234
210 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 235 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
211 source_->DidFinishFrame(obs_.get(), 0); 236 source_->DidFinishFrame(obs_.get(), 0);
212 now_src_->Advance(base::TimeDelta::FromMicroseconds(50)); 237 now_src_->Advance(base::TimeDelta::FromMicroseconds(50));
213 // Ticks at the time the last frame finished, so ignores the last change to 238 // Ticks at the time the last frame finished, so ignores the last change to
214 // "now". 239 // "now".
215 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); 240 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
241 1100 + kDeadline, kInterval);
216 242
217 EXPECT_TRUE(task_runner_->HasPendingTasks()); 243 EXPECT_TRUE(task_runner_->HasPendingTasks());
218 task_runner_->RunPendingTasks(); 244 task_runner_->RunPendingTasks();
219 } 245 }
220 246
221 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) { 247 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) {
222 StrictMock<MockBeginFrameObserver> obs1, obs2; 248 StrictMock<MockBeginFrameObserver> obs1, obs2;
223 249
224 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 250 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
225 source_->AddObserver(&obs1); 251 source_->AddObserver(&obs1);
226 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 252 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
227 source_->AddObserver(&obs2); 253 source_->AddObserver(&obs2);
228 254
229 EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval); 255 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
230 EXPECT_BEGIN_FRAME_USED(obs2, 1000, 1000 + kDeadline, kInterval); 256 kInterval);
257 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
258 kInterval);
231 task_runner_->RunPendingTasks(); 259 task_runner_->RunPendingTasks();
232 260
233 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 261 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
234 source_->DidFinishFrame(&obs1, 0); 262 source_->DidFinishFrame(&obs1, 0);
235 source_->DidFinishFrame(&obs2, 0); 263 source_->DidFinishFrame(&obs2, 0);
236 EXPECT_BEGIN_FRAME_USED(obs1, 1100, 1100 + kDeadline, kInterval); 264 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline,
237 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); 265 kInterval);
266 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
267 kInterval);
238 task_runner_->RunPendingTasks(); 268 task_runner_->RunPendingTasks();
239 269
240 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 270 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
241 source_->DidFinishFrame(&obs1, 0); 271 source_->DidFinishFrame(&obs1, 0);
242 source_->DidFinishFrame(&obs2, 0); 272 source_->DidFinishFrame(&obs2, 0);
243 EXPECT_TRUE(task_runner_->HasPendingTasks()); 273 EXPECT_TRUE(task_runner_->HasPendingTasks());
244 source_->RemoveObserver(&obs1); 274 source_->RemoveObserver(&obs1);
245 source_->RemoveObserver(&obs2); 275 source_->RemoveObserver(&obs2);
246 task_runner_->RunPendingTasks(); 276 task_runner_->RunPendingTasks();
247 } 277 }
248 278
249 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversInterleaved) { 279 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversInterleaved) {
250 StrictMock<MockBeginFrameObserver> obs1, obs2; 280 StrictMock<MockBeginFrameObserver> obs1, obs2;
251 281
252 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 282 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
253 source_->AddObserver(&obs1); 283 source_->AddObserver(&obs1);
254 EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval); 284 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
285 kInterval);
255 task_runner_->RunPendingTasks(); 286 task_runner_->RunPendingTasks();
256 287
257 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 288 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
258 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 289 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
259 source_->AddObserver(&obs2); 290 source_->AddObserver(&obs2);
260 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); 291 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
292 kInterval);
261 task_runner_->RunPendingTasks(); 293 task_runner_->RunPendingTasks();
262 294
263 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 295 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
264 source_->DidFinishFrame(&obs1, 0); 296 source_->DidFinishFrame(&obs1, 0);
265 EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval); 297 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 3, 1200, 1200 + kDeadline,
298 kInterval);
266 task_runner_->RunPendingTasks(); 299 task_runner_->RunPendingTasks();
267 300
268 source_->DidFinishFrame(&obs1, 0); 301 source_->DidFinishFrame(&obs1, 0);
269 source_->RemoveObserver(&obs1); 302 source_->RemoveObserver(&obs1);
270 // Removing all finished observers should disable the time source. 303 // Removing all finished observers should disable the time source.
271 EXPECT_FALSE(delay_based_time_source_->Active()); 304 EXPECT_FALSE(delay_based_time_source_->Active());
272 // Finishing the frame for |obs1| posts a begin frame task, which will be 305 // Finishing the frame for |obs1| posts a begin frame task, which will be
273 // aborted since |obs1| is removed. Clear that from the task runner. 306 // aborted since |obs1| is removed. Clear that from the task runner.
274 task_runner_->RunPendingTasks(); 307 task_runner_->RunPendingTasks();
275 308
276 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 309 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
277 source_->DidFinishFrame(&obs2, 0); 310 source_->DidFinishFrame(&obs2, 0);
278 EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval); 311 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 1300, 1300 + kDeadline,
312 kInterval);
279 task_runner_->RunPendingTasks(); 313 task_runner_->RunPendingTasks();
280 314
281 source_->DidFinishFrame(&obs2, 0); 315 source_->DidFinishFrame(&obs2, 0);
282 source_->RemoveObserver(&obs2); 316 source_->RemoveObserver(&obs2);
283 } 317 }
284 318
285 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) { 319 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) {
286 StrictMock<MockBeginFrameObserver> obs1, obs2; 320 StrictMock<MockBeginFrameObserver> obs1, obs2;
287 321
288 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 322 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
289 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 323 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
290 source_->AddObserver(&obs1); 324 source_->AddObserver(&obs1);
291 source_->AddObserver(&obs2); 325 source_->AddObserver(&obs2);
292 EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval); 326 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
293 EXPECT_BEGIN_FRAME_USED(obs2, 1000, 1000 + kDeadline, kInterval); 327 kInterval);
328 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
329 kInterval);
294 task_runner_->RunPendingTasks(); 330 task_runner_->RunPendingTasks();
295 331
296 // |obs1| finishes first. 332 // |obs1| finishes first.
297 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 333 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
298 source_->DidFinishFrame(&obs1, 0); 334 source_->DidFinishFrame(&obs1, 0);
299 335
300 // |obs2| finishes also, before getting to the newly posted begin frame. 336 // |obs2| finishes also, before getting to the newly posted begin frame.
301 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 337 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
302 source_->DidFinishFrame(&obs2, 0); 338 source_->DidFinishFrame(&obs2, 0);
303 339
304 // Because the begin frame source already ticked when |obs1| finished, 340 // Because the begin frame source already ticked when |obs1| finished,
305 // we see it as the frame time for both observers. 341 // we see it as the frame time for both observers.
306 EXPECT_BEGIN_FRAME_USED(obs1, 1100, 1100 + kDeadline, kInterval); 342 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline,
307 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); 343 kInterval);
344 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
345 kInterval);
308 task_runner_->RunPendingTasks(); 346 task_runner_->RunPendingTasks();
309 347
310 source_->DidFinishFrame(&obs1, 0); 348 source_->DidFinishFrame(&obs1, 0);
311 source_->RemoveObserver(&obs1); 349 source_->RemoveObserver(&obs1);
312 source_->DidFinishFrame(&obs2, 0); 350 source_->DidFinishFrame(&obs2, 0);
313 source_->RemoveObserver(&obs2); 351 source_->RemoveObserver(&obs2);
314 } 352 }
315 353
316 // DelayBasedBeginFrameSource testing ------------------------------------------ 354 // DelayBasedBeginFrameSource testing ------------------------------------------
317 class DelayBasedBeginFrameSourceTest : public ::testing::Test { 355 class DelayBasedBeginFrameSourceTest : public ::testing::Test {
(...skipping 16 matching lines...) Expand all
334 obs_.reset(new MockBeginFrameObserver); 372 obs_.reset(new MockBeginFrameObserver);
335 } 373 }
336 374
337 void TearDown() override { obs_.reset(); } 375 void TearDown() override { obs_.reset(); }
338 }; 376 };
339 377
340 TEST_F(DelayBasedBeginFrameSourceTest, 378 TEST_F(DelayBasedBeginFrameSourceTest,
341 AddObserverCallsOnBeginFrameWithMissedTick) { 379 AddObserverCallsOnBeginFrameWithMissedTick) {
342 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010)); 380 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010));
343 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 381 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
344 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 10000, 20000, 10000); 382 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 10000, 20000,
383 10000);
345 source_->AddObserver(obs_.get()); // Should cause the last tick to be sent 384 source_->AddObserver(obs_.get()); // Should cause the last tick to be sent
346 // No tasks should need to be run for this to occur. 385 // No tasks should need to be run for this to occur.
347 } 386 }
348 387
349 TEST_F(DelayBasedBeginFrameSourceTest, AddObserverCallsCausesOnBeginFrame) { 388 TEST_F(DelayBasedBeginFrameSourceTest, AddObserverCallsCausesOnBeginFrame) {
350 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 389 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
351 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000); 390 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 0, 10000,
391 10000);
352 source_->AddObserver(obs_.get()); 392 source_->AddObserver(obs_.get());
353 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue()); 393 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue());
354 394
355 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 395 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10000, 20000, 10000);
356 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010)); 396 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010));
357 task_runner_->RunPendingTasks(); 397 task_runner_->RunPendingTasks();
358 } 398 }
359 399
360 TEST_F(DelayBasedBeginFrameSourceTest, BasicOperation) { 400 TEST_F(DelayBasedBeginFrameSourceTest, BasicOperation) {
361 task_runner_->SetAutoAdvanceNowToPendingTasks(true); 401 task_runner_->SetAutoAdvanceNowToPendingTasks(true);
362 402
363 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 403 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
364 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000); 404 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 0, 10000,
405 10000);
365 source_->AddObserver(obs_.get()); 406 source_->AddObserver(obs_.get());
366 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 407 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10000, 20000, 10000);
367 EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000); 408 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 20000, 30000, 10000);
368 EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000); 409 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 4, 30000, 40000, 10000);
369 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001)); 410 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001));
370 411
371 source_->RemoveObserver(obs_.get()); 412 source_->RemoveObserver(obs_.get());
372 // No new frames.... 413 // No new frames....
373 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000)); 414 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000));
374 } 415 }
375 416
376 TEST_F(DelayBasedBeginFrameSourceTest, VSyncChanges) { 417 TEST_F(DelayBasedBeginFrameSourceTest, VSyncChanges) {
377 task_runner_->SetAutoAdvanceNowToPendingTasks(true); 418 task_runner_->SetAutoAdvanceNowToPendingTasks(true);
378 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 419 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
379 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000); 420 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 0, 10000,
421 10000);
380 source_->AddObserver(obs_.get()); 422 source_->AddObserver(obs_.get());
381 423
382 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 424 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10000, 20000, 10000);
383 EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000); 425 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 20000, 30000, 10000);
384 EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000); 426 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 4, 30000, 40000, 10000);
385 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001)); 427 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001));
386 428
387 // Update the vsync information 429 // Update the vsync information
388 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(27500), 430 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(27500),
389 base::TimeDelta::FromMicroseconds(10001)); 431 base::TimeDelta::FromMicroseconds(10001));
390 432
391 EXPECT_BEGIN_FRAME_USED(*obs_, 40000, 47502, 10001); 433 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 5, 40000, 47502, 10001);
392 EXPECT_BEGIN_FRAME_USED(*obs_, 47502, 57503, 10001); 434 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 6, 47502, 57503, 10001);
393 EXPECT_BEGIN_FRAME_USED(*obs_, 57503, 67504, 10001); 435 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 7, 57503, 67504, 10001);
394 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000)); 436 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000));
395 } 437 }
396 438
397 TEST_F(DelayBasedBeginFrameSourceTest, AuthoritativeVSyncChanges) { 439 TEST_F(DelayBasedBeginFrameSourceTest, AuthoritativeVSyncChanges) {
398 task_runner_->SetAutoAdvanceNowToPendingTasks(true); 440 task_runner_->SetAutoAdvanceNowToPendingTasks(true);
399 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(500), 441 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(500),
400 base::TimeDelta::FromMicroseconds(10000)); 442 base::TimeDelta::FromMicroseconds(10000));
401 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 443 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
402 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 500, 10500, 10000); 444 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 500, 10500,
445 10000);
403 source_->AddObserver(obs_.get()); 446 source_->AddObserver(obs_.get());
404 447
405 EXPECT_BEGIN_FRAME_USED(*obs_, 10500, 20500, 10000); 448 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10500, 20500, 10000);
406 EXPECT_BEGIN_FRAME_USED(*obs_, 20500, 30500, 10000); 449 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 20500, 30500, 10000);
407 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(20501)); 450 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(20501));
408 451
409 // This will keep the same timebase, so 500, 9999 452 // This will keep the same timebase, so 500, 9999
410 source_->SetAuthoritativeVSyncInterval( 453 source_->SetAuthoritativeVSyncInterval(
411 base::TimeDelta::FromMicroseconds(9999)); 454 base::TimeDelta::FromMicroseconds(9999));
412 EXPECT_BEGIN_FRAME_USED(*obs_, 30500, 40496, 9999); 455 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 4, 30500, 40496, 9999);
413 EXPECT_BEGIN_FRAME_USED(*obs_, 40496, 50495, 9999); 456 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 5, 40496, 50495, 9999);
414 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(40497)); 457 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(40497));
415 458
416 // Change the vsync params, but the new interval will be ignored. 459 // Change the vsync params, but the new interval will be ignored.
417 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(400), 460 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(400),
418 base::TimeDelta::FromMicroseconds(1)); 461 base::TimeDelta::FromMicroseconds(1));
419 EXPECT_BEGIN_FRAME_USED(*obs_, 50495, 60394, 9999); 462 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 6, 50495, 60394, 9999);
420 EXPECT_BEGIN_FRAME_USED(*obs_, 60394, 70393, 9999); 463 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 7, 60394, 70393, 9999);
421 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60395)); 464 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60395));
422 } 465 }
423 466
424 TEST_F(DelayBasedBeginFrameSourceTest, MultipleObservers) { 467 TEST_F(DelayBasedBeginFrameSourceTest, MultipleObservers) {
425 StrictMock<MockBeginFrameObserver> obs1, obs2; 468 StrictMock<MockBeginFrameObserver> obs1, obs2;
426 469
427 // now_src_ starts off at 1000. 470 // now_src_ starts off at 1000.
428 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(9010)); 471 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(9010));
429 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 472 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
430 EXPECT_BEGIN_FRAME_USED_MISSED(obs1, 10000, 20000, 10000); 473 EXPECT_BEGIN_FRAME_USED_MISSED(obs1, source_->source_id(), 1, 10000, 20000,
474 10000);
431 source_->AddObserver(&obs1); // Should cause the last tick to be sent 475 source_->AddObserver(&obs1); // Should cause the last tick to be sent
432 // No tasks should need to be run for this to occur. 476 // No tasks should need to be run for this to occur.
433 477
434 EXPECT_BEGIN_FRAME_USED(obs1, 20000, 30000, 10000); 478 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 20000, 30000, 10000);
435 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000)); 479 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
436 480
437 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 481 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
438 EXPECT_BEGIN_FRAME_USED_MISSED(obs2, 20000, 30000, 10000); 482 // Sequence number unchanged for missed frame with time of last normal frame.
483 EXPECT_BEGIN_FRAME_USED_MISSED(obs2, source_->source_id(), 2, 20000, 30000,
484 10000);
439 source_->AddObserver(&obs2); // Should cause the last tick to be sent 485 source_->AddObserver(&obs2); // Should cause the last tick to be sent
440 // No tasks should need to be run for this to occur. 486 // No tasks should need to be run for this to occur.
441 487
442 EXPECT_BEGIN_FRAME_USED(obs1, 30000, 40000, 10000); 488 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 3, 30000, 40000, 10000);
443 EXPECT_BEGIN_FRAME_USED(obs2, 30000, 40000, 10000); 489 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 3, 30000, 40000, 10000);
444 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000)); 490 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
445 491
446 source_->RemoveObserver(&obs1); 492 source_->RemoveObserver(&obs1);
447 493
448 EXPECT_BEGIN_FRAME_USED(obs2, 40000, 50000, 10000); 494 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 40000, 50000, 10000);
449 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000)); 495 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
450 496
451 source_->RemoveObserver(&obs2); 497 source_->RemoveObserver(&obs2);
452 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(50000)); 498 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(50000));
453 EXPECT_FALSE(task_runner_->HasPendingTasks()); 499 EXPECT_FALSE(task_runner_->HasPendingTasks());
454 } 500 }
455 501
456 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTick) { 502 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTick) {
457 StrictMock<MockBeginFrameObserver> obs; 503 StrictMock<MockBeginFrameObserver> obs;
458 504
459 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 505 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
460 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000); 506 EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000);
461 source_->AddObserver(&obs); 507 source_->AddObserver(&obs);
462 508
463 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000), 509 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000),
464 base::TimeDelta::FromInternalValue(10000)); 510 base::TimeDelta::FromInternalValue(10000));
465 now_src_->Advance(base::TimeDelta::FromInternalValue(4000)); 511 now_src_->Advance(base::TimeDelta::FromInternalValue(4000));
466 512
467 // No begin frame received. 513 // No begin frame received.
468 task_runner_->RunPendingTasks(); 514 task_runner_->RunPendingTasks();
469 515
470 // Begin frame received. 516 // Begin frame received.
471 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000), 517 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000),
472 base::TimeDelta::FromInternalValue(10000)); 518 base::TimeDelta::FromInternalValue(10000));
473 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); 519 now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
474 EXPECT_BEGIN_FRAME_USED(obs, 10000, 20000, 10000); 520 EXPECT_BEGIN_FRAME_USED(obs, source_->source_id(), 2, 10000, 20000, 10000);
475 task_runner_->RunPendingTasks(); 521 task_runner_->RunPendingTasks();
476 } 522 }
477 523
478 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTickMissedFrame) { 524 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTickMissedFrame) {
479 StrictMock<MockBeginFrameObserver> obs; 525 StrictMock<MockBeginFrameObserver> obs;
480 526
481 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 527 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
482 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000); 528 EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000);
483 source_->AddObserver(&obs); 529 source_->AddObserver(&obs);
484 source_->RemoveObserver(&obs); 530 source_->RemoveObserver(&obs);
485 531
486 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000), 532 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000),
487 base::TimeDelta::FromInternalValue(10000)); 533 base::TimeDelta::FromInternalValue(10000));
488 now_src_->Advance(base::TimeDelta::FromInternalValue(4000)); 534 now_src_->Advance(base::TimeDelta::FromInternalValue(4000));
489 535
490 // No missed frame received. 536 // No missed frame received.
491 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 537 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
538 // This does not cause a missed BeginFrame, but the sequence number is
539 // incremented, because the possible missed frame has different time/interval.
492 source_->AddObserver(&obs); 540 source_->AddObserver(&obs);
493 source_->RemoveObserver(&obs); 541 source_->RemoveObserver(&obs);
494 542
495 // Missed frame received. 543 // Missed frame received.
496 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000), 544 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000),
497 base::TimeDelta::FromInternalValue(10000)); 545 base::TimeDelta::FromInternalValue(10000));
498 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); 546 now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
499 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 547 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
500 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000); 548 // Sequence number is incremented again, because the missed frame has
549 // different time/interval.
550 EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 3, 10000, 20000,
551 10000);
501 source_->AddObserver(&obs); 552 source_->AddObserver(&obs);
502 source_->RemoveObserver(&obs); 553 source_->RemoveObserver(&obs);
503 } 554 }
504 555
505 } // namespace 556 } // namespace
506 } // namespace cc 557 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698