Monitor the "concealed samples" stat for the audio during negotiation.

Bug: webrtc:12361
Change-Id: Ib638314f78782d6c3c4ebbb0899f3d6d4cc8e869
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/201727
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33057}
diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
index 7b2d171..df8d6c1 100644
--- a/pc/peer_connection_integrationtest.cc
+++ b/pc/peer_connection_integrationtest.cc
@@ -617,6 +617,8 @@
     ASSERT_EQ(audio_track_stats_id_, *rtp_stats->track_id);
     audio_packets_stat_ = *rtp_stats->packets_received;
     audio_delay_stat_ = *track_stats->relative_packet_arrival_delay;
+    audio_samples_stat_ = *track_stats->total_samples_received;
+    audio_concealed_stat_ = *track_stats->concealed_samples;
   }
 
   void UpdateDelayStats(std::string tag, int desc_size) {
@@ -634,10 +636,33 @@
     // An average relative packet arrival delay over the renegotiation of
     // > 100 ms indicates that something is dramatically wrong, and will impact
     // quality for sure.
-    ASSERT_GT(0.1, recent_delay) << tag << " size " << desc_size;
+    EXPECT_GT(0.1, recent_delay) << tag << " size " << desc_size;
+    auto delta_samples =
+        *track_stats->total_samples_received - audio_samples_stat_;
+    auto delta_concealed =
+        *track_stats->concealed_samples - audio_concealed_stat_;
+    // These limits should be adjusted down as we improve:
+    //
+    // Concealing more than 4000 samples during a renegotiation is unacceptable.
+    // Concealing more than 20% of samples during a renegotiation is
+    // unacceptable.
+
+    // Current lowest scores:
+    // linux_more_configs bot at conceal rate 0.516
+    // linux_more_configs bot at conceal count 5184
+    // android_arm_rel at conceal count 9241
+    EXPECT_GT(15000U, delta_concealed) << "Concealed " << delta_concealed
+                                       << " of " << delta_samples << " samples";
+    if (delta_samples > 0) {
+      EXPECT_GT(0.6, 1.0 * delta_concealed / delta_samples)
+          << "Concealed " << delta_concealed << " of " << delta_samples
+          << " samples";
+    }
     // Increment trailing counters
     audio_packets_stat_ = *rtp_stats->packets_received;
     audio_delay_stat_ = *track_stats->relative_packet_arrival_delay;
+    audio_samples_stat_ = *track_stats->total_samples_received;
+    audio_concealed_stat_ = *track_stats->concealed_samples;
   }
 
  private:
@@ -1111,6 +1136,8 @@
   // Variables for tracking delay stats on an audio track
   int audio_packets_stat_ = 0;
   double audio_delay_stat_ = 0.0;
+  uint64_t audio_samples_stat_ = 0;
+  uint64_t audio_concealed_stat_ = 0;
   std::string rtp_stats_id_;
   std::string audio_track_stats_id_;