Chromium Code Reviews| 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 |