summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordalecurtis <dalecurtis@chromium.org>2015-12-01 09:40:47 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-01 17:42:50 +0000
commit0f0097a318484d99a996d230f3ad4d4ee08ca7ed (patch)
tree52e347c683a834da8fdca33021f5779eaee09c0a
parent911c3c05c6eb35562f354b5b4ddb57528141357f (diff)
downloadchromium_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.cc32
-rw-r--r--media/blink/webmediaplayer_impl.h5
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();