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

Unified Diff: media/renderers/renderer_impl.cc

Issue 2237243002: CL for perf tryjob on linux (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
« no previous file with comments | « media/renderers/renderer_impl.h ('k') | media/renderers/renderer_impl_unittest.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 7381e94ef695c43036c62291bbbcb0f918057fa6..94fbe94eaff5593ed3b185bb542c33ec06a969aa 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -32,6 +32,8 @@ static const int kDefaultVideoUnderflowThresholdMs = 3000;
static const int kAudioRestartUnderflowThresholdMs = 2000;
+static const int kTimeUpdateIntervalMs = 50;
+
class RendererImpl::RendererClientInternal : public RendererClient {
public:
RendererClientInternal(DemuxerStream::Type type, RendererImpl* renderer)
@@ -58,6 +60,11 @@ class RendererImpl::RendererClientInternal : public RendererClient {
DCHECK(type_ == DemuxerStream::VIDEO);
renderer_->OnVideoOpacityChange(opaque);
}
+ void OnTimeUpdate(base::TimeDelta curr_time,
+ base::TimeDelta max_time,
+ base::TimeTicks capture_time) override {
+ NOTREACHED();
+ }
private:
DemuxerStream::Type type_;
@@ -243,6 +250,7 @@ void RendererImpl::RestartStreamPlayback(DemuxerStream* stream,
if (time_ticking_) {
time_ticking_ = false;
time_source_->StopTicking();
+ CancelPeriodicMediaTimeUpdates();
}
audio_renderer_->Flush(
base::Bind(&RendererImpl::RestartAudioRenderer, weak_this_, time));
@@ -300,7 +308,7 @@ void RendererImpl::SetVolume(float volume) {
base::TimeDelta RendererImpl::GetMediaTime() {
// No BelongsToCurrentThread() checking because this can be called from other
// threads.
- return time_source_->CurrentMediaTime();
+ return time_source_->CurrentMediaTime(nullptr);
}
bool RendererImpl::HasAudio() {
@@ -743,6 +751,7 @@ void RendererImpl::PausePlayback() {
if (time_ticking_) {
time_ticking_ = false;
time_source_->StopTicking();
+ CancelPeriodicMediaTimeUpdates();
}
if (playback_rate_ > 0 && video_renderer_)
video_renderer_->OnTimeStateChanged(false);
@@ -757,6 +766,8 @@ void RendererImpl::StartPlayback() {
time_ticking_ = true;
time_source_->StartTicking();
+ SchedulePeriodicMediaTimeUpdates();
+
if (playback_rate_ > 0 && video_renderer_)
video_renderer_->OnTimeStateChanged(true);
}
@@ -848,4 +859,40 @@ void RendererImpl::OnVideoOpacityChange(bool opaque) {
client_->OnVideoOpacityChange(opaque);
}
+void RendererImpl::UpdateMediaTime() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(time_ticking_);
+
+ base::TimeTicks capture_time;
+ base::TimeDelta curr_time = time_source_->CurrentMediaTime(&capture_time);
+ // Allow some slop to account for delays in scheduling time update tasks.
+ base::TimeDelta max_time =
+ curr_time + base::TimeDelta::FromMilliseconds(2 * kTimeUpdateIntervalMs);
+ client_->OnTimeUpdate(curr_time, max_time, capture_time);
+}
+
+void RendererImpl::SchedulePeriodicMediaTimeUpdates() {
+ DVLOG(2) << __func__;
+ DCHECK(task_runner_->BelongsToCurrentThread());
+
+ base::TimeTicks capture_time;
+ base::TimeDelta curr_time = time_source_->CurrentMediaTime(&capture_time);
+ client_->OnTimeUpdate(curr_time, curr_time, capture_time);
+
+ time_update_timer_.Start(
+ FROM_HERE, base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs),
+ base::Bind(&RendererImpl::UpdateMediaTime, weak_this_));
+}
+
+void RendererImpl::CancelPeriodicMediaTimeUpdates() {
+ DVLOG(2) << __func__;
+ DCHECK(task_runner_->BelongsToCurrentThread());
+
+ time_update_timer_.Stop();
+
+ base::TimeTicks capture_time;
+ base::TimeDelta curr_time = time_source_->CurrentMediaTime(&capture_time);
+ client_->OnTimeUpdate(curr_time, curr_time, capture_time);
+}
+
} // namespace media
« no previous file with comments | « media/renderers/renderer_impl.h ('k') | media/renderers/renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698