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()) { |