diff options
author | Alex Loiko <aleloi@webrtc.org> | 2018-08-10 14:43:51 +0200 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2018-08-15 13:44:46 +0000 |
commit | f3122e0efe95e6d1fcc687d7b9224953dbad15c9 (patch) | |
tree | 8eab2aeacf610af16f4e0326f96bea4195bf13f9 | |
parent | 847a9c70c2f952470a418e5b0eee30f91046d151 (diff) | |
download | webrtc-f3122e0efe95e6d1fcc687d7b9224953dbad15c9.tar.gz |
Gain metrics for digital adaptive AGC.
We add 2 metrics for measuring applied digital gain to
AgcManagerDirect. We also add an applied gain and an estimated noise
metric to Agc2.
Chromium histogram CL is
https://chromium-review.googlesource.com/c/chromium/src/+/1170833
Bug: webrtc:7494
Change-Id: Ie40873f9e43bc7d34d8f5473cd73bd47eb84e855
Reviewed-on: https://webrtc-review.googlesource.com/93468
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24290}
5 files changed, 23 insertions, 0 deletions
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<DebugFile> file_preproc_; std::unique_ptr<DebugFile> 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> 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, |