| 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,
|
|
|