diff --git a/modules/audio_processing/agc/agc_manager_direct.cc b/modules/audio_processing/agc/agc_manager_direct.cc index 5b5b9ea06b..dc6d45121c 100644 --- a/modules/audio_processing/agc/agc_manager_direct.cc +++ b/modules/audio_processing/agc/agc_manager_direct.cc @@ -454,6 +454,13 @@ void AgcManagerDirect::UpdateGain() { } void AgcManagerDirect::UpdateCompressor() { + calls_since_last_gain_log_++; + if (calls_since_last_gain_log_ == 100) { + calls_since_last_gain_log_ = 0; + RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc.DigitalGainApplied", + compression_, 0, kMaxCompressionGain, + kMaxCompressionGain + 1); + } if (compression_ == target_compression_) { return; } @@ -478,6 +485,9 @@ void AgcManagerDirect::UpdateCompressor() { // Set the new compression gain. if (new_compression != compression_) { + RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc.DigitalGainUpdated", + new_compression, 0, kMaxCompressionGain, + kMaxCompressionGain + 1); compression_ = new_compression; compression_accumulator_ = new_compression; if (gctrl_->set_compression_gain_db(compression_) != 0) { diff --git a/modules/audio_processing/agc/agc_manager_direct.h b/modules/audio_processing/agc/agc_manager_direct.h index 7d2a33011f..cbfd6a1018 100644 --- a/modules/audio_processing/agc/agc_manager_direct.h +++ b/modules/audio_processing/agc/agc_manager_direct.h @@ -126,6 +126,7 @@ class AgcManagerDirect final { const bool disable_digital_adaptive_; int startup_min_level_; const int clipped_level_min_; + int calls_since_last_gain_log_ = 0; std::unique_ptr file_preproc_; std::unique_ptr file_postproc_; diff --git a/modules/audio_processing/agc2/BUILD.gn b/modules/audio_processing/agc2/BUILD.gn index c56689b2a6..45ef968506 100644 --- a/modules/audio_processing/agc2/BUILD.gn +++ b/modules/audio_processing/agc2/BUILD.gn @@ -65,6 +65,7 @@ rtc_source_set("adaptive_digital") { "../../../rtc_base:checks", "../../../rtc_base:rtc_base_approved", "../../../rtc_base:safe_minmax", + "../../../system_wrappers:metrics_api", ] } diff --git a/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc b/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc index ca6ec5d4ec..f5342df829 100644 --- a/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc +++ b/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc @@ -16,6 +16,7 @@ #include "modules/audio_processing/agc2/agc2_common.h" #include "modules/audio_processing/logging/apm_data_dumper.h" #include "rtc_base/numerics/safe_minmax.h" +#include "system_wrappers/include/metrics.h" namespace webrtc { namespace { @@ -76,6 +77,15 @@ void AdaptiveDigitalGainApplier::Process( float input_noise_level_dbfs, const VadWithLevel::LevelAndProbability vad_result, AudioFrameView float_frame) { + calls_since_last_gain_log_++; + if (calls_since_last_gain_log_ == 100) { + calls_since_last_gain_log_ = 0; + RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc2.DigitalGainApplied", + last_gain_db_, 0, kMaxGainDb, kMaxGainDb + 1); + RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc2.EstimatedNoiseLevel", + input_noise_level_dbfs, 0, 100, 101); + } + input_level_dbfs = std::min(input_level_dbfs, 0.f); RTC_DCHECK_GE(input_level_dbfs, -150.f); diff --git a/modules/audio_processing/agc2/adaptive_digital_gain_applier.h b/modules/audio_processing/agc2/adaptive_digital_gain_applier.h index 31f87f16e5..a3a1ff57f5 100644 --- a/modules/audio_processing/agc2/adaptive_digital_gain_applier.h +++ b/modules/audio_processing/agc2/adaptive_digital_gain_applier.h @@ -32,6 +32,7 @@ class AdaptiveDigitalGainApplier { private: float last_gain_db_ = kInitialAdaptiveDigitalGainDb; GainApplier gain_applier_; + int calls_since_last_gain_log_ = 0; // For some combinations of noise and speech probability, increasing // the level is not allowed. Since we may get VAD results in bursts,