Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index bee9dae7d4bf96ad51364d16362d77d3c4f0dd28..968b8337e745c33ce9bdd8a46cca04e8fbb99ec6 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -147,6 +147,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
delegate_(delegate), |
defer_load_cb_(params.defer_load_cb()), |
context_3d_cb_(params.context_3d_cb()), |
+ adjust_allocated_memory_cb_(params.adjust_allocated_memory_cb()), |
+ last_reported_memory_usage_(0), |
supports_save_(true), |
chunk_demuxer_(NULL), |
// Threaded compositing isn't enabled universally yet. |
@@ -209,6 +211,9 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() { |
base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); |
waiter.Wait(); |
+ if (last_reported_memory_usage_) |
+ adjust_allocated_memory_cb_.Run(-last_reported_memory_usage_); |
+ |
compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_); |
media_log_->AddEvent( |
@@ -244,6 +249,9 @@ 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, |
xhwang
2015/10/25 17:01:56
Is 500ms recommended by v8? I know nothing about t
DaleCurtis
2015/10/27 23:14:20
Chosen arbitrarily. ulan@, jochen@ Does this value
ulan
2015/10/28 13:22:09
Yes, but the value is not v8 specific so I am not
|
+ &WebMediaPlayerImpl::ReportMemoryUsage); |
// Media source pipelines can start immediately. |
if (load_type == LoadTypeMediaSource) { |
@@ -1083,4 +1091,23 @@ void WebMediaPlayerImpl::UpdatePausedTime() { |
ended_ ? pipeline_.GetMediaDuration() : pipeline_.GetMediaTime(); |
} |
+void WebMediaPlayerImpl::ReportMemoryUsage() { |
+ DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ |
+ const PipelineStatistics stats = pipeline_.GetStatistics(); |
+ const int64_t current_memory_usage = |
+ stats.audio_memory_usage + stats.video_memory_usage + |
+ (data_source_ ? data_source_->GetMemoryUsage() : 0) + |
+ (demuxer_ ? demuxer_->GetMemoryUsage() : 0); |
+ |
+ DVLOG(2) << "Memory Usage -- Audio: " << stats.audio_memory_usage |
+ << ", Video: " << stats.video_memory_usage << ", DataSource: " |
+ << (data_source_ ? data_source_->GetMemoryUsage() : 0) |
+ << ", Demuxer: " << (demuxer_ ? demuxer_->GetMemoryUsage() : 0); |
+ |
+ const int64_t delta = current_memory_usage - last_reported_memory_usage_; |
+ last_reported_memory_usage_ = current_memory_usage; |
+ adjust_allocated_memory_cb_.Run(delta); |
xhwang
2015/10/25 17:01:56
If |delta| is zero or very small, should we still
DaleCurtis
2015/10/27 23:14:20
ulan@, jochen@: WDYT?
ulan
2015/10/28 13:22:09
It is fine to report.
Zero delta would be a no-op
|
+} |
+ |
} // namespace media |