Add a placeholder stat for logging the estimated residual echo likelihood.

The stat is currently always set to zero until the residual echo detector has landed.

BUG=webrtc:6525

Review-Url: https://codereview.webrtc.org/2431443003
Cr-Commit-Position: refs/heads/master@{#14721}
diff --git a/webrtc/api/call/audio_send_stream.h b/webrtc/api/call/audio_send_stream.h
index ae7531c..1956b97 100644
--- a/webrtc/api/call/audio_send_stream.h
+++ b/webrtc/api/call/audio_send_stream.h
@@ -46,6 +46,7 @@
     int32_t echo_delay_std_ms = -1;
     int32_t echo_return_loss = -100;
     int32_t echo_return_loss_enhancement = -100;
+    float residual_echo_likelihood = -1.0f;
     bool typing_noise_detected = false;
   };
 
diff --git a/webrtc/api/mediastreaminterface.h b/webrtc/api/mediastreaminterface.h
index 988ee84..f813dda 100644
--- a/webrtc/api/mediastreaminterface.h
+++ b/webrtc/api/mediastreaminterface.h
@@ -195,8 +195,9 @@
                             echo_return_loss(0),
                             echo_return_loss_enhancement(0),
                             echo_delay_median_ms(0),
-                            aec_quality_min(0.0),
                             echo_delay_std_ms(0),
+                            aec_quality_min(0.0),
+                            residual_echo_likelihood(0.0f),
                             aec_divergent_filter_fraction(0.0) {}
     ~AudioProcessorStats() {}
 
@@ -204,8 +205,9 @@
     int echo_return_loss;
     int echo_return_loss_enhancement;
     int echo_delay_median_ms;
-    float aec_quality_min;
     int echo_delay_std_ms;
+    float aec_quality_min;
+    float residual_echo_likelihood;
     float aec_divergent_filter_fraction;
   };
 
diff --git a/webrtc/api/statscollector.cc b/webrtc/api/statscollector.cc
index 766e949..d150045 100644
--- a/webrtc/api/statscollector.cc
+++ b/webrtc/api/statscollector.cc
@@ -103,7 +103,8 @@
                              int echo_return_loss_enhancement,
                              int echo_delay_median_ms,
                              float aec_quality_min,
-                             int echo_delay_std_ms) {
+                             int echo_delay_std_ms,
+                             float residual_echo_likelihood) {
   report->AddBoolean(StatsReport::kStatsValueNameTypingNoiseState,
                      typing_noise_detected);
   if (aec_quality_min >= 0.0f) {
@@ -123,6 +124,10 @@
   report->AddInt(StatsReport::kStatsValueNameEchoReturnLoss, echo_return_loss);
   report->AddInt(StatsReport::kStatsValueNameEchoReturnLossEnhancement,
                  echo_return_loss_enhancement);
+  if (residual_echo_likelihood >= 0.0f) {
+    report->AddFloat(StatsReport::kStatsValueNameResidualEchoLikelihood,
+                     residual_echo_likelihood);
+  }
 }
 
 void ExtractStats(const cricket::VoiceReceiverInfo& info, StatsReport* report) {
@@ -181,7 +186,8 @@
   SetAudioProcessingStats(
       report, info.typing_noise_detected, info.echo_return_loss,
       info.echo_return_loss_enhancement, info.echo_delay_median_ms,
-      info.aec_quality_min, info.echo_delay_std_ms);
+      info.aec_quality_min, info.echo_delay_std_ms,
+      info.residual_echo_likelihood);
 
   RTC_DCHECK_GE(info.audio_level, 0);
   const IntForAdd ints[] = {
@@ -926,7 +932,8 @@
     SetAudioProcessingStats(
         report, stats.typing_noise_detected, stats.echo_return_loss,
         stats.echo_return_loss_enhancement, stats.echo_delay_median_ms,
-        stats.aec_quality_min, stats.echo_delay_std_ms);
+        stats.aec_quality_min, stats.echo_delay_std_ms,
+        stats.residual_echo_likelihood);
 
     report->AddFloat(StatsReport::kStatsValueNameAecDivergentFilterFraction,
                      stats.aec_divergent_filter_fraction);
diff --git a/webrtc/api/statscollector_unittest.cc b/webrtc/api/statscollector_unittest.cc
index 8d5978f..866e76f 100644
--- a/webrtc/api/statscollector_unittest.cc
+++ b/webrtc/api/statscollector_unittest.cc
@@ -402,8 +402,13 @@
       &value_in_report));
   EXPECT_EQ(rtc::ToString<int>(sinfo.echo_return_loss_enhancement),
             value_in_report);
-  EXPECT_TRUE(GetValue(
-      report, StatsReport::kStatsValueNameAudioInputLevel, &value_in_report));
+  EXPECT_TRUE(GetValue(report,
+                       StatsReport::kStatsValueNameResidualEchoLikelihood,
+                       &value_in_report));
+  EXPECT_EQ(rtc::ToString<float>(sinfo.residual_echo_likelihood),
+            value_in_report);
+  EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameAudioInputLevel,
+                       &value_in_report));
   EXPECT_EQ(rtc::ToString<int>(sinfo.audio_level), value_in_report);
   EXPECT_TRUE(GetValue(
       report, StatsReport::kStatsValueNameTypingNoiseState, &value_in_report));
diff --git a/webrtc/api/statstypes.cc b/webrtc/api/statstypes.cc
index 339d5bb..391a938 100644
--- a/webrtc/api/statstypes.cc
+++ b/webrtc/api/statstypes.cc
@@ -568,6 +568,8 @@
       return "googRemoteCandidateType";
     case kStatsValueNameRemoteCertificateId:
       return "remoteCertificateId";
+    case kStatsValueNameResidualEchoLikelihood:
+      return "googResidualEchoLikelihood";
     case kStatsValueNameRetransmitBitrate:
       return "googRetransmitBitrate";
     case kStatsValueNameRtt:
diff --git a/webrtc/api/statstypes.h b/webrtc/api/statstypes.h
index a0a85c9..edcfcfd 100644
--- a/webrtc/api/statstypes.h
+++ b/webrtc/api/statstypes.h
@@ -198,6 +198,7 @@
     kStatsValueNameRemoteCandidateType,
     kStatsValueNameRemoteCertificateId,
     kStatsValueNameRenderDelayMs,
+    kStatsValueNameResidualEchoLikelihood,
     kStatsValueNameRetransmitBitrate,
     kStatsValueNameRtt,
     kStatsValueNameSecondaryDecodedRate,