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

Side by Side Diff: webrtc/video/full_stack.cc

Issue 1215113003: Added FullStack performance test for screensharing with VP9 (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: editing comments and reverting timeout Created 5 years, 4 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
« no previous file with comments | « no previous file | webrtc/video/screenshare_loopback.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 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 #include <stdio.h> 10 #include <stdio.h>
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 size_t width, height; 47 size_t width, height;
48 int fps; 48 int fps;
49 } clip; 49 } clip;
50 bool screenshare; 50 bool screenshare;
51 int min_bitrate_bps; 51 int min_bitrate_bps;
52 int target_bitrate_bps; 52 int target_bitrate_bps;
53 int max_bitrate_bps; 53 int max_bitrate_bps;
54 double avg_psnr_threshold; 54 double avg_psnr_threshold;
55 double avg_ssim_threshold; 55 double avg_ssim_threshold;
56 int test_durations_secs; 56 int test_durations_secs;
57 std::string codec;
57 FakeNetworkPipe::Config link; 58 FakeNetworkPipe::Config link;
58 }; 59 };
59 60
60 class FullStackTest : public test::CallTest { 61 class FullStackTest : public test::CallTest {
61 protected: 62 protected:
62 void RunTest(const FullStackTestParams& params); 63 void RunTest(const FullStackTestParams& params);
63 }; 64 };
64 65
65 class VideoAnalyzer : public PacketReceiver, 66 class VideoAnalyzer : public PacketReceiver,
66 public newapi::Transport, 67 public newapi::Transport,
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 params.test_durations_secs * params.clip.fps); 493 params.test_durations_secs * params.clip.fps);
493 494
494 CreateCalls(Call::Config(&analyzer), Call::Config(&recv_transport)); 495 CreateCalls(Call::Config(&analyzer), Call::Config(&recv_transport));
495 496
496 analyzer.SetReceiver(receiver_call_->Receiver()); 497 analyzer.SetReceiver(receiver_call_->Receiver());
497 send_transport.SetReceiver(&analyzer); 498 send_transport.SetReceiver(&analyzer);
498 recv_transport.SetReceiver(sender_call_->Receiver()); 499 recv_transport.SetReceiver(sender_call_->Receiver());
499 500
500 CreateSendConfig(1); 501 CreateSendConfig(1);
501 502
502 rtc::scoped_ptr<VideoEncoder> encoder( 503 rtc::scoped_ptr<VideoEncoder> encoder;
503 VideoEncoder::Create(VideoEncoder::kVp8)); 504 if (params.codec == "VP8") {
504 send_config_.encoder_settings.encoder = encoder.get(); 505 encoder =
505 send_config_.encoder_settings.payload_name = "VP8"; 506 rtc::scoped_ptr<VideoEncoder>(VideoEncoder::Create(VideoEncoder::kVp8));
507 send_config_.encoder_settings.encoder = encoder.get();
508 send_config_.encoder_settings.payload_name = "VP8";
509 } else if (params.codec == "VP9") {
510 encoder =
511 rtc::scoped_ptr<VideoEncoder>(VideoEncoder::Create(VideoEncoder::kVp9));
512 send_config_.encoder_settings.encoder = encoder.get();
513 send_config_.encoder_settings.payload_name = "VP9";
514 } else {
515 RTC_NOTREACHED() << "Codec not supported!";
516 return;
517 }
506 send_config_.encoder_settings.payload_type = 124; 518 send_config_.encoder_settings.payload_type = 124;
519
507 send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 520 send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
508 send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); 521 send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
509 send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; 522 send_config_.rtp.rtx.payload_type = kSendRtxPayloadType;
510 523
511 VideoStream* stream = &encoder_config_.streams[0]; 524 VideoStream* stream = &encoder_config_.streams[0];
512 stream->width = params.clip.width; 525 stream->width = params.clip.width;
513 stream->height = params.clip.height; 526 stream->height = params.clip.height;
514 stream->min_bitrate_bps = params.min_bitrate_bps; 527 stream->min_bitrate_bps = params.min_bitrate_bps;
515 stream->target_bitrate_bps = params.target_bitrate_bps; 528 stream->target_bitrate_bps = params.target_bitrate_bps;
516 stream->max_bitrate_bps = params.max_bitrate_bps; 529 stream->max_bitrate_bps = params.max_bitrate_bps;
517 stream->max_framerate = params.clip.fps; 530 stream->max_framerate = params.clip.fps;
518 531
532 VideoCodecVP8 vp8_settings;
533 VideoCodecVP9 vp9_settings;
519 if (params.screenshare) { 534 if (params.screenshare) {
520 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; 535 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen;
521 encoder_config_.min_transmit_bitrate_bps = 400 * 1000; 536 encoder_config_.min_transmit_bitrate_bps = 400 * 1000;
522 VideoCodecVP8 vp8_settings = VideoEncoder::GetDefaultVp8Settings(); 537 if (params.codec == "VP8") {
523 vp8_settings.denoisingOn = false; 538 vp8_settings = VideoEncoder::GetDefaultVp8Settings();
524 vp8_settings.frameDroppingOn = false; 539 vp8_settings.denoisingOn = false;
525 vp8_settings.numberOfTemporalLayers = 2; 540 vp8_settings.frameDroppingOn = false;
526 encoder_config_.encoder_specific_settings = &vp8_settings; 541 vp8_settings.numberOfTemporalLayers = 2;
542 encoder_config_.encoder_specific_settings = &vp8_settings;
543 } else if (params.codec == "VP9") {
544 vp9_settings = VideoEncoder::GetDefaultVp9Settings();
545 vp9_settings.denoisingOn = false;
546 vp9_settings.frameDroppingOn = false;
547 vp9_settings.numberOfTemporalLayers = 2;
548 encoder_config_.encoder_specific_settings = &vp9_settings;
549 }
527 550
528 stream->temporal_layer_thresholds_bps.clear(); 551 stream->temporal_layer_thresholds_bps.clear();
529 stream->temporal_layer_thresholds_bps.push_back(stream->target_bitrate_bps); 552 stream->temporal_layer_thresholds_bps.push_back(stream->target_bitrate_bps);
530 } 553 }
531 554
532 CreateMatchingReceiveConfigs(); 555 CreateMatchingReceiveConfigs();
533 receive_configs_[0].renderer = &analyzer; 556 receive_configs_[0].renderer = &analyzer;
534 receive_configs_[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 557 receive_configs_[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
535 receive_configs_[0].rtp.rtx[kSendRtxPayloadType].ssrc = kSendRtxSsrcs[0]; 558 receive_configs_[0].rtp.rtx[kSendRtxPayloadType].ssrc = kSendRtxSsrcs[0];
536 receive_configs_[0].rtp.rtx[kSendRtxPayloadType].payload_type = 559 receive_configs_[0].rtp.rtx[kSendRtxPayloadType].payload_type =
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 607
585 TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) { 608 TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) {
586 FullStackTestParams paris_qcif = {"net_delay_0_0_plr_0", 609 FullStackTestParams paris_qcif = {"net_delay_0_0_plr_0",
587 {"paris_qcif", 176, 144, 30}, 610 {"paris_qcif", 176, 144, 30},
588 false, 611 false,
589 300000, 612 300000,
590 300000, 613 300000,
591 300000, 614 300000,
592 36.0, 615 36.0,
593 0.96, 616 0.96,
594 kFullStackTestDurationSecs}; 617 kFullStackTestDurationSecs,
618 "VP8"};
595 RunTest(paris_qcif); 619 RunTest(paris_qcif);
596 } 620 }
597 621
598 TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) { 622 TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
599 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif. 623 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
600 FullStackTestParams foreman_cif = {"foreman_cif_net_delay_0_0_plr_0", 624 FullStackTestParams foreman_cif = {"foreman_cif_net_delay_0_0_plr_0",
601 {"foreman_cif", 352, 288, 30}, 625 {"foreman_cif", 352, 288, 30},
602 false, 626 false,
603 700000, 627 700000,
604 700000, 628 700000,
605 700000, 629 700000,
606 0.0, 630 0.0,
607 0.0, 631 0.0,
608 kFullStackTestDurationSecs}; 632 kFullStackTestDurationSecs,
633 "VP8"};
609 RunTest(foreman_cif); 634 RunTest(foreman_cif);
610 } 635 }
611 636
612 TEST_F(FullStackTest, ForemanCifPlr5) { 637 TEST_F(FullStackTest, ForemanCifPlr5) {
613 FullStackTestParams foreman_cif = {"foreman_cif_delay_50_0_plr_5", 638 FullStackTestParams foreman_cif = {"foreman_cif_delay_50_0_plr_5",
614 {"foreman_cif", 352, 288, 30}, 639 {"foreman_cif", 352, 288, 30},
615 false, 640 false,
616 30000, 641 30000,
617 500000, 642 500000,
618 2000000, 643 2000000,
619 0.0, 644 0.0,
620 0.0, 645 0.0,
621 kFullStackTestDurationSecs}; 646 kFullStackTestDurationSecs,
647 "VP8"};
622 foreman_cif.link.loss_percent = 5; 648 foreman_cif.link.loss_percent = 5;
623 foreman_cif.link.queue_delay_ms = 50; 649 foreman_cif.link.queue_delay_ms = 50;
624 RunTest(foreman_cif); 650 RunTest(foreman_cif);
625 } 651 }
626 652
627 TEST_F(FullStackTest, ForemanCif500kbps) { 653 TEST_F(FullStackTest, ForemanCif500kbps) {
628 FullStackTestParams foreman_cif = {"foreman_cif_500kbps", 654 FullStackTestParams foreman_cif = {"foreman_cif_500kbps",
629 {"foreman_cif", 352, 288, 30}, 655 {"foreman_cif", 352, 288, 30},
630 false, 656 false,
631 30000, 657 30000,
632 500000, 658 500000,
633 2000000, 659 2000000,
634 0.0, 660 0.0,
635 0.0, 661 0.0,
636 kFullStackTestDurationSecs}; 662 kFullStackTestDurationSecs,
663 "VP8"};
637 foreman_cif.link.queue_length_packets = 0; 664 foreman_cif.link.queue_length_packets = 0;
638 foreman_cif.link.queue_delay_ms = 0; 665 foreman_cif.link.queue_delay_ms = 0;
639 foreman_cif.link.link_capacity_kbps = 500; 666 foreman_cif.link.link_capacity_kbps = 500;
640 RunTest(foreman_cif); 667 RunTest(foreman_cif);
641 } 668 }
642 669
643 TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) { 670 TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
644 FullStackTestParams foreman_cif = {"foreman_cif_500kbps_32pkts_queue", 671 FullStackTestParams foreman_cif = {"foreman_cif_500kbps_32pkts_queue",
645 {"foreman_cif", 352, 288, 30}, 672 {"foreman_cif", 352, 288, 30},
646 false, 673 false,
647 30000, 674 30000,
648 500000, 675 500000,
649 2000000, 676 2000000,
650 0.0, 677 0.0,
651 0.0, 678 0.0,
652 kFullStackTestDurationSecs}; 679 kFullStackTestDurationSecs,
680 "VP8"};
653 foreman_cif.link.queue_length_packets = 32; 681 foreman_cif.link.queue_length_packets = 32;
654 foreman_cif.link.queue_delay_ms = 0; 682 foreman_cif.link.queue_delay_ms = 0;
655 foreman_cif.link.link_capacity_kbps = 500; 683 foreman_cif.link.link_capacity_kbps = 500;
656 RunTest(foreman_cif); 684 RunTest(foreman_cif);
657 } 685 }
658 686
659 TEST_F(FullStackTest, ForemanCif500kbps100ms) { 687 TEST_F(FullStackTest, ForemanCif500kbps100ms) {
660 FullStackTestParams foreman_cif = {"foreman_cif_500kbps_100ms", 688 FullStackTestParams foreman_cif = {"foreman_cif_500kbps_100ms",
661 {"foreman_cif", 352, 288, 30}, 689 {"foreman_cif", 352, 288, 30},
662 false, 690 false,
663 30000, 691 30000,
664 500000, 692 500000,
665 2000000, 693 2000000,
666 0.0, 694 0.0,
667 0.0, 695 0.0,
668 kFullStackTestDurationSecs}; 696 kFullStackTestDurationSecs,
697 "VP8"};
669 foreman_cif.link.queue_length_packets = 0; 698 foreman_cif.link.queue_length_packets = 0;
670 foreman_cif.link.queue_delay_ms = 100; 699 foreman_cif.link.queue_delay_ms = 100;
671 foreman_cif.link.link_capacity_kbps = 500; 700 foreman_cif.link.link_capacity_kbps = 500;
672 RunTest(foreman_cif); 701 RunTest(foreman_cif);
673 } 702 }
674 703
675 TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) { 704 TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
676 FullStackTestParams foreman_cif = {"foreman_cif_500kbps_100ms_32pkts_queue", 705 FullStackTestParams foreman_cif = {"foreman_cif_500kbps_100ms_32pkts_queue",
677 {"foreman_cif", 352, 288, 30}, 706 {"foreman_cif", 352, 288, 30},
678 false, 707 false,
679 30000, 708 30000,
680 500000, 709 500000,
681 2000000, 710 2000000,
682 0.0, 711 0.0,
683 0.0, 712 0.0,
684 kFullStackTestDurationSecs}; 713 kFullStackTestDurationSecs,
714 "VP8"};
685 foreman_cif.link.queue_length_packets = 32; 715 foreman_cif.link.queue_length_packets = 32;
686 foreman_cif.link.queue_delay_ms = 100; 716 foreman_cif.link.queue_delay_ms = 100;
687 foreman_cif.link.link_capacity_kbps = 500; 717 foreman_cif.link.link_capacity_kbps = 500;
688 RunTest(foreman_cif); 718 RunTest(foreman_cif);
689 } 719 }
690 720
691 TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) { 721 TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
692 FullStackTestParams foreman_cif = {"foreman_cif_1000kbps_100ms_32pkts_queue", 722 FullStackTestParams foreman_cif = {"foreman_cif_1000kbps_100ms_32pkts_queue",
693 {"foreman_cif", 352, 288, 30}, 723 {"foreman_cif", 352, 288, 30},
694 false, 724 false,
695 30000, 725 30000,
696 2000000, 726 2000000,
697 2000000, 727 2000000,
698 0.0, 728 0.0,
699 0.0, 729 0.0,
700 kFullStackTestDurationSecs}; 730 kFullStackTestDurationSecs,
731 "VP8"};
701 foreman_cif.link.queue_length_packets = 32; 732 foreman_cif.link.queue_length_packets = 32;
702 foreman_cif.link.queue_delay_ms = 100; 733 foreman_cif.link.queue_delay_ms = 100;
703 foreman_cif.link.link_capacity_kbps = 1000; 734 foreman_cif.link.link_capacity_kbps = 1000;
704 RunTest(foreman_cif); 735 RunTest(foreman_cif);
705 } 736 }
706 737
707 // Temporarily disabled on Android due to low test timeouts. 738 // Temporarily disabled on Android due to low test timeouts.
708 // https://code.google.com/p/chromium/issues/detail?id=513170 739 // https://code.google.com/p/chromium/issues/detail?id=513170
709 #include "webrtc/test/testsupport/gtest_disable.h" 740 #include "webrtc/test/testsupport/gtest_disable.h"
710 TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlides)) { 741 TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlidesVP8_2TL)) {
711 FullStackTestParams screenshare_params = { 742 FullStackTestParams screenshare_params = {
712 "screenshare_slides", 743 "screenshare_slides",
713 {"screenshare_slides", 1850, 1110, 5}, 744 {"screenshare_slides", 1850, 1110, 5},
714 true, 745 true,
715 50000, 746 50000,
716 200000, 747 200000,
717 2000000, 748 2000000,
718 0.0, 749 0.0,
719 0.0, 750 0.0,
720 kFullStackTestDurationSecs}; 751 kFullStackTestDurationSecs,
752 "VP8"};
753 RunTest(screenshare_params);
754 }
755
756 // Disabled on Android along with VP8 screenshare above.
757 TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlidesVP9_2TL)) {
758 FullStackTestParams screenshare_params = {
759 "screenshare_slides_vp9_2tl",
760 {"screenshare_slides", 1850, 1110, 5},
761 true,
762 50000,
763 200000,
764 2000000,
765 0.0,
766 0.0,
767 kFullStackTestDurationSecs,
768 "VP9"};
721 RunTest(screenshare_params); 769 RunTest(screenshare_params);
722 } 770 }
723 } // namespace webrtc 771 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/video/screenshare_loopback.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698