Added FullStack performance test for screensharing with VP9

Review URL: https://codereview.webrtc.org/1215113003

Cr-Commit-Position: refs/heads/master@{#9657}
diff --git a/webrtc/video/full_stack.cc b/webrtc/video/full_stack.cc
index 70ba6c6..1220482 100644
--- a/webrtc/video/full_stack.cc
+++ b/webrtc/video/full_stack.cc
@@ -54,6 +54,7 @@
   double avg_psnr_threshold;
   double avg_ssim_threshold;
   int test_durations_secs;
+  std::string codec;
   FakeNetworkPipe::Config link;
 };
 
@@ -499,11 +500,23 @@
 
   CreateSendConfig(1);
 
-  rtc::scoped_ptr<VideoEncoder> encoder(
-      VideoEncoder::Create(VideoEncoder::kVp8));
-  send_config_.encoder_settings.encoder = encoder.get();
-  send_config_.encoder_settings.payload_name = "VP8";
+  rtc::scoped_ptr<VideoEncoder> encoder;
+  if (params.codec == "VP8") {
+    encoder =
+        rtc::scoped_ptr<VideoEncoder>(VideoEncoder::Create(VideoEncoder::kVp8));
+    send_config_.encoder_settings.encoder = encoder.get();
+    send_config_.encoder_settings.payload_name = "VP8";
+  } else if (params.codec == "VP9") {
+    encoder =
+        rtc::scoped_ptr<VideoEncoder>(VideoEncoder::Create(VideoEncoder::kVp9));
+    send_config_.encoder_settings.encoder = encoder.get();
+    send_config_.encoder_settings.payload_name = "VP9";
+  } else {
+    RTC_NOTREACHED() << "Codec not supported!";
+    return;
+  }
   send_config_.encoder_settings.payload_type = 124;
+
   send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
   send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
   send_config_.rtp.rtx.payload_type = kSendRtxPayloadType;
@@ -516,14 +529,24 @@
   stream->max_bitrate_bps = params.max_bitrate_bps;
   stream->max_framerate = params.clip.fps;
 
+  VideoCodecVP8 vp8_settings;
+  VideoCodecVP9 vp9_settings;
   if (params.screenshare) {
     encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen;
     encoder_config_.min_transmit_bitrate_bps = 400 * 1000;
-    VideoCodecVP8 vp8_settings = VideoEncoder::GetDefaultVp8Settings();
-    vp8_settings.denoisingOn = false;
-    vp8_settings.frameDroppingOn = false;
-    vp8_settings.numberOfTemporalLayers = 2;
-    encoder_config_.encoder_specific_settings = &vp8_settings;
+    if (params.codec == "VP8") {
+      vp8_settings = VideoEncoder::GetDefaultVp8Settings();
+      vp8_settings.denoisingOn = false;
+      vp8_settings.frameDroppingOn = false;
+      vp8_settings.numberOfTemporalLayers = 2;
+      encoder_config_.encoder_specific_settings = &vp8_settings;
+    } else if (params.codec == "VP9") {
+      vp9_settings = VideoEncoder::GetDefaultVp9Settings();
+      vp9_settings.denoisingOn = false;
+      vp9_settings.frameDroppingOn = false;
+      vp9_settings.numberOfTemporalLayers = 2;
+      encoder_config_.encoder_specific_settings = &vp9_settings;
+    }
 
     stream->temporal_layer_thresholds_bps.clear();
     stream->temporal_layer_thresholds_bps.push_back(stream->target_bitrate_bps);
@@ -591,7 +614,8 @@
                                     300000,
                                     36.0,
                                     0.96,
-                                    kFullStackTestDurationSecs};
+                                    kFullStackTestDurationSecs,
+                                    "VP8"};
   RunTest(paris_qcif);
 }
 
@@ -605,7 +629,8 @@
                                      700000,
                                      0.0,
                                      0.0,
-                                     kFullStackTestDurationSecs};
+                                     kFullStackTestDurationSecs,
+                                     "VP8"};
   RunTest(foreman_cif);
 }
 
@@ -618,7 +643,8 @@
                                      2000000,
                                      0.0,
                                      0.0,
-                                     kFullStackTestDurationSecs};
+                                     kFullStackTestDurationSecs,
+                                     "VP8"};
   foreman_cif.link.loss_percent = 5;
   foreman_cif.link.queue_delay_ms = 50;
   RunTest(foreman_cif);
@@ -633,7 +659,8 @@
                                      2000000,
                                      0.0,
                                      0.0,
-                                     kFullStackTestDurationSecs};
+                                     kFullStackTestDurationSecs,
+                                     "VP8"};
   foreman_cif.link.queue_length_packets = 0;
   foreman_cif.link.queue_delay_ms = 0;
   foreman_cif.link.link_capacity_kbps = 500;
