AGC2 new data dumps

Bug: webrtc:7494
Change-Id: Id288dd426e1c2754805bc548fbffe0eaeaacf3da
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/213420
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33605}
diff --git a/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc b/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc
index 36ef9be..8a56464 100644
--- a/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc
+++ b/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc
@@ -136,6 +136,8 @@
   } else if (frames_to_gain_increase_allowed_ > 0) {
     frames_to_gain_increase_allowed_--;
   }
+  apm_data_dumper_->DumpRaw("agc2_frames_to_gain_increase_allowed",
+                            frames_to_gain_increase_allowed_);
 
   const float gain_change_this_frame_db = ComputeGainChangeThisFrameDb(
       target_gain_db, last_gain_db_,
diff --git a/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc b/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc
index 739997f..9857471 100644
--- a/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc
+++ b/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc
@@ -186,7 +186,7 @@
 
 void AdaptiveModeLevelEstimator::DumpDebugData() const {
   apm_data_dumper_->DumpRaw("agc2_adaptive_level_estimate_dbfs", level_dbfs_);
-  apm_data_dumper_->DumpRaw("agc2_adaptive_num_adjacent_speech_frames_",
+  apm_data_dumper_->DumpRaw("agc2_adaptive_num_adjacent_speech_frames",
                             num_adjacent_speech_frames_);
   apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_level_estimate_num",
                             preliminary_state_.level_dbfs.numerator);
@@ -194,6 +194,10 @@
                             preliminary_state_.level_dbfs.denominator);
   apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_saturation_margin_db",
                             preliminary_state_.saturation_protector.margin_db);
+  apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_time_to_full_buffer_ms",
+                            preliminary_state_.time_to_full_buffer_ms);
+  apm_data_dumper_->DumpRaw("agc2_adaptive_reliable_time_to_full_buffer_ms",
+                            reliable_state_.time_to_full_buffer_ms);
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/agc2/agc2_common.h b/modules/audio_processing/agc2/agc2_common.h
index d0df43f..db67113 100644
--- a/modules/audio_processing/agc2/agc2_common.h
+++ b/modules/audio_processing/agc2/agc2_common.h
@@ -45,6 +45,7 @@
 
 // Robust VAD probability and speech decisions.
 constexpr int kDefaultVadRnnResetPeriodMs = 1500;
+static_assert(kDefaultVadRnnResetPeriodMs % kFrameDurationMs == 0, "");
 constexpr float kDefaultSmoothedVadProbabilityAttack = 1.0f;
 constexpr int kDefaultLevelEstimatorAdjacentSpeechFramesThreshold = 1;
 
diff --git a/modules/audio_processing/agc2/limiter.cc b/modules/audio_processing/agc2/limiter.cc
index 1147332..ed7d3ee 100644
--- a/modules/audio_processing/agc2/limiter.cc
+++ b/modules/audio_processing/agc2/limiter.cc
@@ -125,9 +125,11 @@
   last_scaling_factor_ = scaling_factors_.back();
 
   // Dump data for debug.
-  apm_data_dumper_->DumpRaw("agc2_gain_curve_applier_scaling_factors",
-                            samples_per_channel,
-                            per_sample_scaling_factors_.data());
+  apm_data_dumper_->DumpRaw("agc2_limiter_last_scaling_factor",
+                            last_scaling_factor_);
+  apm_data_dumper_->DumpRaw(
+      "agc2_limiter_region",
+      static_cast<int>(interp_gain_curve_.get_stats().region));
 }
 
 InterpolatedGainCurve::Stats Limiter::GetGainCurveStats() const {
diff --git a/modules/audio_processing/gain_controller2.cc b/modules/audio_processing/gain_controller2.cc
index 4477065..bdb223b 100644
--- a/modules/audio_processing/gain_controller2.cc
+++ b/modules/audio_processing/gain_controller2.cc
@@ -24,14 +24,13 @@
 int GainController2::instance_count_ = 0;
 
 GainController2::GainController2()
-    : data_dumper_(
-          new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))),
+    : data_dumper_(rtc::AtomicOps::Increment(&instance_count_)),
       gain_applier_(/*hard_clip_samples=*/false,
                     /*initial_gain_factor=*/0.f),
-      limiter_(static_cast<size_t>(48000), data_dumper_.get(), "Agc2"),
+      limiter_(static_cast<size_t>(48000), &data_dumper_, "Agc2"),
       calls_since_last_limiter_log_(0) {
   if (config_.adaptive_digital.enabled) {
-    adaptive_agc_.reset(new AdaptiveAgc(data_dumper_.get()));
+    adaptive_agc_ = std::make_unique<AdaptiveAgc>(&data_dumper_);
   }
 }
 
@@ -43,12 +42,13 @@
              sample_rate_hz == AudioProcessing::kSampleRate32kHz ||
              sample_rate_hz == AudioProcessing::kSampleRate48kHz);
   limiter_.SetSampleRate(sample_rate_hz);
-  data_dumper_->InitiateNewSetOfRecordings();
-  data_dumper_->DumpRaw("sample_rate_hz", sample_rate_hz);
+  data_dumper_.InitiateNewSetOfRecordings();
+  data_dumper_.DumpRaw("sample_rate_hz", sample_rate_hz);
   calls_since_last_limiter_log_ = 0;
 }
 
 void GainController2::Process(AudioBuffer* audio) {
+  data_dumper_.DumpRaw("agc2_notified_analog_level", analog_level_);
   AudioFrameView<float> float_frame(audio->channels(), audio->num_channels(),
                                     audio->num_frames());
   // Apply fixed gain first, then the adaptive one.
@@ -90,7 +90,7 @@
   }
   gain_applier_.SetGainFactor(DbToRatio(config_.fixed_digital.gain_db));
   if (config_.adaptive_digital.enabled) {
-    adaptive_agc_.reset(new AdaptiveAgc(data_dumper_.get(), config_));
+    adaptive_agc_ = std::make_unique<AdaptiveAgc>(&data_dumper_, config_);
   } else {
     adaptive_agc_.reset();
   }
diff --git a/modules/audio_processing/gain_controller2.h b/modules/audio_processing/gain_controller2.h
index 31665bd..b62890d 100644
--- a/modules/audio_processing/gain_controller2.h
+++ b/modules/audio_processing/gain_controller2.h
@@ -18,11 +18,11 @@
 #include "modules/audio_processing/agc2/gain_applier.h"
 #include "modules/audio_processing/agc2/limiter.h"
 #include "modules/audio_processing/include/audio_processing.h"
+#include "modules/audio_processing/logging/apm_data_dumper.h"
 #include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
-class ApmDataDumper;
 class AudioBuffer;
 
 // Gain Controller 2 aims to automatically adjust levels by acting on the
@@ -30,6 +30,8 @@
 class GainController2 {
  public:
   GainController2();
+  GainController2(const GainController2&) = delete;
+  GainController2& operator=(const GainController2&) = delete;
   ~GainController2();
 
   void Initialize(int sample_rate_hz);
@@ -41,15 +43,13 @@
 
  private:
   static int instance_count_;
-  std::unique_ptr<ApmDataDumper> data_dumper_;
+  ApmDataDumper data_dumper_;
   AudioProcessing::Config::GainController2 config_;
   GainApplier gain_applier_;
   std::unique_ptr<AdaptiveAgc> adaptive_agc_;
   Limiter limiter_;
   int calls_since_last_limiter_log_;
   int analog_level_ = -1;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(GainController2);
 };
 
 }  // namespace webrtc