| Index: content/renderer/media/webrtc_audio_renderer.cc
|
| diff --git a/content/renderer/media/webrtc_audio_renderer.cc b/content/renderer/media/webrtc_audio_renderer.cc
|
| index 24eee9a746613b95d858b47f355433ecd70b5ce6..694738c14913243796542fa083c5c844de7b09bf 100644
|
| --- a/content/renderer/media/webrtc_audio_renderer.cc
|
| +++ b/content/renderer/media/webrtc_audio_renderer.cc
|
| @@ -29,6 +29,11 @@ namespace content {
|
|
|
| namespace {
|
|
|
| +// We add a UMA histogram measuring the execution time of the Render() method
|
| +// every |kNumCallbacksBetweenRenderTimeHistograms| callback. Assuming 10ms
|
| +// between each callback leads to one UMA update each 100ms.
|
| +const int kNumCallbacksBetweenRenderTimeHistograms = 10;
|
| +
|
| // This is a simple wrapper class that's handed out to users of a shared
|
| // WebRtcAudioRenderer instance. This class maintains the per-user 'playing'
|
| // and 'started' states to avoid problems related to incorrect usage which
|
| @@ -190,7 +195,8 @@ WebRtcAudioRenderer::WebRtcAudioRenderer(
|
| sink_params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
|
| media::CHANNEL_LAYOUT_STEREO, sample_rate, 16,
|
| frames_per_buffer,
|
| - GetCurrentDuckingFlag(source_render_frame_id)) {
|
| + GetCurrentDuckingFlag(source_render_frame_id)),
|
| + render_callback_count_(0) {
|
| WebRtcLogMessage(base::StringPrintf(
|
| "WAR::WAR. source_render_view_id=%d"
|
| ", session_id=%d, sample_rate=%d, frames_per_buffer=%d, effects=%i",
|
| @@ -321,6 +327,7 @@ void WebRtcAudioRenderer::Play() {
|
| return;
|
|
|
| playing_state_.set_playing(true);
|
| + render_callback_count_ = 0;
|
|
|
| OnPlayStateChanged(media_stream_, &playing_state_);
|
| }
|
| @@ -440,6 +447,7 @@ void WebRtcAudioRenderer::OnRenderError() {
|
| // Called by AudioPullFifo when more data is necessary.
|
| void WebRtcAudioRenderer::SourceCallback(
|
| int fifo_frame_delay, media::AudioBus* audio_bus) {
|
| + base::TimeTicks start_time = base::TimeTicks::Now() ;
|
| DVLOG(2) << "WebRtcAudioRenderer::SourceCallback("
|
| << fifo_frame_delay << ", "
|
| << audio_bus->frames() << ")";
|
| @@ -458,6 +466,12 @@ void WebRtcAudioRenderer::SourceCallback(
|
| // return here and ensure that the returned value in Render() is 0.
|
| if (state_ != PLAYING)
|
| audio_bus->Zero();
|
| +
|
| + if (++render_callback_count_ == kNumCallbacksBetweenRenderTimeHistograms) {
|
| + base::TimeDelta elapsed = base::TimeTicks::Now() - start_time;
|
| + render_callback_count_ = 0;
|
| + UMA_HISTOGRAM_TIMES("WebRTC.AudioRenderTimes", elapsed);
|
| + }
|
| }
|
|
|
| void WebRtcAudioRenderer::UpdateSourceVolume(
|
|
|