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

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

Powered by Google App Engine
This is Rietveld 408576698