diff options
Diffstat (limited to 'chromium/media/audio/audio_input_device.cc')
-rw-r--r-- | chromium/media/audio/audio_input_device.cc | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/chromium/media/audio/audio_input_device.cc b/chromium/media/audio/audio_input_device.cc index aad6984307d..b6bc304fbbd 100644 --- a/chromium/media/audio/audio_input_device.cc +++ b/chromium/media/audio/audio_input_device.cc @@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/callback_forward.h" #include "base/format_macros.h" +#include "base/logging.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" @@ -98,13 +99,15 @@ class AudioInputDevice::AudioThreadCallback }; AudioInputDevice::AudioInputDevice(std::unique_ptr<AudioInputIPC> ipc, - Purpose purpose) + Purpose purpose, + DeadStreamDetection detect_dead_stream) : thread_priority_(ThreadPriorityFromPurpose(purpose)), enable_uma_(purpose == AudioInputDevice::Purpose::kUserInput), callback_(nullptr), ipc_(std::move(ipc)), state_(IDLE), - agc_is_enabled_(false) { + agc_is_enabled_(false), + detect_dead_stream_(detect_dead_stream) { CHECK(ipc_); // The correctness of the code depends on the relative values assigned in the @@ -142,9 +145,11 @@ void AudioInputDevice::Stop() { TRACE_EVENT0("audio", "AudioInputDevice::Stop"); if (enable_uma_) { - UMA_HISTOGRAM_BOOLEAN( - "Media.Audio.Capture.DetectedMissingCallbacks", - alive_checker_ ? alive_checker_->DetectedDead() : false); + if (detect_dead_stream_ == DeadStreamDetection::kEnabled) { + UMA_HISTOGRAM_BOOLEAN( + "Media.Audio.Capture.DetectedMissingCallbacks", + alive_checker_ ? alive_checker_->DetectedDead() : false); + } UMA_HISTOGRAM_ENUMERATION("Media.Audio.Capture.StreamCallbackError2", had_error_); @@ -247,6 +252,7 @@ void AudioInputDevice::OnStreamCreated( // also a risk of false positives if we are suspending when starting the stream // here. See comments in AliveChecker and PowerObserverHelper for details and // todos. + if (detect_dead_stream_ == DeadStreamDetection::kEnabled) { #if defined(OS_LINUX) const bool stop_at_first_alive_notification = true; const bool pause_check_during_suspend = false; @@ -259,13 +265,19 @@ void AudioInputDevice::OnStreamCreated( base::TimeDelta::FromSeconds(kCheckMissingCallbacksIntervalSeconds), base::TimeDelta::FromSeconds(kMissingCallbacksTimeBeforeErrorSeconds), stop_at_first_alive_notification, pause_check_during_suspend); + } // Unretained is safe since |alive_checker_| outlives |audio_callback_|. + base::RepeatingClosure notify_alive_closure = + alive_checker_ + ? base::BindRepeating(&AliveChecker::NotifyAlive, + base::Unretained(alive_checker_.get())) + : base::DoNothing::Repeatedly(); + audio_callback_ = std::make_unique<AudioInputDevice::AudioThreadCallback>( audio_parameters_, std::move(shared_memory_region), kRequestedSharedMemoryCount, enable_uma_, callback_, - base::BindRepeating(&AliveChecker::NotifyAlive, - base::Unretained(alive_checker_.get()))); + notify_alive_closure); audio_thread_ = std::make_unique<AudioDeviceThread>( audio_callback_.get(), std::move(socket_handle), "AudioInputDevice", thread_priority_); @@ -274,7 +286,8 @@ void AudioInputDevice::OnStreamCreated( ipc_->RecordStream(); // Start detecting missing audio data. - alive_checker_->Start(); + if (alive_checker_) + alive_checker_->Start(); } void AudioInputDevice::OnError() { |