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

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

Powered by Google App Engine
This is Rietveld 408576698