Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index aabb04079f5861bd4dd8c600c9dab1a20ae6ada7..98f8b3119d127252384aa673de59ce9f1b9b1a8f 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" |
| @@ -1173,6 +1174,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)); |
| + 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()); |
| @@ -1726,6 +1743,13 @@ void WebMediaPlayerImpl::StartPipeline() { |
| // TODO(sandersd): On Android, defer Start() if the tab is not visible. |
| seeking_ = true; |
| pipeline_controller_.Start(demuxer_.get(), this, is_streaming, is_static); |
| + |
| + if (base::FeatureList::IsEnabled(kReduceMSEBuffersOnMemoryPressure)) { |
| + // base::Unretained is safe because |this| owns memory_pressure_listener_. |
| + memory_pressure_listener_ = |
|
chcunningham
2017/01/25 03:47:15
Do we want to make a new one every time the pipeli
servolk
2017/01/25 18:06:47
I guess I wanted to avoid having the overhead of m
chcunningham
2017/01/25 22:21:56
Acknowledged.
|
| + base::MakeUnique<base::MemoryPressureListener>(base::Bind( |
| + &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this))); |
| + } |
| } |
| void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) { |