Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1547)

Unified Diff: content/renderer/media/webrtc_audio_renderer.cc

Issue 2264073002: Add UMA histograms for time spent getting WebRTC audio render data. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
}
}

Powered by Google App Engine
This is Rietveld 408576698