Chromium Code Reviews| 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..f2eef6c41288dfc076f7237bf617a5c9f3f4cad1 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) { |
| @@ -150,7 +152,7 @@ scoped_refptr<AudioInputController> AudioInputController::CreateLowLatency( |
| // Create and open a new audio input stream from the existing |
| // audio-device thread. Use the provided audio-input device. |
| if (!controller->task_runner_->PostTask(FROM_HERE, |
| - base::Bind(&AudioInputController::DoCreate, controller, |
| + base::Bind(&AudioInputController::DoCreateForLowLatency, controller, |
| base::Unretained(audio_manager), params, device_id))) { |
| controller = NULL; |
| } |
| @@ -238,6 +240,21 @@ void AudioInputController::DoCreate(AudioManager* audio_manager, |
| DoCreateForStream(audio_manager->MakeAudioInputStream(params, device_id)); |
| } |
| +void AudioInputController::DoCreateForLowLatency(AudioManager* audio_manager, |
|
tommi (sloooow) - chröme
2014/08/21 18:06:58
why do we need a new function? Can't we just add
Henrik Grunell
2014/08/22 08:24:09
So that it's only logged in the low latency case.
Henrik Grunell
2014/08/22 08:51:18
Ah, now I chatted with Shijing offline and I under
|
| + 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 || |
|
tommi (sloooow) - chröme
2014/08/21 18:06:58
{} (and subsequently add {} to all cases)
Henrik Grunell
2014/08/22 08:24:09
Done.
|
| + 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, |