OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 ASSERT_TRUE(IsSequenceNumberSorted(packets)); | 325 ASSERT_TRUE(IsSequenceNumberSorted(packets)); |
326 for (PacketsConstIt it = packets.begin(); it != packets.end(); ++it) { | 326 for (PacketsConstIt it = packets.begin(); it != packets.end(); ++it) { |
327 EXPECT_LE(now_ms_ * 1000, (*it)->send_time_us()); | 327 EXPECT_LE(now_ms_ * 1000, (*it)->send_time_us()); |
328 } | 328 } |
329 EXPECT_EQ(out_packets, packets.size()); | 329 EXPECT_EQ(out_packets, packets.size()); |
330 accumulated_packets_.splice(accumulated_packets_.end(), packets); | 330 accumulated_packets_.splice(accumulated_packets_.end(), packets); |
331 now_ms_ += run_for_ms; | 331 now_ms_ += run_for_ms; |
332 } | 332 } |
333 | 333 |
334 void TestDelayFilter(int64_t delay_ms) { | 334 void TestDelayFilter(int64_t delay_ms) { |
335 filter_.SetDelayMs(delay_ms); | 335 filter_.SetOneWayDelayMs(delay_ms); |
336 TestDelayFilter(1, 0, 0); // No input should yield no output | 336 TestDelayFilter(1, 0, 0); // No input should yield no output |
337 | 337 |
338 // Single packet | 338 // Single packet |
339 TestDelayFilter(0, 1, 1); | 339 TestDelayFilter(0, 1, 1); |
340 TestDelayFilter(delay_ms, 0, 0); | 340 TestDelayFilter(delay_ms, 0, 0); |
341 | 341 |
342 for (int i = 0; i < delay_ms; ++i) { | 342 for (int i = 0; i < delay_ms; ++i) { |
343 filter_.SetDelayMs(i); | 343 filter_.SetOneWayDelayMs(i); |
344 TestDelayFilter(1, 10, 10); | 344 TestDelayFilter(1, 10, 10); |
345 } | 345 } |
346 TestDelayFilter(0, 0, 0); | 346 TestDelayFilter(0, 0, 0); |
347 TestDelayFilter(delay_ms, 0, 0); | 347 TestDelayFilter(delay_ms, 0, 0); |
348 | 348 |
349 // Wait a little longer - should still see no output | 349 // Wait a little longer - should still see no output |
350 TestDelayFilter(delay_ms, 0, 0); | 350 TestDelayFilter(delay_ms, 0, 0); |
351 | 351 |
352 for (int i = 1; i < delay_ms + 1; ++i) { | 352 for (int i = 1; i < delay_ms + 1; ++i) { |
353 filter_.SetDelayMs(i); | 353 filter_.SetOneWayDelayMs(i); |
354 TestDelayFilter(1, 5, 5); | 354 TestDelayFilter(1, 5, 5); |
355 } | 355 } |
356 TestDelayFilter(0, 0, 0); | 356 TestDelayFilter(0, 0, 0); |
357 filter_.SetDelayMs(2 * delay_ms); | 357 filter_.SetOneWayDelayMs(2 * delay_ms); |
358 TestDelayFilter(1, 0, 0); | 358 TestDelayFilter(1, 0, 0); |
359 TestDelayFilter(delay_ms, 13, 13); | 359 TestDelayFilter(delay_ms, 13, 13); |
360 TestDelayFilter(delay_ms, 0, 0); | 360 TestDelayFilter(delay_ms, 0, 0); |
361 | 361 |
362 // Wait a little longer - should still see no output | 362 // Wait a little longer - should still see no output |
363 TestDelayFilter(delay_ms, 0, 0); | 363 TestDelayFilter(delay_ms, 0, 0); |
364 | 364 |
365 for (int i = 0; i < 2 * delay_ms; ++i) { | 365 for (int i = 0; i < 2 * delay_ms; ++i) { |
366 filter_.SetDelayMs(2 * delay_ms - i - 1); | 366 filter_.SetOneWayDelayMs(2 * delay_ms - i - 1); |
367 TestDelayFilter(1, 5, 5); | 367 TestDelayFilter(1, 5, 5); |
368 } | 368 } |
369 TestDelayFilter(0, 0, 0); | 369 TestDelayFilter(0, 0, 0); |
370 filter_.SetDelayMs(0); | 370 filter_.SetOneWayDelayMs(0); |
371 TestDelayFilter(0, 7, 7); | 371 TestDelayFilter(0, 7, 7); |
372 | 372 |
373 ASSERT_TRUE(IsTimeSorted(accumulated_packets_)); | 373 ASSERT_TRUE(IsTimeSorted(accumulated_packets_)); |
374 ASSERT_TRUE(IsSequenceNumberSorted(accumulated_packets_)); | 374 ASSERT_TRUE(IsSequenceNumberSorted(accumulated_packets_)); |
375 } | 375 } |
376 | 376 |
377 DelayFilter filter_; | 377 DelayFilter filter_; |
378 Packets accumulated_packets_; | 378 Packets accumulated_packets_; |
379 | 379 |
380 private: | 380 private: |
381 int64_t now_ms_; | 381 int64_t now_ms_; |
382 uint32_t sequence_number_; | 382 uint32_t sequence_number_; |
383 | 383 |
384 DISALLOW_COPY_AND_ASSIGN(BweTestFramework_DelayFilterTest); | 384 DISALLOW_COPY_AND_ASSIGN(BweTestFramework_DelayFilterTest); |
385 }; | 385 }; |
386 | 386 |
387 TEST_F(BweTestFramework_DelayFilterTest, Delay0) { | 387 TEST_F(BweTestFramework_DelayFilterTest, Delay0) { |
388 TestDelayFilter(1, 0, 0); // No input should yield no output | 388 TestDelayFilter(1, 0, 0); // No input should yield no output |
389 TestDelayFilter(1, 10, 10); // Expect no delay (delay time is zero) | 389 TestDelayFilter(1, 10, 10); // Expect no delay (delay time is zero) |
390 TestDelayFilter(1, 0, 0); // Check no packets are still in buffer | 390 TestDelayFilter(1, 0, 0); // Check no packets are still in buffer |
391 filter_.SetDelayMs(0); | 391 filter_.SetOneWayDelayMs(0); |
392 TestDelayFilter(1, 5, 5); // Expect no delay (delay time is zero) | 392 TestDelayFilter(1, 5, 5); // Expect no delay (delay time is zero) |
393 TestDelayFilter(1, 0, 0); // Check no packets are still in buffer | 393 TestDelayFilter(1, 0, 0); // Check no packets are still in buffer |
394 } | 394 } |
395 | 395 |
396 TEST_F(BweTestFramework_DelayFilterTest, Delay1) { | 396 TEST_F(BweTestFramework_DelayFilterTest, Delay1) { |
397 TestDelayFilter(1); | 397 TestDelayFilter(1); |
398 } | 398 } |
399 | 399 |
400 TEST_F(BweTestFramework_DelayFilterTest, Delay2) { | 400 TEST_F(BweTestFramework_DelayFilterTest, Delay2) { |
401 TestDelayFilter(2); | 401 TestDelayFilter(2); |
402 } | 402 } |
403 | 403 |
404 TEST_F(BweTestFramework_DelayFilterTest, Delay20) { | 404 TEST_F(BweTestFramework_DelayFilterTest, Delay20) { |
405 TestDelayFilter(20); | 405 TestDelayFilter(20); |
406 } | 406 } |
407 | 407 |
408 TEST_F(BweTestFramework_DelayFilterTest, Delay100) { | 408 TEST_F(BweTestFramework_DelayFilterTest, Delay100) { |
409 TestDelayFilter(100); | 409 TestDelayFilter(100); |
410 } | 410 } |
411 | 411 |
412 TEST_F(BweTestFramework_DelayFilterTest, JumpToZeroDelay) { | 412 TEST_F(BweTestFramework_DelayFilterTest, JumpToZeroDelay) { |
413 DelayFilter delay(NULL, 0); | 413 DelayFilter delay(NULL, 0); |
414 Packets acc; | 414 Packets acc; |
415 Packets packets; | 415 Packets packets; |
416 | 416 |
417 // Delay a bunch of packets, accumulate them to the 'acc' list. | 417 // Delay a bunch of packets, accumulate them to the 'acc' list. |
418 delay.SetDelayMs(100.0f); | 418 delay.SetOneWayDelayMs(100.0f); |
419 for (uint32_t i = 0; i < 10; ++i) { | 419 for (uint32_t i = 0; i < 10; ++i) { |
420 packets.push_back(new MediaPacket(i * 100, i)); | 420 packets.push_back(new MediaPacket(i * 100, i)); |
421 } | 421 } |
422 delay.RunFor(1000, &packets); | 422 delay.RunFor(1000, &packets); |
423 acc.splice(acc.end(), packets); | 423 acc.splice(acc.end(), packets); |
424 ASSERT_TRUE(IsTimeSorted(acc)); | 424 ASSERT_TRUE(IsTimeSorted(acc)); |
425 ASSERT_TRUE(IsSequenceNumberSorted(acc)); | 425 ASSERT_TRUE(IsSequenceNumberSorted(acc)); |
426 | 426 |
427 // Drop delay to zero, send a few more packets through the delay, append them | 427 // Drop delay to zero, send a few more packets through the delay, append them |
428 // to the 'acc' list and verify that it is all sorted. | 428 // to the 'acc' list and verify that it is all sorted. |
429 delay.SetDelayMs(0.0f); | 429 delay.SetOneWayDelayMs(0.0f); |
430 for (uint32_t i = 10; i < 50; ++i) { | 430 for (uint32_t i = 10; i < 50; ++i) { |
431 packets.push_back(new MediaPacket(i * 100, i)); | 431 packets.push_back(new MediaPacket(i * 100, i)); |
432 } | 432 } |
433 delay.RunFor(1000, &packets); | 433 delay.RunFor(1000, &packets); |
434 acc.splice(acc.end(), packets); | 434 acc.splice(acc.end(), packets); |
435 ASSERT_TRUE(IsTimeSorted(acc)); | 435 ASSERT_TRUE(IsTimeSorted(acc)); |
436 ASSERT_TRUE(IsSequenceNumberSorted(acc)); | 436 ASSERT_TRUE(IsSequenceNumberSorted(acc)); |
437 | 437 |
438 for (auto* packet : acc) | 438 for (auto* packet : acc) |
439 delete packet; | 439 delete packet; |
440 } | 440 } |
441 | 441 |
442 TEST_F(BweTestFramework_DelayFilterTest, IncreasingDelay) { | 442 TEST_F(BweTestFramework_DelayFilterTest, IncreasingDelay) { |
443 // Gradually increase delay. | 443 // Gradually increase delay. |
444 for (int i = 1; i < 50; i += 4) { | 444 for (int i = 1; i < 50; i += 4) { |
445 TestDelayFilter(i); | 445 TestDelayFilter(i); |
446 } | 446 } |
447 // Reach a steady state. | 447 // Reach a steady state. |
448 filter_.SetDelayMs(100); | 448 filter_.SetOneWayDelayMs(100); |
449 TestDelayFilter(1, 20, 20); | 449 TestDelayFilter(1, 20, 20); |
450 TestDelayFilter(2, 0, 0); | 450 TestDelayFilter(2, 0, 0); |
451 TestDelayFilter(99, 20, 20); | 451 TestDelayFilter(99, 20, 20); |
452 // Drop delay back down to zero. | 452 // Drop delay back down to zero. |
453 filter_.SetDelayMs(0); | 453 filter_.SetOneWayDelayMs(0); |
454 TestDelayFilter(1, 100, 100); | 454 TestDelayFilter(1, 100, 100); |
455 TestDelayFilter(23010, 0, 0); | 455 TestDelayFilter(23010, 0, 0); |
456 ASSERT_TRUE(IsTimeSorted(accumulated_packets_)); | 456 ASSERT_TRUE(IsTimeSorted(accumulated_packets_)); |
457 ASSERT_TRUE(IsSequenceNumberSorted(accumulated_packets_)); | 457 ASSERT_TRUE(IsSequenceNumberSorted(accumulated_packets_)); |
458 } | 458 } |
459 | 459 |
460 static void TestJitterFilter(int64_t stddev_jitter_ms) { | 460 static void TestJitterFilter(int64_t stddev_jitter_ms) { |
461 JitterFilter filter(NULL, 0); | 461 JitterFilter filter(NULL, 0); |
462 filter.SetJitter(stddev_jitter_ms); | 462 filter.SetJitter(stddev_jitter_ms); |
463 | 463 |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 std::vector<int64_t> send_times_us_; | 662 std::vector<int64_t> send_times_us_; |
663 | 663 |
664 DISALLOW_COPY_AND_ASSIGN(BweTestFramework_ChokeFilterTest); | 664 DISALLOW_COPY_AND_ASSIGN(BweTestFramework_ChokeFilterTest); |
665 }; | 665 }; |
666 | 666 |
667 TEST_F(BweTestFramework_ChokeFilterTest, Short) { | 667 TEST_F(BweTestFramework_ChokeFilterTest, Short) { |
668 // 100ms, 100 packets, 10 kbps choke -> 1 kbit of data should have propagated. | 668 // 100ms, 100 packets, 10 kbps choke -> 1 kbit of data should have propagated. |
669 // That is actually just a single packet, since each packet has 1000 bits of | 669 // That is actually just a single packet, since each packet has 1000 bits of |
670 // payload. | 670 // payload. |
671 ChokeFilter filter(NULL, 0); | 671 ChokeFilter filter(NULL, 0); |
672 filter.SetCapacity(10); | 672 filter.SetCapacityKbps(10); |
673 TestChoke(&filter, 100, 100, 1); | 673 TestChoke(&filter, 100, 100, 1); |
674 } | 674 } |
675 | 675 |
676 TEST_F(BweTestFramework_ChokeFilterTest, Medium) { | 676 TEST_F(BweTestFramework_ChokeFilterTest, Medium) { |
677 // 100ms, 10 packets, 10 kbps choke -> 1 packet through, or 1 kbit. | 677 // 100ms, 10 packets, 10 kbps choke -> 1 packet through, or 1 kbit. |
678 ChokeFilter filter(NULL, 0); | 678 ChokeFilter filter(NULL, 0); |
679 filter.SetCapacity(10); | 679 filter.SetCapacityKbps(10); |
680 TestChoke(&filter, 100, 10, 1); | 680 TestChoke(&filter, 100, 10, 1); |
681 // 200ms, no new packets -> another packet through. | 681 // 200ms, no new packets -> another packet through. |
682 TestChoke(&filter, 100, 0, 1); | 682 TestChoke(&filter, 100, 0, 1); |
683 // 1000ms, no new packets -> 8 more packets. | 683 // 1000ms, no new packets -> 8 more packets. |
684 TestChoke(&filter, 800, 0, 8); | 684 TestChoke(&filter, 800, 0, 8); |
685 // 2000ms, no new packets -> queue is empty so no output. | 685 // 2000ms, no new packets -> queue is empty so no output. |
686 TestChoke(&filter, 1000, 0, 0); | 686 TestChoke(&filter, 1000, 0, 0); |
687 } | 687 } |
688 | 688 |
689 TEST_F(BweTestFramework_ChokeFilterTest, Long) { | 689 TEST_F(BweTestFramework_ChokeFilterTest, Long) { |
690 // 100ms, 100 packets in queue, 10 kbps choke -> 1 packet through, or 1 kbit. | 690 // 100ms, 100 packets in queue, 10 kbps choke -> 1 packet through, or 1 kbit. |
691 ChokeFilter filter(NULL, 0); | 691 ChokeFilter filter(NULL, 0); |
692 filter.SetCapacity(10); | 692 filter.SetCapacityKbps(10); |
693 TestChoke(&filter, 100, 100, 1); | 693 TestChoke(&filter, 100, 100, 1); |
694 // 200ms, no input, another packet through. | 694 // 200ms, no input, another packet through. |
695 TestChoke(&filter, 100, 0, 1); | 695 TestChoke(&filter, 100, 0, 1); |
696 // 1000ms, no input, 8 packets through. | 696 // 1000ms, no input, 8 packets through. |
697 TestChoke(&filter, 800, 0, 8); | 697 TestChoke(&filter, 800, 0, 8); |
698 // 10000ms, no input, raise choke to 100 kbps. Remaining 90 packets in queue | 698 // 10000ms, no input, raise choke to 100 kbps. Remaining 90 packets in queue |
699 // should be propagated, for a total of 90 kbps. | 699 // should be propagated, for a total of 90 kbps. |
700 filter.SetCapacity(100); | 700 filter.SetCapacityKbps(100); |
701 TestChoke(&filter, 9000, 0, 90); | 701 TestChoke(&filter, 9000, 0, 90); |
702 // 10100ms, 20 more packets -> 10 packets or 10 kbit through. | 702 // 10100ms, 20 more packets -> 10 packets or 10 kbit through. |
703 TestChoke(&filter, 100, 20, 10); | 703 TestChoke(&filter, 100, 20, 10); |
704 // 10300ms, 10 more packets -> 20 packets out. | 704 // 10300ms, 10 more packets -> 20 packets out. |
705 TestChoke(&filter, 200, 10, 20); | 705 TestChoke(&filter, 200, 10, 20); |
706 // 11300ms, no input, queue should be empty. | 706 // 11300ms, no input, queue should be empty. |
707 filter.SetCapacity(10); | 707 filter.SetCapacityKbps(10); |
708 TestChoke(&filter, 1000, 0, 0); | 708 TestChoke(&filter, 1000, 0, 0); |
709 } | 709 } |
710 | 710 |
711 TEST_F(BweTestFramework_ChokeFilterTest, MaxDelay) { | 711 TEST_F(BweTestFramework_ChokeFilterTest, MaxDelay) { |
712 // 10 kbps choke, 500 ms delay cap | 712 // 10 kbps choke, 500 ms delay cap |
713 ChokeFilter filter(NULL, 0); | 713 ChokeFilter filter(NULL, 0); |
714 filter.SetCapacity(10); | 714 filter.SetCapacityKbps(10); |
715 filter.SetMaxDelay(500); | 715 filter.SetMaxDelayMs(500); |
716 // 100ms, 100 packets in queue, 10 kbps choke -> 1 packet through, or 1 kbit. | 716 // 100ms, 100 packets in queue, 10 kbps choke -> 1 packet through, or 1 kbit. |
717 TestChoke(&filter, 100, 100, 1); | 717 TestChoke(&filter, 100, 100, 1); |
718 CheckMaxDelay(500); | 718 CheckMaxDelay(500); |
719 // 500ms, no input, 4 more packets through. | 719 // 500ms, no input, 4 more packets through. |
720 TestChoke(&filter, 400, 0, 4); | 720 TestChoke(&filter, 400, 0, 4); |
721 // 10000ms, no input, remaining packets should have been dropped. | 721 // 10000ms, no input, remaining packets should have been dropped. |
722 TestChoke(&filter, 9500, 0, 0); | 722 TestChoke(&filter, 9500, 0, 0); |
723 | 723 |
724 // 100 ms delay cap | 724 // 100 ms delay cap |
725 filter.SetMaxDelay(100); | 725 filter.SetMaxDelayMs(100); |
726 // 10100ms, 50 more packets -> 2 packets or 2 kbit through. | 726 // 10100ms, 50 more packets -> 2 packets or 2 kbit through. |
727 TestChoke(&filter, 100, 50, 2); | 727 TestChoke(&filter, 100, 50, 2); |
728 CheckMaxDelay(100); | 728 CheckMaxDelay(100); |
729 // 20000ms, no input, remaining packets in queue should have been dropped. | 729 // 20000ms, no input, remaining packets in queue should have been dropped. |
730 TestChoke(&filter, 9900, 0, 0); | 730 TestChoke(&filter, 9900, 0, 0); |
731 | 731 |
732 // Reset delay cap (0 is no cap) and verify no packets are dropped. | 732 // Reset delay cap (0 is no cap) and verify no packets are dropped. |
733 filter.SetCapacity(10); | 733 filter.SetCapacityKbps(10); |
734 filter.SetMaxDelay(0); | 734 filter.SetMaxDelayMs(0); |
735 TestChoke(&filter, 100, 100, 2); | 735 TestChoke(&filter, 100, 100, 2); |
736 TestChoke(&filter, 9900, 0, 98); | 736 TestChoke(&filter, 9900, 0, 98); |
737 } | 737 } |
738 | 738 |
739 TEST_F(BweTestFramework_ChokeFilterTest, ShortTrace) { | 739 TEST_F(BweTestFramework_ChokeFilterTest, ShortTrace) { |
740 // According to the input file 6 packets should be transmitted within | 740 // According to the input file 6 packets should be transmitted within |
741 // 100 milliseconds. | 741 // 100 milliseconds. |
742 TraceBasedDeliveryFilter filter(NULL, 0); | 742 TraceBasedDeliveryFilter filter(NULL, 0); |
743 ASSERT_TRUE(filter.Init(test::ResourcePath("synthetic-trace", "rx"))); | 743 ASSERT_TRUE(filter.Init(test::ResourcePath("synthetic-trace", "rx"))); |
744 TestChoke(&filter, 100, 100, 6); | 744 TestChoke(&filter, 100, 100, 6); |
745 } | 745 } |
746 | 746 |
747 TEST_F(BweTestFramework_ChokeFilterTest, ShortTraceTwoWraps) { | 747 TEST_F(BweTestFramework_ChokeFilterTest, ShortTraceTwoWraps) { |
748 // According to the input file 19 packets should be transmitted within | 748 // According to the input file 19 packets should be transmitted within |
749 // 280 milliseconds (at the wrapping point two packets are sent back to back). | 749 // 280 milliseconds (at the wrapping point two packets are sent back to back). |
750 TraceBasedDeliveryFilter filter(NULL, 0); | 750 TraceBasedDeliveryFilter filter(NULL, 0); |
751 ASSERT_TRUE(filter.Init(test::ResourcePath("synthetic-trace", "rx"))); | 751 ASSERT_TRUE(filter.Init(test::ResourcePath("synthetic-trace", "rx"))); |
752 TestChoke(&filter, 280, 100, 19); | 752 TestChoke(&filter, 280, 100, 19); |
753 } | 753 } |
754 | 754 |
755 TEST_F(BweTestFramework_ChokeFilterTest, ShortTraceMaxDelay) { | 755 TEST_F(BweTestFramework_ChokeFilterTest, ShortTraceMaxDelay) { |
756 TraceBasedDeliveryFilter filter(NULL, 0); | 756 TraceBasedDeliveryFilter filter(NULL, 0); |
757 filter.SetMaxDelay(25); | 757 filter.SetMaxDelayMs(25); |
758 ASSERT_TRUE(filter.Init(test::ResourcePath("synthetic-trace", "rx"))); | 758 ASSERT_TRUE(filter.Init(test::ResourcePath("synthetic-trace", "rx"))); |
759 // Uses all slots up to 110 ms. Several packets are being dropped. | 759 // Uses all slots up to 110 ms. Several packets are being dropped. |
760 TestChoke(&filter, 110, 20, 9); | 760 TestChoke(&filter, 110, 20, 9); |
761 CheckMaxDelay(25); | 761 CheckMaxDelay(25); |
762 // Simulate enough time for the next slot (at 135 ms) to be used. This makes | 762 // Simulate enough time for the next slot (at 135 ms) to be used. This makes |
763 // sure that a slot isn't missed between runs. | 763 // sure that a slot isn't missed between runs. |
764 TestChoke(&filter, 25, 1, 1); | 764 TestChoke(&filter, 25, 1, 1); |
765 } | 765 } |
766 | 766 |
767 void TestVideoSender(VideoSender* sender, | 767 void TestVideoSender(VideoSender* sender, |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
999 packets.push_back(feedback); | 999 packets.push_back(feedback); |
1000 sender.RunFor(10000, &packets); | 1000 sender.RunFor(10000, &packets); |
1001 EXPECT_EQ(820000u, source.bits_per_second()); | 1001 EXPECT_EQ(820000u, source.bits_per_second()); |
1002 | 1002 |
1003 for (auto* packet : packets) | 1003 for (auto* packet : packets) |
1004 delete packet; | 1004 delete packet; |
1005 } | 1005 } |
1006 } // namespace bwe | 1006 } // namespace bwe |
1007 } // namespace testing | 1007 } // namespace testing |
1008 } // namespace webrtc | 1008 } // namespace webrtc |
OLD | NEW |