Chromium Code Reviews| Index: content/browser/renderer_host/media/audio_sync_reader.cc |
| diff --git a/content/browser/renderer_host/media/audio_sync_reader.cc b/content/browser/renderer_host/media/audio_sync_reader.cc |
| index 0730ec20f4022b40c9fa7df46f4d28e18324df5c..397d74eca587078641d53e762aec7e8a19d8e2d7 100644 |
| --- a/content/browser/renderer_host/media/audio_sync_reader.cc |
| +++ b/content/browser/renderer_host/media/audio_sync_reader.cc |
| @@ -6,12 +6,17 @@ |
| #include <algorithm> |
| +#include "base/metrics/histogram.h" |
| #include "base/process_util.h" |
| #include "base/shared_memory.h" |
| #include "media/audio/audio_buffers_state.h" |
| #include "media/audio/audio_parameters.h" |
| #include "media/audio/shared_memory_util.h" |
| +#if defined(OS_WIN) |
| +#include "media/audio/win/core_audio_util_win.h" |
| +#endif |
| + |
| using media::AudioBus; |
| namespace content { |
| @@ -20,7 +25,8 @@ AudioSyncReader::AudioSyncReader(base::SharedMemory* shared_memory, |
| const media::AudioParameters& params, |
| int input_channels) |
| : shared_memory_(shared_memory), |
| - input_channels_(input_channels) { |
| + input_channels_(input_channels), |
| + renderer_wasnt_ready_(0) { |
| packet_size_ = media::PacketSizeInBytes(shared_memory_->created_size()); |
| int input_memory_size = 0; |
| int output_memory_size = AudioBus::CalculateMemorySize(params); |
| @@ -37,6 +43,27 @@ AudioSyncReader::AudioSyncReader(base::SharedMemory* shared_memory, |
| } |
| AudioSyncReader::~AudioSyncReader() { |
| + // Only log if we had to wait at least 3 times. |
| + bool waited_too_many_times = renderer_wasnt_ready_ > 3; |
|
Chris Rogers
2013/01/17 02:22:25
nit: should define a constant for this, something
|
| + |
| +#if defined(OS_LINUX) |
| + UMA_HISTOGRAM_BOOLEAN( |
| + "Media.AudioRendererWasNotReadyLinux", waited_too_many_times); |
|
Chris Rogers
2013/01/17 02:22:25
how about "WasNotReady" -> "MissedDeadline"?
|
| +#elif defined(OS_MACOSX) |
| + UMA_HISTOGRAM_BOOLEAN( |
| + "Media.AudioRendererWasNotReadyOSX", waited_too_many_times); |
| +#elif defined(OS_WIN) |
| + if (CoreAudioUtil::IsSupported()) { |
| + UMA_HISTOGRAM_BOOLEAN( |
| + "Media.AudioRendererWasNotReadyWinWASAPI", waited_too_many_times); |
|
Chris Rogers
2013/01/17 02:22:25
can we shorten "WinWASAPI" to just "WASAPI"?
|
| + } else { |
| + UMA_HISTOGRAM_BOOLEAN( |
| + "Media.AudioRendererWasNotReadyWinWaveOut", waited_too_many_times); |
|
Chris Rogers
2013/01/17 02:22:25
can we shorten "WinWaveOut" to just "WaveOut"?
|
| + } |
| +#elif defined(OS_CHROMEOS) |
| + UMA_HISTOGRAM_BOOLEAN( |
| + "Media.AudioRendererWasNotReadyChromeOS", waited_too_many_times); |
| +#endif |
| } |
| bool AudioSyncReader::DataReady() { |
| @@ -57,6 +84,9 @@ void AudioSyncReader::UpdatePendingBytes(uint32 bytes) { |
| } |
| int AudioSyncReader::Read(AudioBus* source, AudioBus* dest) { |
| + if (!DataReady()) |
| + ++renderer_wasnt_ready_; |
| + |
| // Copy optional synchronized live audio input for consumption by renderer |
| // process. |
| if (source && input_bus_.get()) { |