Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index 0ab7b54d2cfdf4ee3dc09c257d782eea66e0c312..faedac99742e7f609ad8eea2cf4cd3248c84fdc1 100644 |
| --- a/media/blink/webmediaplayer_impl.cc |
| +++ b/media/blink/webmediaplayer_impl.cc |
| @@ -18,6 +18,7 @@ |
| #include "base/debug/alias.h" |
| #include "base/debug/crash_logging.h" |
| #include "base/location.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "base/single_thread_task_runner.h" |
| #include "base/strings/string_number_conversions.h" |
| @@ -1168,6 +1169,22 @@ void WebMediaPlayerImpl::OnDemuxerOpened() { |
| new WebMediaSourceImpl(chunk_demuxer_, media_log_)); |
| } |
| +void WebMediaPlayerImpl::OnMemoryPressure( |
| + base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { |
| + DVLOG(2) << __func__ << " memory_pressure_level=" << memory_pressure_level; |
| + DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| + DCHECK(base::FeatureList::IsEnabled(kReduceMSEBuffersOnMemoryPressure)); |
|
DaleCurtis
2017/01/26 19:24:50
Seems this should include both features?
servolk
2017/01/26 19:38:31
No, the kMSEInstantGCOnMemoryPressure may or may n
|
| + if (chunk_demuxer_) { |
| + // base::Unretained is safe, since chunk_demuxer_ is actually owned by |
| + // |this| via this->demuxer_. |
| + media_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&ChunkDemuxer::OnMemoryPressure, |
| + base::Unretained(chunk_demuxer_), |
| + base::TimeDelta::FromSecondsD(currentTime()), |
| + memory_pressure_level)); |
| + } |
| +} |
| + |
| void WebMediaPlayerImpl::OnError(PipelineStatus status) { |
| DVLOG(1) << __func__; |
| DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| @@ -1717,6 +1734,13 @@ void WebMediaPlayerImpl::StartPipeline() { |
| BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), |
| encrypted_media_init_data_cb, media_log_); |
| demuxer_.reset(chunk_demuxer_); |
| + |
| + if (base::FeatureList::IsEnabled(kReduceMSEBuffersOnMemoryPressure)) { |
| + // base::Unretained is safe because |this| owns memory_pressure_listener_. |
| + memory_pressure_listener_ = |
| + base::MakeUnique<base::MemoryPressureListener>(base::Bind( |
| + &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this))); |
| + } |
| } |
| // TODO(sandersd): FileSystem objects may also be non-static, but due to our |