aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Loiko <aleloi@webrtc.org>2018-08-10 14:43:51 +0200
committerCommit Bot <commit-bot@chromium.org>2018-08-15 13:44:46 +0000
commitf3122e0efe95e6d1fcc687d7b9224953dbad15c9 (patch)
tree8eab2aeacf610af16f4e0326f96bea4195bf13f9
parent847a9c70c2f952470a418e5b0eee30f91046d151 (diff)
downloadwebrtc-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}
-rw-r--r--modules/audio_processing/agc/agc_manager_direct.cc10
-rw-r--r--modules/audio_processing/agc/agc_manager_direct.h1
-rw-r--r--modules/audio_processing/agc2/BUILD.gn1
-rw-r--r--modules/audio_processing/agc2/adaptive_digital_gain_applier.cc10
-rw-r--r--modules/audio_processing/agc2/adaptive_digital_gain_applier.h1
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,