Index: media/audio/audio_input_controller.cc |
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc |
index bcd9c7281e61d1ff3b3b66b73cf59f717c33296a..d662d6fb968b364e76af51d45d5da8a6dcf1e018 100644 |
--- a/media/audio/audio_input_controller.cc |
+++ b/media/audio/audio_input_controller.cc |
@@ -8,6 +8,7 @@ |
#include "base/strings/stringprintf.h" |
#include "base/threading/thread_restrictions.h" |
#include "base/time/time.h" |
+#include "media/audio/audio_parameters.h" |
#include "media/base/limits.h" |
#include "media/base/scoped_histogram_timer.h" |
#include "media/base/user_input_monitor.h" |
@@ -85,6 +86,7 @@ AudioInputController::AudioInputController(EventHandler* handler, |
max_volume_(0.0), |
user_input_monitor_(user_input_monitor), |
#if defined(AUDIO_POWER_MONITORING) |
+ log_silence_state_(false), |
silence_state_(SILENCE_STATE_NO_MEASUREMENT), |
#endif |
prev_key_down_count_(0) { |
@@ -238,6 +240,21 @@ void AudioInputController::DoCreate(AudioManager* audio_manager, |
DoCreateForStream(audio_manager->MakeAudioInputStream(params, device_id)); |
} |
+void AudioInputController::DoCreateForLowLatency(AudioManager* audio_manager, |
+ const AudioParameters& params, |
+ const std::string& device_id) { |
+ DCHECK(task_runner_->BelongsToCurrentThread()); |
+ |
+#if defined(AUDIO_POWER_MONITORING) |
+ // We only log silence state UMA stats for low latency mode and if we use a |
+ // real device. |
+ if (params.format() != AudioParameters::AUDIO_FAKE) |
+ log_silence_state_ = true; |
+#endif |
+ |
+ DoCreate(audio_manager, params, device_id); |
+} |
+ |
void AudioInputController::DoCreateForStream( |
AudioInputStream* stream_to_control) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
@@ -329,10 +346,10 @@ void AudioInputController::DoClose() { |
user_input_monitor_->DisableKeyPressMonitoring(); |
#if defined(AUDIO_POWER_MONITORING) |
- // Send UMA stats if we have enabled power monitoring. |
- if (audio_level_) { |
+ // Send UMA stats if enabled. |
+ if (log_silence_state_) |
LogSilenceState(silence_state_); |
- } |
+ log_silence_state_ = false; |
#endif |
state_ = CLOSED; |
@@ -503,26 +520,11 @@ void AudioInputController::DoLogAudioLevel(float level_dbfs) { |
std::string log_string = base::StringPrintf( |
"AIC::OnData: average audio level=%.2f dBFS", level_dbfs); |
static const float kSilenceThresholdDBFS = -72.24719896f; |
- if (level_dbfs < kSilenceThresholdDBFS) { |
+ if (level_dbfs < kSilenceThresholdDBFS) |
log_string += " <=> no audio input!"; |
- if (silence_state_ == SILENCE_STATE_NO_MEASUREMENT) |
- silence_state_ = SILENCE_STATE_ONLY_SILENCE; |
- else if (silence_state_ == SILENCE_STATE_ONLY_AUDIO) |
- silence_state_ = SILENCE_STATE_AUDIO_AND_SILENCE; |
- else |
- DCHECK(silence_state_ == SILENCE_STATE_ONLY_SILENCE || |
- silence_state_ == SILENCE_STATE_AUDIO_AND_SILENCE); |
- } else { |
- if (silence_state_ == SILENCE_STATE_NO_MEASUREMENT) |
- silence_state_ = SILENCE_STATE_ONLY_AUDIO; |
- else if (silence_state_ == SILENCE_STATE_ONLY_SILENCE) |
- silence_state_ = SILENCE_STATE_AUDIO_AND_SILENCE; |
- else |
- DCHECK(silence_state_ == SILENCE_STATE_ONLY_AUDIO || |
- silence_state_ == SILENCE_STATE_AUDIO_AND_SILENCE); |
- } |
- |
handler_->OnLog(this, log_string); |
+ |
+ UpdateSilenceState(level_dbfs < kSilenceThresholdDBFS); |
#endif |
} |
@@ -555,6 +557,26 @@ bool AudioInputController::GetDataIsActive() { |
} |
#if defined(AUDIO_POWER_MONITORING) |
+void AudioInputController::UpdateSilenceState(bool silence) { |
+ if (silence) { |
+ if (silence_state_ == SILENCE_STATE_NO_MEASUREMENT) |
+ silence_state_ = SILENCE_STATE_ONLY_SILENCE; |
+ else if (silence_state_ == SILENCE_STATE_ONLY_AUDIO) |
+ silence_state_ = SILENCE_STATE_AUDIO_AND_SILENCE; |
+ else |
+ DCHECK(silence_state_ == SILENCE_STATE_ONLY_SILENCE || |
+ silence_state_ == SILENCE_STATE_AUDIO_AND_SILENCE); |
+ } else { |
+ if (silence_state_ == SILENCE_STATE_NO_MEASUREMENT) |
+ silence_state_ = SILENCE_STATE_ONLY_AUDIO; |
+ else if (silence_state_ == SILENCE_STATE_ONLY_SILENCE) |
+ silence_state_ = SILENCE_STATE_AUDIO_AND_SILENCE; |
+ else |
+ DCHECK(silence_state_ == SILENCE_STATE_ONLY_AUDIO || |
+ silence_state_ == SILENCE_STATE_AUDIO_AND_SILENCE); |
+ } |
+} |
+ |
void AudioInputController::LogSilenceState(SilenceState value) { |
UMA_HISTOGRAM_ENUMERATION("Media.AudioInputControllerSessionSilenceReport", |
value, |