diff options
author | dalecurtis <dalecurtis@chromium.org> | 2015-12-01 09:40:47 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-01 17:42:50 +0000 |
commit | 0f0097a318484d99a996d230f3ad4d4ee08ca7ed (patch) | |
tree | 52e347c683a834da8fdca33021f5779eaee09c0a | |
parent | 911c3c05c6eb35562f354b5b4ddb57528141357f (diff) | |
download | chromium_src-0f0097a318484d99a996d230f3ad4d4ee08ca7ed.zip chromium_src-0f0097a318484d99a996d230f3ad4d4ee08ca7ed.tar.gz chromium_src-0f0097a318484d99a996d230f3ad4d4ee08ca7ed.tar.bz2 |
Reduce frequency of media element memory usage reports.
The code will no longer report memory usage every 500ms when
nothing is going on. Instead it will:
- Report once we have enough data.
- Start reporting every 2 seconds once playback starts.
- Stop reporting once playback is paused.
BUG=549694
TEST=original crash test still doesn't crash.
Review URL: https://codereview.chromium.org/1488833002
Cr-Commit-Position: refs/heads/master@{#362445}
-rw-r--r-- | media/blink/webmediaplayer_impl.cc | 32 | ||||
-rw-r--r-- | media/blink/webmediaplayer_impl.h | 5 |
2 files changed, 30 insertions, 7 deletions
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index cf1bd5e..2e14819 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc @@ -251,9 +251,6 @@ void WebMediaPlayerImpl::DoLoad(LoadType load_type, SetNetworkState(WebMediaPlayer::NetworkStateLoading); SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); - memory_usage_reporting_timer_.Start( - FROM_HERE, base::TimeDelta::FromMilliseconds(500), this, - &WebMediaPlayerImpl::ReportMemoryUsage); // Media source pipelines can start immediately. if (load_type == LoadTypeMediaSource) { @@ -288,7 +285,7 @@ void WebMediaPlayerImpl::play() { media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PLAY)); if (delegate_ && playback_rate_ > 0) - delegate_->DidPlay(this); + NotifyPlaybackStarted(); } void WebMediaPlayerImpl::pause() { @@ -305,7 +302,7 @@ void WebMediaPlayerImpl::pause() { media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE)); if (!was_already_paused && delegate_) - delegate_->DidPause(this); + NotifyPlaybackPaused(); } bool WebMediaPlayerImpl::supportsSave() const { @@ -401,9 +398,9 @@ void WebMediaPlayerImpl::setRate(double rate) { else if (rate > kMaxRate) rate = kMaxRate; if (playback_rate_ == 0 && !paused_ && delegate_) - delegate_->DidPlay(this); + NotifyPlaybackStarted(); } else if (playback_rate_ != 0 && !paused_ && delegate_) { - delegate_->DidPause(this); + NotifyPlaybackPaused(); } playback_rate_ = rate; @@ -894,6 +891,10 @@ void WebMediaPlayerImpl::OnPipelineBufferingStateChanged( // Blink expects a timeChanged() in response to a seek(). if (should_notify_time_changed_) client_->timeChanged(); + + // Once we have enough, start reporting the total memory usage. We'll also + // report once playback starts. + ReportMemoryUsage(); } void WebMediaPlayerImpl::OnDemuxerOpened() { @@ -1098,6 +1099,23 @@ void WebMediaPlayerImpl::UpdatePausedTime() { ended_ ? pipeline_.GetMediaDuration() : pipeline_.GetMediaTime(); } +void WebMediaPlayerImpl::NotifyPlaybackStarted() { + if (delegate_) + delegate_->DidPlay(this); + if (!memory_usage_reporting_timer_.IsRunning()) { + memory_usage_reporting_timer_.Start(FROM_HERE, + base::TimeDelta::FromSeconds(2), this, + &WebMediaPlayerImpl::ReportMemoryUsage); + } +} + +void WebMediaPlayerImpl::NotifyPlaybackPaused() { + if (delegate_) + delegate_->DidPause(this); + memory_usage_reporting_timer_.Stop(); + ReportMemoryUsage(); +} + void WebMediaPlayerImpl::ReportMemoryUsage() { DCHECK(main_task_runner_->BelongsToCurrentThread()); diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index 5b53753..c3ad6a6 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h @@ -234,6 +234,11 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl // |ended_| state by clamping current time to duration upon |ended_|. void UpdatePausedTime(); + // Notifies |delegate_| that playback has started or was paused; also starts + // or stops the memory usage reporting timer respectively. + void NotifyPlaybackStarted(); + void NotifyPlaybackPaused(); + // Called at low frequency to tell external observers how much memory we're // using for video playback. Called by |memory_usage_reporting_timer_|. void ReportMemoryUsage(); |