Chromium Code Reviews| 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 e3ce2b0f6775112015b1586bed60f1a90d0f97d2..3d8108bcb83f8861d0ca8bfd7e80278d13c66fb9 100644 |
| --- a/content/renderer/media/webrtc_audio_renderer.cc |
| +++ b/content/renderer/media/webrtc_audio_renderer.cc |
| @@ -39,6 +39,11 @@ namespace { |
| // between each callback leads to one UMA update each 100ms. |
| const int kNumCallbacksBetweenRenderTimeHistograms = 10; |
| +// We log UMA data for the average execution time of the SourceCallback() method |
| +// every |kNumCallbacksBetweenRenderAverageTimeHistograms| callback. Assuming |
| +// 10 ms between each callback leads to one UMA update per second. |
| +const int kNumCallbacksBetweenRenderAverageTimeHistograms = 100; |
| + |
| // Audio parameters that don't change. |
| const media::AudioParameters::Format kFormat = |
| media::AudioParameters::AUDIO_PCM_LOW_LATENCY; |
| @@ -252,6 +257,7 @@ void WebRtcAudioRenderer::Play() { |
| playing_state_.set_playing(true); |
| render_callback_count_ = 0; |
| + accumulated_render_time_ = base::TimeDelta(); |
| OnPlayStateChanged(media_stream_, &playing_state_); |
| } |
| @@ -305,6 +311,11 @@ void WebRtcAudioRenderer::EnterPauseState() { |
| void WebRtcAudioRenderer::Stop() { |
| DVLOG(1) << "WebRtcAudioRenderer::Stop()"; |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| + if (render_callback_count_ > 0) { |
| + UMA_HISTOGRAM_TIMES("WebRTC.AudioRenderTimeMax", max_render_time_); |
| + max_render_time_ = base::TimeDelta(); |
| + } |
| + |
| { |
| base::AutoLock auto_lock(lock_); |
| if (state_ == UNINITIALIZED) |
| @@ -476,10 +487,24 @@ void WebRtcAudioRenderer::SourceCallback( |
| if (state_ != PLAYING) |
| audio_bus->Zero(); |
| - if (++render_callback_count_ == kNumCallbacksBetweenRenderTimeHistograms) { |
| - base::TimeDelta elapsed = base::TimeTicks::Now() - start_time; |
| - render_callback_count_ = 0; |
| + // Measure the elapsed time for this function and log periodically. |
| + base::TimeDelta elapsed = base::TimeTicks::Now() - start_time; |
|
DaleCurtis
2016/08/22 17:32:19
This will skew if you catch it between a suspend/r
Henrik Grunell
2016/08/23 10:42:04
Hmm, isn't it so that the ticks are updated as lon
DaleCurtis
2016/08/24 17:45:16
If you record start_time prior to suspend and then
|
| + if (elapsed > max_render_time_) |
| + max_render_time_ = elapsed; |
| + accumulated_render_time_ += elapsed; |
| + ++render_callback_count_; |
| + if (render_callback_count_ % kNumCallbacksBetweenRenderTimeHistograms == 0) |
| UMA_HISTOGRAM_TIMES("WebRTC.AudioRenderTimes", elapsed); |
| + if (render_callback_count_ % |
| + kNumCallbacksBetweenRenderAverageTimeHistograms == |
| + 0) { |
| + UMA_HISTOGRAM_CUSTOM_TIMES( |
| + "WebRTC.AudioRenderTimesAverage", |
| + accumulated_render_time_ / |
| + kNumCallbacksBetweenRenderAverageTimeHistograms, |
| + base::TimeDelta::FromMicroseconds(100), |
|
Henrik Grunell
2016/08/22 15:21:59
I'm not sure if microseconds precision is possible
DaleCurtis
2016/08/22 17:32:19
Yeah, the best you can do is milliseconds. The mac
Ilya Sherman
2016/08/22 21:17:47
Alternately, you could use a CUSTOM_COUNTS macro a
Henrik Grunell
2016/08/23 10:42:04
OK, I've switched to CUSTOM_COUNTS.
|
| + base::TimeDelta::FromMilliseconds(30), 50); |
| + accumulated_render_time_ = base::TimeDelta(); |
| } |
| } |