Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Unified Diff: media/audio/audio_input_controller.cc

Issue 495983002: Improve logging related to start/stop and failure of audio input streams in Chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Experimental version of AudioManagerBase logging Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..4bcfc948dc43f1a1a12c641cc05b602c08a0f576 100644
--- a/media/audio/audio_input_controller.cc
+++ b/media/audio/audio_input_controller.cc
@@ -73,11 +73,13 @@ namespace media {
// static
AudioInputController::Factory* AudioInputController::factory_ = NULL;
-AudioInputController::AudioInputController(EventHandler* handler,
+AudioInputController::AudioInputController(AudioManager* audio_manager,
+ EventHandler* handler,
SyncWriter* sync_writer,
UserInputMonitor* user_input_monitor)
: creator_task_runner_(base::MessageLoopProxy::current()),
handler_(handler),
+ audio_manager_(audio_manager),
stream_(NULL),
data_is_active_(false),
state_(CLOSED),
@@ -111,16 +113,19 @@ scoped_refptr<AudioInputController> AudioInputController::Create(
return factory_->Create(
audio_manager, event_handler, params, user_input_monitor);
}
- scoped_refptr<AudioInputController> controller(
- new AudioInputController(event_handler, NULL, user_input_monitor));
+ scoped_refptr<AudioInputController> controller(new AudioInputController(
+ audio_manager, event_handler, NULL, user_input_monitor));
controller->task_runner_ = audio_manager->GetTaskRunner();
// Create and open a new audio input stream from the existing
// audio-device thread.
- if (!controller->task_runner_->PostTask(FROM_HERE,
- base::Bind(&AudioInputController::DoCreate, controller,
- base::Unretained(audio_manager), params, device_id))) {
+ if (!controller->task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&AudioInputController::DoCreate,
+ controller,
+ params,
+ device_id))) {
controller = NULL;
}
@@ -143,15 +148,18 @@ scoped_refptr<AudioInputController> AudioInputController::CreateLowLatency(
// Create the AudioInputController object and ensure that it runs on
// the audio-manager thread.
- scoped_refptr<AudioInputController> controller(
- new AudioInputController(event_handler, sync_writer, user_input_monitor));
+ scoped_refptr<AudioInputController> controller(new AudioInputController(
+ audio_manager, event_handler, sync_writer, user_input_monitor));
controller->task_runner_ = audio_manager->GetTaskRunner();
// 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::Unretained(audio_manager), params, device_id))) {
+ if (!controller->task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&AudioInputController::DoCreate,
+ controller,
+ params,
+ device_id))) {
controller = NULL;
}
@@ -170,8 +178,8 @@ scoped_refptr<AudioInputController> AudioInputController::CreateForStream(
// Create the AudioInputController object and ensure that it runs on
// the audio-manager thread.
- scoped_refptr<AudioInputController> controller(
- new AudioInputController(event_handler, sync_writer, user_input_monitor));
+ scoped_refptr<AudioInputController> controller(new AudioInputController(
+ NULL, event_handler, sync_writer, user_input_monitor));
controller->task_runner_ = task_runner;
// TODO(miu): See TODO at top of file. Until that's resolved, we need to
@@ -213,11 +221,15 @@ void AudioInputController::SetAutomaticGainControl(bool enabled) {
&AudioInputController::DoSetAutomaticGainControl, this, enabled));
}
-void AudioInputController::DoCreate(AudioManager* audio_manager,
- const AudioParameters& params,
+void AudioInputController::DoCreate(const AudioParameters& params,
const std::string& device_id) {
DCHECK(task_runner_->BelongsToCurrentThread());
SCOPED_UMA_HISTOGRAM_TIMER("Media.AudioInputController.CreateTime");
+ if (handler_) {
+ std::string log_string =
+ base::StringPrintf("AIC::DoCreate(device_id=%s)", device_id.c_str());
Henrik Grunell 2014/08/22 16:14:42 What device id is this? Unique in what way? Can it
no longer working on chromium 2014/08/25 08:20:05 This is the uniqie id of the device, we can't log
henrika (OOO until Aug 14) 2014/08/25 12:47:44 Removing. Thanks.
+ handler_->OnLog(this, log_string);
+ }
#if defined(AUDIO_POWER_MONITORING)
// Create the audio (power) level meter given the provided audio parameters.
@@ -231,11 +243,14 @@ void AudioInputController::DoCreate(AudioManager* audio_manager,
silence_state_ = SILENCE_STATE_NO_MEASUREMENT;
#endif
+ if (audio_manager_)
+ audio_manager_->AddStateChangeListener(this);
+
// TODO(miu): See TODO at top of file. Until that's resolved, assume all
// platform audio input requires the |no_data_timer_| be used to auto-detect
// errors. In reality, probably only Windows needs to be treated as
// unreliable here.
- DoCreateForStream(audio_manager->MakeAudioInputStream(params, device_id));
+ DoCreateForStream(audio_manager_->MakeAudioInputStream(params, device_id));
}
void AudioInputController::DoCreateForStream(
@@ -298,6 +313,9 @@ void AudioInputController::DoRecord() {
state_ = RECORDING;
}
+ if (handler_)
+ handler_->OnLog(this, "AIC::DoRecord");
no longer working on chromium 2014/08/25 08:20:05 I don't really think you should log these, DoRecor
henrika (OOO until Aug 14) 2014/08/25 12:47:44 Well, if it does that may very well be a reason wh
+
if (no_data_timer_) {
// Start the data timer. Once |kTimerResetIntervalSeconds| have passed,
// a callback to FirstCheckForNoData() is made.
@@ -316,12 +334,18 @@ void AudioInputController::DoClose() {
if (state_ == CLOSED)
return;
+ if (handler_)
+ handler_->OnLog(this, "AIC::DoClose");
+
// Delete the timer on the same thread that created it.
no_data_timer_.reset();
DoStopCloseAndClearStream();
SetDataIsActive(false);
+ if (audio_manager_)
+ audio_manager_->RemoveStateChangeListener(this);
Henrik Grunell 2014/08/22 16:14:43 Should the raw |audio_manager_| pointer be set to
henrika (OOO until Aug 14) 2014/08/25 12:47:44 It could but I can't really see the gain actually
+
if (SharedMemoryAndSyncSocketMode())
sync_writer_->Close();
@@ -383,6 +407,12 @@ void AudioInputController::FirstCheckForNoData() {
LogCaptureStartupResult(GetDataIsActive() ?
CAPTURE_STARTUP_OK :
CAPTURE_STARTUP_NO_DATA_CALLBACK);
+ if (handler_) {
+ GetDataIsActive()
+ ? handler_->OnLog(this, "AIC::FirstCheckForNoData => data is active")
no longer working on chromium 2014/08/25 08:20:05 this does not look like clang format, could you pl
henrika (OOO until Aug 14) 2014/08/25 12:47:44 I did run git cl format and this is what it gives
+ : handler_->OnLog(this,
+ "AIC::FirstCheckForNoData => data is NOT active");
+ }
DoCheckForNoData();
}
@@ -526,6 +556,12 @@ void AudioInputController::DoLogAudioLevel(float level_dbfs) {
#endif
}
+void AudioInputController::OnStateChange(const std::string state) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ if (handler_)
+ handler_->OnLog(this, state);
+}
+
void AudioInputController::OnError(AudioInputStream* stream) {
// Handle error on the audio-manager thread.
task_runner_->PostTask(FROM_HERE, base::Bind(

Powered by Google App Engine
This is Rietveld 408576698