Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Unified Diff: media/blink/webmediaplayer_impl.cc

Issue 2605993002: Experiment with more aggressive MSE GC on memory pressure (Closed)
Patch Set: Allow MSE GC to happen in EOS state now Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/blink/webmediaplayer_impl.cc
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index c6b8b571cea6a261dc31fc9e629025bf7185660a..f130ce7548a3699c5a9d2c13dbb99335c5f5998e 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"
@@ -1109,6 +1110,21 @@ 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());
+ 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());
@@ -1650,6 +1666,11 @@ 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);
+
+ // base::Unretained is safe because |this| owns memory_pressure_listener_.
+ memory_pressure_listener_ =
+ base::MakeUnique<base::MemoryPressureListener>(base::Bind(
+ &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this)));
}
void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) {

Powered by Google App Engine
This is Rietveld 408576698