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

Unified Diff: media/renderers/renderer_impl.cc

Issue 2552493002: [Media] Record time it takes to start rendering audio and video (Closed)
Patch Set: Use RestartPlaybackStream and OnFirstFrameRender Created 4 years 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
« no previous file with comments | « media/renderers/renderer_impl.h ('k') | media/renderers/video_renderer_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/renderers/renderer_impl.cc
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index 87212d8214423f6ed38b7cd4344feca1ae16476e..c74724372e8436b0bb6c3bc95293a7f91b7f46da 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -12,6 +12,7 @@
#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/location.h"
+#include "base/metrics/histogram_macros.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/string_number_conversions.h"
#include "media/base/audio_decoder_config.h"
@@ -65,6 +66,7 @@ class RendererImpl::RendererClientInternal : public RendererClient {
// the DemuxerHost interface.
NOTREACHED();
}
+ void OnFirstFrameRender() override { renderer_->OnFirstFrameRender(type_); }
private:
DemuxerStream::Type type_;
@@ -236,6 +238,10 @@ void RendererImpl::RestartStreamPlayback(DemuxerStream* stream,
if (restarting_video_)
return;
restarting_video_ = true;
+
+ if (stream->enabled() && video_preroll_start_time_.is_null())
+ video_preroll_start_time_ = base::TimeTicks::Now();
+
video_renderer_->Flush(
base::Bind(&RendererImpl::RestartVideoRenderer, weak_this_, time));
} else if (stream->type() == DemuxerStream::AUDIO) {
@@ -244,6 +250,10 @@ void RendererImpl::RestartStreamPlayback(DemuxerStream* stream,
if (restarting_audio_)
return;
restarting_audio_ = true;
+
+ if (stream->enabled() && audio_preroll_start_time_.is_null())
+ audio_preroll_start_time_ = base::TimeTicks::Now();
+
// Stop ticking (transition into paused state) in audio renderer before
// calling Flush, since after Flush we are going to restart playback by
// calling audio renderer StartPlaying which would fail in playing state.
@@ -642,8 +652,9 @@ void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type,
bool was_waiting_for_enough_data = WaitingForEnoughData();
if (restarting_audio_ || restarting_video_) {
- if (HandleRestartedStreamBufferingChanges(type, new_buffering_state))
+ if (HandleRestartedStreamBufferingChanges(type, new_buffering_state)) {
return;
+ }
}
// When audio is present and has enough data, defer video underflow callbacks
@@ -655,7 +666,7 @@ void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type,
audio_buffering_state_ == BUFFERING_HAVE_ENOUGH &&
new_buffering_state == BUFFERING_HAVE_NOTHING &&
deferred_video_underflow_cb_.IsCancelled()) {
- DVLOG(4) << __func__ << " Deferring HAVE_NOTHING for video stream.";
+ DVLOG(1) << __func__ << " Deferring HAVE_NOTHING for video stream.";
servolk 2016/12/13 19:46:28 Nit: why? this could be noisy in logs. Let's keep
whywhat 2016/12/13 21:44:10 Oops, uploaded accidental change after debug loggi
deferred_video_underflow_cb_.Reset(
base::Bind(&RendererImpl::OnBufferingStateChange,
weak_factory_.GetWeakPtr(), type, new_buffering_state));
@@ -665,7 +676,6 @@ void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type,
return;
}
- DVLOG(4) << "deferred_video_underflow_cb_.Cancel()";
servolk 2016/12/13 19:46:28 Also: why?
whywhat 2016/12/13 21:44:10 ditto
deferred_video_underflow_cb_.Cancel();
} else if (!deferred_video_underflow_cb_.IsCancelled() &&
type == DemuxerStream::AUDIO &&
@@ -845,4 +855,20 @@ void RendererImpl::OnVideoOpacityChange(bool opaque) {
client_->OnVideoOpacityChange(opaque);
}
+void RendererImpl::OnFirstFrameRender(DemuxerStream::Type type) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ if (type == DemuxerStream::AUDIO && !audio_preroll_start_time_.is_null()) {
+ UMA_HISTOGRAM_MEDIUM_TIMES(
+ "Media.Audio.PrerollTime",
+ base::TimeTicks::Now() - audio_preroll_start_time_);
+ audio_preroll_start_time_ = base::TimeTicks();
+ } else if (type == DemuxerStream::VIDEO &&
+ !video_preroll_start_time_.is_null()) {
+ UMA_HISTOGRAM_MEDIUM_TIMES(
+ "Media.Video.PrerollTime",
+ base::TimeTicks::Now() - video_preroll_start_time_);
+ video_preroll_start_time_ = base::TimeTicks();
+ }
+}
+
} // namespace media
« no previous file with comments | « media/renderers/renderer_impl.h ('k') | media/renderers/video_renderer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698