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

Side by Side Diff: webrtc/modules/pacing/paced_sender_unittest.cc

Issue 1392513002: Disable pacer disabling. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Remove RTP FIR + test refactoring Created 5 years, 2 months 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 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 // by calling SetProbingEnabled(true). 117 // by calling SetProbingEnabled(true).
118 send_bucket_->SetProbingEnabled(false); 118 send_bucket_->SetProbingEnabled(false);
119 } 119 }
120 120
121 void SendAndExpectPacket(PacedSender::Priority priority, 121 void SendAndExpectPacket(PacedSender::Priority priority,
122 uint32_t ssrc, 122 uint32_t ssrc,
123 uint16_t sequence_number, 123 uint16_t sequence_number,
124 int64_t capture_time_ms, 124 int64_t capture_time_ms,
125 size_t size, 125 size_t size,
126 bool retransmission) { 126 bool retransmission) {
127 EXPECT_FALSE(send_bucket_->SendPacket(priority, ssrc, 127 send_bucket_->InsertPacket(priority, ssrc, sequence_number, capture_time_ms,
128 sequence_number, capture_time_ms, size, retransmission)); 128 size, retransmission);
129 EXPECT_CALL(callback_, 129 EXPECT_CALL(callback_,
130 TimeToSendPacket(ssrc, sequence_number, capture_time_ms, false)) 130 TimeToSendPacket(ssrc, sequence_number, capture_time_ms, false))
131 .Times(1) 131 .Times(1)
132 .WillRepeatedly(Return(true)); 132 .WillRepeatedly(Return(true));
133 } 133 }
134 134
135 SimulatedClock clock_; 135 SimulatedClock clock_;
136 MockPacedSenderCallback callback_; 136 MockPacedSenderCallback callback_;
137 rtc::scoped_ptr<PacedSender> send_bucket_; 137 rtc::scoped_ptr<PacedSender> send_bucket_;
138 }; 138 };
(...skipping 14 matching lines...) Expand all
153 clock_.TimeInMilliseconds(), 153 clock_.TimeInMilliseconds(),
154 250, 154 250,
155 false); 155 false);
156 SendAndExpectPacket(PacedSender::kNormalPriority, 156 SendAndExpectPacket(PacedSender::kNormalPriority,
157 ssrc, 157 ssrc,
158 sequence_number++, 158 sequence_number++,
159 clock_.TimeInMilliseconds(), 159 clock_.TimeInMilliseconds(),
160 250, 160 250,
161 false); 161 false);
162 int64_t queued_packet_timestamp = clock_.TimeInMilliseconds(); 162 int64_t queued_packet_timestamp = clock_.TimeInMilliseconds();
163 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 163 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
164 sequence_number, queued_packet_timestamp, 250, false)); 164 sequence_number, queued_packet_timestamp, 250,
165 false);
165 send_bucket_->Process(); 166 send_bucket_->Process();
166 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); 167 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
167 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); 168 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
168 clock_.AdvanceTimeMilliseconds(4); 169 clock_.AdvanceTimeMilliseconds(4);
169 EXPECT_EQ(1, send_bucket_->TimeUntilNextProcess()); 170 EXPECT_EQ(1, send_bucket_->TimeUntilNextProcess());
170 clock_.AdvanceTimeMilliseconds(1); 171 clock_.AdvanceTimeMilliseconds(1);
171 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); 172 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
172 EXPECT_CALL( 173 EXPECT_CALL(
173 callback_, 174 callback_,
174 TimeToSendPacket(ssrc, sequence_number++, queued_packet_timestamp, false)) 175 TimeToSendPacket(ssrc, sequence_number++, queued_packet_timestamp, false))
175 .Times(1) 176 .Times(1)
176 .WillRepeatedly(Return(true)); 177 .WillRepeatedly(Return(true));
177 send_bucket_->Process(); 178 send_bucket_->Process();
178 sequence_number++; 179 sequence_number++;
179 SendAndExpectPacket(PacedSender::kNormalPriority, 180 SendAndExpectPacket(PacedSender::kNormalPriority,
180 ssrc, 181 ssrc,
181 sequence_number++, 182 sequence_number++,
182 clock_.TimeInMilliseconds(), 183 clock_.TimeInMilliseconds(),
183 250, 184 250,
184 false); 185 false);
185 SendAndExpectPacket(PacedSender::kNormalPriority, 186 SendAndExpectPacket(PacedSender::kNormalPriority,
186 ssrc, 187 ssrc,
187 sequence_number++, 188 sequence_number++,
188 clock_.TimeInMilliseconds(), 189 clock_.TimeInMilliseconds(),
189 250, 190 250,
190 false); 191 false);
191 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 192 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
192 sequence_number++, clock_.TimeInMilliseconds(), 250, false)); 193 sequence_number++, clock_.TimeInMilliseconds(),
194 250, false);
193 send_bucket_->Process(); 195 send_bucket_->Process();
194 } 196 }
195 197
196 TEST_F(PacedSenderTest, PaceQueuedPackets) { 198 TEST_F(PacedSenderTest, PaceQueuedPackets) {
197 uint32_t ssrc = 12345; 199 uint32_t ssrc = 12345;
198 uint16_t sequence_number = 1234; 200 uint16_t sequence_number = 1234;
199 201
200 // Due to the multiplicative factor we can send 3 packets not 2 packets. 202 // Due to the multiplicative factor we can send 3 packets not 2 packets.
201 for (int i = 0; i < 3; ++i) { 203 for (int i = 0; i < 3; ++i) {
202 SendAndExpectPacket(PacedSender::kNormalPriority, 204 SendAndExpectPacket(PacedSender::kNormalPriority,
203 ssrc, 205 ssrc,
204 sequence_number++, 206 sequence_number++,
205 clock_.TimeInMilliseconds(), 207 clock_.TimeInMilliseconds(),
206 250, 208 250,
207 false); 209 false);
208 } 210 }
209 for (int j = 0; j < 30; ++j) { 211 for (int j = 0; j < 30; ++j) {
210 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 212 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
211 sequence_number++, clock_.TimeInMilliseconds(), 250, false)); 213 sequence_number++, clock_.TimeInMilliseconds(),
214 250, false);
212 } 215 }
213 send_bucket_->Process(); 216 send_bucket_->Process();
214 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); 217 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
215 for (int k = 0; k < 10; ++k) { 218 for (int k = 0; k < 10; ++k) {
216 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); 219 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
217 clock_.AdvanceTimeMilliseconds(5); 220 clock_.AdvanceTimeMilliseconds(5);
218 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, _, false)) 221 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, _, false))
219 .Times(3) 222 .Times(3)
220 .WillRepeatedly(Return(true)); 223 .WillRepeatedly(Return(true));
221 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); 224 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
(...skipping 14 matching lines...) Expand all
236 sequence_number++, 239 sequence_number++,
237 clock_.TimeInMilliseconds(), 240 clock_.TimeInMilliseconds(),
238 250, 241 250,
239 false); 242 false);
240 SendAndExpectPacket(PacedSender::kNormalPriority, 243 SendAndExpectPacket(PacedSender::kNormalPriority,
241 ssrc, 244 ssrc,
242 sequence_number++, 245 sequence_number++,
243 clock_.TimeInMilliseconds(), 246 clock_.TimeInMilliseconds(),
244 250, 247 250,
245 false); 248 false);
246 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 249 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
247 sequence_number, clock_.TimeInMilliseconds(), 250, false)); 250 sequence_number, clock_.TimeInMilliseconds(), 250,
251 false);
248 send_bucket_->Process(); 252 send_bucket_->Process();
249 } 253 }
250 254
251 TEST_F(PacedSenderTest, PaceQueuedPacketsWithDuplicates) { 255 TEST_F(PacedSenderTest, PaceQueuedPacketsWithDuplicates) {
252 uint32_t ssrc = 12345; 256 uint32_t ssrc = 12345;
253 uint16_t sequence_number = 1234; 257 uint16_t sequence_number = 1234;
254 uint16_t queued_sequence_number; 258 uint16_t queued_sequence_number;
255 259
256 // Due to the multiplicative factor we can send 3 packets not 2 packets. 260 // Due to the multiplicative factor we can send 3 packets not 2 packets.
257 for (int i = 0; i < 3; ++i) { 261 for (int i = 0; i < 3; ++i) {
258 SendAndExpectPacket(PacedSender::kNormalPriority, 262 SendAndExpectPacket(PacedSender::kNormalPriority,
259 ssrc, 263 ssrc,
260 sequence_number++, 264 sequence_number++,
261 clock_.TimeInMilliseconds(), 265 clock_.TimeInMilliseconds(),
262 250, 266 250,
263 false); 267 false);
264 } 268 }
265 queued_sequence_number = sequence_number; 269 queued_sequence_number = sequence_number;
266 270
267 for (int j = 0; j < 30; ++j) { 271 for (int j = 0; j < 30; ++j) {
268 // Send in duplicate packets. 272 // Send in duplicate packets.
269 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 273 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
270 sequence_number, clock_.TimeInMilliseconds(), 250, false)); 274 sequence_number, clock_.TimeInMilliseconds(),
271 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 275 250, false);
272 sequence_number++, clock_.TimeInMilliseconds(), 250, false)); 276 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
277 sequence_number++, clock_.TimeInMilliseconds(),
278 250, false);
273 } 279 }
274 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); 280 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
275 send_bucket_->Process(); 281 send_bucket_->Process();
276 for (int k = 0; k < 10; ++k) { 282 for (int k = 0; k < 10; ++k) {
277 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); 283 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
278 clock_.AdvanceTimeMilliseconds(5); 284 clock_.AdvanceTimeMilliseconds(5);
279 285
280 for (int i = 0; i < 3; ++i) { 286 for (int i = 0; i < 3; ++i) {
281 EXPECT_CALL(callback_, 287 EXPECT_CALL(callback_,
282 TimeToSendPacket(ssrc, queued_sequence_number++, _, false)) 288 TimeToSendPacket(ssrc, queued_sequence_number++, _, false))
(...skipping 18 matching lines...) Expand all
301 sequence_number++, 307 sequence_number++,
302 clock_.TimeInMilliseconds(), 308 clock_.TimeInMilliseconds(),
303 250, 309 250,
304 false); 310 false);
305 SendAndExpectPacket(PacedSender::kNormalPriority, 311 SendAndExpectPacket(PacedSender::kNormalPriority,
306 ssrc, 312 ssrc,
307 sequence_number++, 313 sequence_number++,
308 clock_.TimeInMilliseconds(), 314 clock_.TimeInMilliseconds(),
309 250, 315 250,
310 false); 316 false);
311 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 317 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
312 sequence_number++, clock_.TimeInMilliseconds(), 250, false)); 318 sequence_number++, clock_.TimeInMilliseconds(),
319 250, false);
313 send_bucket_->Process(); 320 send_bucket_->Process();
314 } 321 }
315 322
316 TEST_F(PacedSenderTest, CanQueuePacketsWithSameSequenceNumberOnDifferentSsrcs) { 323 TEST_F(PacedSenderTest, CanQueuePacketsWithSameSequenceNumberOnDifferentSsrcs) {
317 uint32_t ssrc = 12345; 324 uint32_t ssrc = 12345;
318 uint16_t sequence_number = 1234; 325 uint16_t sequence_number = 1234;
319 326
320 SendAndExpectPacket(PacedSender::kNormalPriority, 327 SendAndExpectPacket(PacedSender::kNormalPriority,
321 ssrc, 328 ssrc,
322 sequence_number, 329 sequence_number,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 377
371 // 5 milliseconds later we have enough budget to send some padding. 378 // 5 milliseconds later we have enough budget to send some padding.
372 EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(1). 379 EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(1).
373 WillOnce(Return(250)); 380 WillOnce(Return(250));
374 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); 381 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
375 clock_.AdvanceTimeMilliseconds(5); 382 clock_.AdvanceTimeMilliseconds(5);
376 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); 383 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
377 EXPECT_EQ(0, send_bucket_->Process()); 384 EXPECT_EQ(0, send_bucket_->Process());
378 } 385 }
379 386
380 TEST_F(PacedSenderTest, NoPaddingWhenDisabled) {
381 send_bucket_->SetStatus(false);
382 send_bucket_->UpdateBitrate(
383 kTargetBitrate, kPaceMultiplier * kTargetBitrate, kTargetBitrate);
384 // No padding is expected since the pacer is disabled.
385 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
386 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
387 clock_.AdvanceTimeMilliseconds(5);
388 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
389 EXPECT_EQ(0, send_bucket_->Process());
390 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
391 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
392 clock_.AdvanceTimeMilliseconds(5);
393 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
394 EXPECT_EQ(0, send_bucket_->Process());
395 }
396
397 TEST_F(PacedSenderTest, VerifyPaddingUpToBitrate) { 387 TEST_F(PacedSenderTest, VerifyPaddingUpToBitrate) {
398 uint32_t ssrc = 12345; 388 uint32_t ssrc = 12345;
399 uint16_t sequence_number = 1234; 389 uint16_t sequence_number = 1234;
400 int64_t capture_time_ms = 56789; 390 int64_t capture_time_ms = 56789;
401 const int kTimeStep = 5; 391 const int kTimeStep = 5;
402 const int64_t kBitrateWindow = 100; 392 const int64_t kBitrateWindow = 100;
403 send_bucket_->UpdateBitrate( 393 send_bucket_->UpdateBitrate(
404 kTargetBitrate, kPaceMultiplier * kTargetBitrate, kTargetBitrate); 394 kTargetBitrate, kPaceMultiplier * kTargetBitrate, kTargetBitrate);
405 int64_t start_time = clock_.TimeInMilliseconds(); 395 int64_t start_time = clock_.TimeInMilliseconds();
406 while (clock_.TimeInMilliseconds() - start_time < kBitrateWindow) { 396 while (clock_.TimeInMilliseconds() - start_time < kBitrateWindow) {
(...skipping 19 matching lines...) Expand all
426 PacedSenderPadding callback; 416 PacedSenderPadding callback;
427 send_bucket_.reset(new PacedSender( 417 send_bucket_.reset(new PacedSender(
428 &clock_, &callback, kTargetBitrate, kPaceMultiplier * kTargetBitrate, 0)); 418 &clock_, &callback, kTargetBitrate, kPaceMultiplier * kTargetBitrate, 0));
429 send_bucket_->SetProbingEnabled(false); 419 send_bucket_->SetProbingEnabled(false);
430 send_bucket_->UpdateBitrate( 420 send_bucket_->UpdateBitrate(
431 kTargetBitrate, kPaceMultiplier * kTargetBitrate, kTargetBitrate); 421 kTargetBitrate, kPaceMultiplier * kTargetBitrate, kTargetBitrate);
432 int64_t start_time = clock_.TimeInMilliseconds(); 422 int64_t start_time = clock_.TimeInMilliseconds();
433 size_t media_bytes = 0; 423 size_t media_bytes = 0;
434 while (clock_.TimeInMilliseconds() - start_time < kBitrateWindow) { 424 while (clock_.TimeInMilliseconds() - start_time < kBitrateWindow) {
435 size_t media_payload = rand() % 100 + 200; // [200, 300] bytes. 425 size_t media_payload = rand() % 100 + 200; // [200, 300] bytes.
436 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc, 426 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
437 sequence_number++, capture_time_ms, 427 sequence_number++, capture_time_ms,
438 media_payload, false)); 428 media_payload, false);
439 media_bytes += media_payload; 429 media_bytes += media_payload;
440 clock_.AdvanceTimeMilliseconds(kTimeStep); 430 clock_.AdvanceTimeMilliseconds(kTimeStep);
441 send_bucket_->Process(); 431 send_bucket_->Process();
442 } 432 }
443 EXPECT_NEAR(kTargetBitrate, 433 EXPECT_NEAR(kTargetBitrate,
444 static_cast<int>(8 * (media_bytes + callback.padding_sent()) / 434 static_cast<int>(8 * (media_bytes + callback.padding_sent()) /
445 kBitrateWindow), 1); 435 kBitrateWindow), 1);
446 } 436 }
447 437
448 TEST_F(PacedSenderTest, Priority) { 438 TEST_F(PacedSenderTest, Priority) {
(...skipping 18 matching lines...) Expand all
467 false); 457 false);
468 SendAndExpectPacket(PacedSender::kNormalPriority, 458 SendAndExpectPacket(PacedSender::kNormalPriority,
469 ssrc, 459 ssrc,
470 sequence_number++, 460 sequence_number++,
471 capture_time_ms, 461 capture_time_ms,
472 250, 462 250,
473 false); 463 false);
474 send_bucket_->Process(); 464 send_bucket_->Process();
475 465
476 // Expect normal and low priority to be queued and high to pass through. 466 // Expect normal and low priority to be queued and high to pass through.
477 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kLowPriority, 467 send_bucket_->InsertPacket(PacedSender::kLowPriority, ssrc_low_priority,
478 ssrc_low_priority, sequence_number++, capture_time_ms_low_priority, 250, 468 sequence_number++, capture_time_ms_low_priority,
479 false)); 469 250, false);
480 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, 470 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
481 ssrc, sequence_number++, capture_time_ms, 250, false)); 471 sequence_number++, capture_time_ms, 250, false);
482 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, 472 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
483 ssrc, sequence_number++, capture_time_ms, 250, false)); 473 sequence_number++, capture_time_ms, 250, false);
484 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kHighPriority, 474 send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc,
485 ssrc, sequence_number++, capture_time_ms, 250, false)); 475 sequence_number++, capture_time_ms, 250, false);
486 476
487 // Expect all high and normal priority to be sent out first. 477 // Expect all high and normal priority to be sent out first.
488 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); 478 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
489 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, capture_time_ms, false)) 479 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, capture_time_ms, false))
490 .Times(3) 480 .Times(3)
491 .WillRepeatedly(Return(true)); 481 .WillRepeatedly(Return(true));
492 482
493 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); 483 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
494 clock_.AdvanceTimeMilliseconds(5); 484 clock_.AdvanceTimeMilliseconds(5);
495 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); 485 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 SendAndExpectPacket(PacedSender::kNormalPriority, 521 SendAndExpectPacket(PacedSender::kNormalPriority,
532 ssrc, 522 ssrc,
533 sequence_number++, 523 sequence_number++,
534 capture_time_ms, 524 capture_time_ms,
535 250, 525 250,
536 false); 526 false);
537 send_bucket_->Process(); 527 send_bucket_->Process();
538 528
539 send_bucket_->Pause(); 529 send_bucket_->Pause();
540 530
541 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, 531 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
542 ssrc, sequence_number++, capture_time_ms, 250, false)); 532 sequence_number++, capture_time_ms, 250, false);
543 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, 533 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
544 ssrc, sequence_number++, capture_time_ms, 250, false)); 534 sequence_number++, capture_time_ms, 250, false);
545 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kHighPriority, 535 send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc,
546 ssrc, sequence_number++, capture_time_ms, 250, false)); 536 sequence_number++, capture_time_ms, 250, false);
547 537
548 clock_.AdvanceTimeMilliseconds(10000); 538 clock_.AdvanceTimeMilliseconds(10000);
549 int64_t second_capture_time_ms = clock_.TimeInMilliseconds(); 539 int64_t second_capture_time_ms = clock_.TimeInMilliseconds();
550 540
551 // Expect everything to be queued. 541 // Expect everything to be queued.
552 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kLowPriority, 542 send_bucket_->InsertPacket(PacedSender::kLowPriority, ssrc_low_priority,
553 ssrc_low_priority, sequence_number++, second_capture_time_ms, 250, 543 sequence_number++, second_capture_time_ms, 250,
554 false)); 544 false);
555 545
556 EXPECT_EQ(clock_.TimeInMilliseconds() - capture_time_ms, 546 EXPECT_EQ(clock_.TimeInMilliseconds() - capture_time_ms,
557 send_bucket_->QueueInMs()); 547 send_bucket_->QueueInMs());
558 548
559 // Expect no packet to come out while paused. 549 // Expect no packet to come out while paused.
560 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); 550 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
561 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _)).Times(0); 551 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _)).Times(0);
562 552
563 for (int i = 0; i < 10; ++i) { 553 for (int i = 0; i < 10; ++i) {
564 clock_.AdvanceTimeMilliseconds(5); 554 clock_.AdvanceTimeMilliseconds(5);
(...skipping 21 matching lines...) Expand all
586 EXPECT_EQ(0, send_bucket_->Process()); 576 EXPECT_EQ(0, send_bucket_->Process());
587 EXPECT_EQ(0, send_bucket_->QueueInMs()); 577 EXPECT_EQ(0, send_bucket_->QueueInMs());
588 } 578 }
589 579
590 TEST_F(PacedSenderTest, ResendPacket) { 580 TEST_F(PacedSenderTest, ResendPacket) {
591 uint32_t ssrc = 12346; 581 uint32_t ssrc = 12346;
592 uint16_t sequence_number = 1234; 582 uint16_t sequence_number = 1234;
593 int64_t capture_time_ms = clock_.TimeInMilliseconds(); 583 int64_t capture_time_ms = clock_.TimeInMilliseconds();
594 EXPECT_EQ(0, send_bucket_->QueueInMs()); 584 EXPECT_EQ(0, send_bucket_->QueueInMs());
595 585
596 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, 586 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
597 ssrc, 587 sequence_number, capture_time_ms, 250, false);
598 sequence_number,
599 capture_time_ms,
600 250,
601 false));
602 clock_.AdvanceTimeMilliseconds(1); 588 clock_.AdvanceTimeMilliseconds(1);
603 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, 589 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
604 ssrc, 590 sequence_number + 1, capture_time_ms + 1, 250,
605 sequence_number + 1, 591 false);
606 capture_time_ms + 1,
607 250,
608 false));
609 clock_.AdvanceTimeMilliseconds(9999); 592 clock_.AdvanceTimeMilliseconds(9999);
610 EXPECT_EQ(clock_.TimeInMilliseconds() - capture_time_ms, 593 EXPECT_EQ(clock_.TimeInMilliseconds() - capture_time_ms,
611 send_bucket_->QueueInMs()); 594 send_bucket_->QueueInMs());
612 // Fails to send first packet so only one call. 595 // Fails to send first packet so only one call.
613 EXPECT_CALL(callback_, 596 EXPECT_CALL(callback_,
614 TimeToSendPacket(ssrc, sequence_number, capture_time_ms, false)) 597 TimeToSendPacket(ssrc, sequence_number, capture_time_ms, false))
615 .Times(1) 598 .Times(1)
616 .WillOnce(Return(false)); 599 .WillOnce(Return(false));
617 clock_.AdvanceTimeMilliseconds(10000); 600 clock_.AdvanceTimeMilliseconds(10000);
618 send_bucket_->Process(); 601 send_bucket_->Process();
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 expected_deltas + kNumPackets - 1); 702 expected_deltas + kNumPackets - 1);
720 PacedSenderProbing callback(expected_deltas_list, &clock_); 703 PacedSenderProbing callback(expected_deltas_list, &clock_);
721 send_bucket_.reset( 704 send_bucket_.reset(
722 new PacedSender(&clock_, 705 new PacedSender(&clock_,
723 &callback, 706 &callback,
724 kInitialBitrateKbps, 707 kInitialBitrateKbps,
725 kPaceMultiplier * kInitialBitrateKbps, 708 kPaceMultiplier * kInitialBitrateKbps,
726 0)); 709 0));
727 710
728 for (int i = 0; i < kNumPackets; ++i) { 711 for (int i = 0; i < kNumPackets; ++i) {
729 EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, 712 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
730 ssrc, 713 sequence_number++, clock_.TimeInMilliseconds(),
731 sequence_number++, 714 kPacketSize, false);
732 clock_.TimeInMilliseconds(),
733 kPacketSize,
734 false));
735 } 715 }
736 while (callback.packets_sent() < kNumPackets) { 716 while (callback.packets_sent() < kNumPackets) {
737 int time_until_process = send_bucket_->TimeUntilNextProcess(); 717 int time_until_process = send_bucket_->TimeUntilNextProcess();
738 if (time_until_process <= 0) { 718 if (time_until_process <= 0) {
739 send_bucket_->Process(); 719 send_bucket_->Process();
740 } else { 720 } else {
741 clock_.AdvanceTimeMilliseconds(time_until_process); 721 clock_.AdvanceTimeMilliseconds(time_until_process);
742 } 722 }
743 } 723 }
744 } 724 }
745 725
746 TEST_F(PacedSenderTest, ProbingWithTooSmallInitialFrame) { 726 TEST_F(PacedSenderTest, ProbingWithTooSmallInitialFrame) {
747 const int kNumPackets = 11; 727 const int kNumPackets = 11;
748 const int kNumDeltas = kNumPackets - 1; 728 const int kNumDeltas = kNumPackets - 1;
749 const size_t kPacketSize = 1200; 729 const size_t kPacketSize = 1200;
750 const int kInitialBitrateKbps = 300; 730 const int kInitialBitrateKbps = 300;
751 uint32_t ssrc = 12346; 731 uint32_t ssrc = 12346;
752 uint16_t sequence_number = 1234; 732 uint16_t sequence_number = 1234;
753 const int expected_deltas[kNumDeltas] = {10, 10, 10, 10, 10, 5, 5, 5, 5, 5}; 733 const int expected_deltas[kNumDeltas] = {10, 10, 10, 10, 10, 5, 5, 5, 5, 5};
754 std::list<int> expected_deltas_list(expected_deltas, 734 std::list<int> expected_deltas_list(expected_deltas,
755 expected_deltas + kNumPackets - 1); 735 expected_deltas + kNumPackets - 1);
756 PacedSenderProbing callback(expected_deltas_list, &clock_); 736 PacedSenderProbing callback(expected_deltas_list, &clock_);
757 send_bucket_.reset(new PacedSender(&clock_, &callback, kInitialBitrateKbps, 737 send_bucket_.reset(new PacedSender(&clock_, &callback, kInitialBitrateKbps,
758 kPaceMultiplier * kInitialBitrateKbps, 0)); 738 kPaceMultiplier * kInitialBitrateKbps, 0));
759 739
760 for (int i = 0; i < kNumPackets - 5; ++i) { 740 for (int i = 0; i < kNumPackets - 5; ++i) {
761 EXPECT_FALSE(send_bucket_->SendPacket( 741 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc,
762 PacedSender::kNormalPriority, ssrc, sequence_number++, 742 sequence_number++, clock_.TimeInMilliseconds(),
763 clock_.TimeInMilliseconds(), kPacketSize, false)); 743 kPacketSize, false);
764 } 744 }
765 while (callback.packets_sent() < kNumPackets) { 745 while (callback.packets_sent() < kNumPackets) {
766 int time_until_process = send_bucket_->TimeUntilNextProcess(); 746 int time_until_process = send_bucket_->TimeUntilNextProcess();
767 if (time_until_process <= 0) { 747 if (time_until_process <= 0) {
768 send_bucket_->Process(); 748 send_bucket_->Process();
769 } else { 749 } else {
770 clock_.AdvanceTimeMilliseconds(time_until_process); 750 clock_.AdvanceTimeMilliseconds(time_until_process);
771 } 751 }
772 } 752 }
773 753
774 // Process one more time and make sure we don't send any more probes. 754 // Process one more time and make sure we don't send any more probes.
775 int time_until_process = send_bucket_->TimeUntilNextProcess(); 755 int time_until_process = send_bucket_->TimeUntilNextProcess();
776 clock_.AdvanceTimeMilliseconds(time_until_process); 756 clock_.AdvanceTimeMilliseconds(time_until_process);
777 send_bucket_->Process(); 757 send_bucket_->Process();
778 EXPECT_EQ(kNumPackets, callback.packets_sent()); 758 EXPECT_EQ(kNumPackets, callback.packets_sent());
779 } 759 }
780 760
781 TEST_F(PacedSenderTest, PriorityInversion) { 761 TEST_F(PacedSenderTest, PriorityInversion) {
782 uint32_t ssrc = 12346; 762 uint32_t ssrc = 12346;
783 uint16_t sequence_number = 1234; 763 uint16_t sequence_number = 1234;
784 const size_t kPacketSize = 1200; 764 const size_t kPacketSize = 1200;
785 765
786 EXPECT_FALSE(send_bucket_->SendPacket( 766 send_bucket_->InsertPacket(
787 PacedSender::kHighPriority, ssrc, sequence_number + 3, 767 PacedSender::kHighPriority, ssrc, sequence_number + 3,
788 clock_.TimeInMilliseconds() + 33, kPacketSize, true)); 768 clock_.TimeInMilliseconds() + 33, kPacketSize, true);
789 769
790 EXPECT_FALSE(send_bucket_->SendPacket( 770 send_bucket_->InsertPacket(
791 PacedSender::kHighPriority, ssrc, sequence_number + 2, 771 PacedSender::kHighPriority, ssrc, sequence_number + 2,
792 clock_.TimeInMilliseconds() + 33, kPacketSize, true)); 772 clock_.TimeInMilliseconds() + 33, kPacketSize, true);
793 773
794 EXPECT_FALSE(send_bucket_->SendPacket( 774 send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc, sequence_number,
795 PacedSender::kHighPriority, ssrc, sequence_number, 775 clock_.TimeInMilliseconds(), kPacketSize, true);
796 clock_.TimeInMilliseconds(), kPacketSize, true));
797 776
798 EXPECT_FALSE(send_bucket_->SendPacket( 777 send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc,
799 PacedSender::kHighPriority, ssrc, sequence_number + 1, 778 sequence_number + 1, clock_.TimeInMilliseconds(),
800 clock_.TimeInMilliseconds(), kPacketSize, true)); 779 kPacketSize, true);
801 780
802 // Packets from earlier frames should be sent first. 781 // Packets from earlier frames should be sent first.
803 { 782 {
804 ::testing::InSequence sequence; 783 ::testing::InSequence sequence;
805 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number, 784 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number,
806 clock_.TimeInMilliseconds(), true)) 785 clock_.TimeInMilliseconds(), true))
807 .WillOnce(Return(true)); 786 .WillOnce(Return(true));
808 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number + 1, 787 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number + 1,
809 clock_.TimeInMilliseconds(), true)) 788 clock_.TimeInMilliseconds(), true))
810 .WillOnce(Return(true)); 789 .WillOnce(Return(true));
(...skipping 24 matching lines...) Expand all
835 send_bucket_->UpdateBitrate(60, 90, 0); 814 send_bucket_->UpdateBitrate(60, 90, 0);
836 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, 815 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
837 clock_.TimeInMilliseconds(), kPacketSize, false); 816 clock_.TimeInMilliseconds(), kPacketSize, false);
838 send_bucket_->Process(); 817 send_bucket_->Process();
839 818
840 // Add 30kbit padding. When increasing budget, media budget will increase from 819 // Add 30kbit padding. When increasing budget, media budget will increase from
841 // negative (overuse) while padding budget will increase form 0. 820 // negative (overuse) while padding budget will increase form 0.
842 clock_.AdvanceTimeMilliseconds(5); 821 clock_.AdvanceTimeMilliseconds(5);
843 send_bucket_->UpdateBitrate(60, 90, 30); 822 send_bucket_->UpdateBitrate(60, 90, 30);
844 823
845 EXPECT_FALSE(send_bucket_->SendPacket( 824 send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc,
846 PacedSender::kHighPriority, ssrc, sequence_number++, 825 sequence_number++, clock_.TimeInMilliseconds(),
847 clock_.TimeInMilliseconds(), kPacketSize, false)); 826 kPacketSize, false);
848 827
849 // Don't send padding if queue is non-empty, even if padding budget > 0. 828 // Don't send padding if queue is non-empty, even if padding budget > 0.
850 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); 829 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
851 send_bucket_->Process(); 830 send_bucket_->Process();
852 } 831 }
853 832
854 } // namespace test 833 } // namespace test
855 } // namespace webrtc 834 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/pacing/paced_sender.cc ('k') | webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698