@@ -649,7 +676,8 @@
                                      2000000,
                                      0.0,
                                      0.0,
-                                     kFullStackTestDurationSecs};
+                                     kFullStackTestDurationSecs,
+                                     "VP8"};
   foreman_cif.link.queue_length_packets = 32;
   foreman_cif.link.queue_delay_ms = 0;
   foreman_cif.link.link_capacity_kbps = 500;
@@ -665,7 +693,8 @@
                                      2000000,
                                      0.0,
                                      0.0,
-                                     kFullStackTestDurationSecs};
+                                     kFullStackTestDurationSecs,
+                                     "VP8"};
   foreman_cif.link.queue_length_packets = 0;
   foreman_cif.link.queue_delay_ms = 100;
   foreman_cif.link.link_capacity_kbps = 500;
@@ -681,7 +710,8 @@
                                      2000000,
                                      0.0,
                                      0.0,
-                                     kFullStackTestDurationSecs};
+                                     kFullStackTestDurationSecs,
+                                     "VP8"};
   foreman_cif.link.queue_length_packets = 32;
   foreman_cif.link.queue_delay_ms = 100;
   foreman_cif.link.link_capacity_kbps = 500;
@@ -697,7 +727,8 @@
                                      2000000,
                                      0.0,
                                      0.0,
-                                     kFullStackTestDurationSecs};
+                                     kFullStackTestDurationSecs,
+                                     "VP8"};
   foreman_cif.link.queue_length_packets = 32;
   foreman_cif.link.queue_delay_ms = 100;
   foreman_cif.link.link_capacity_kbps = 1000;
@@ -707,7 +738,7 @@
 // Temporarily disabled on Android due to low test timeouts.
 // https://code.google.com/p/chromium/issues/detail?id=513170
 #include "webrtc/test/testsupport/gtest_disable.h"
-TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlides)) {
+TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlidesVP8_2TL)) {
   FullStackTestParams screenshare_params = {
       "screenshare_slides",
       {"screenshare_slides", 1850, 1110, 5},
@@ -717,7 +748,24 @@
       2000000,
       0.0,
       0.0,
-      kFullStackTestDurationSecs};
+      kFullStackTestDurationSecs,
+      "VP8"};
+  RunTest(screenshare_params);
+}
+
+// Disabled on Android along with VP8 screenshare above.
+TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlidesVP9_2TL)) {
+  FullStackTestParams screenshare_params = {
+      "screenshare_slides_vp9_2tl",
+      {"screenshare_slides", 1850, 1110, 5},
+      true,
+      50000,
+      200000,
+      2000000,
+      0.0,
+      0.0,
+      kFullStackTestDurationSecs,
+      "VP9"};
   RunTest(screenshare_params);
 }
 }  // namespace webrtc
diff --git a/webrtc/video/screenshare_loopback.cc b/webrtc/video/screenshare_loopback.cc
index a308424..8f0ab63 100644
--- a/webrtc/video/screenshare_loopback.cc
+++ b/webrtc/video/screenshare_loopback.cc
@@ -132,6 +132,11 @@
     vp8_settings_.denoisingOn = false;
     vp8_settings_.frameDroppingOn = false;
     vp8_settings_.numberOfTemporalLayers = 2;
+
+    vp9_settings_ = VideoEncoder::GetDefaultVp9Settings();
+    vp9_settings_.denoisingOn = false;
+    vp9_settings_.frameDroppingOn = false;
+    vp9_settings_.numberOfTemporalLayers = 2;
   }
   virtual ~ScreenshareLoopback() {}
 
@@ -141,7 +146,14 @@
     VideoStream* stream = &encoder_config.streams[0];
     encoder_config.content_type = VideoEncoderConfig::ContentType::kScreen;
     encoder_config.min_transmit_bitrate_bps = flags::MinTransmitBitrate();
-    encoder_config.encoder_specific_settings = &vp8_settings_;
+    if (config_.codec == "VP8") {
+      encoder_config.encoder_specific_settings = &vp8_settings_;
+    } else if (config_.codec == "VP9") {
+      encoder_config.encoder_specific_settings = &vp9_settings_;
+    } else {
+      RTC_NOTREACHED() << "Codec not supported!";
+      abort();
+    }
     stream->temporal_layer_thresholds_bps.clear();
     stream->target_bitrate_bps =
         static_cast<int>(config_.start_bitrate_kbps) * 1000;
@@ -178,6 +190,7 @@
   }
 
   VideoCodecVP8 vp8_settings_;
+  VideoCodecVP9 vp9_settings_;
 };
 
 void Loopback() {