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

Unified Diff: media/filters/chunk_demuxer.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/filters/chunk_demuxer.cc
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index 66eb09a011eb0c2f121d5fab0d69fbb79c001248..a81505429ff6f4cc81f6f4b3924f0e1fcb57b5a5 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -120,9 +120,11 @@ void ChunkDemuxerStream::Remove(TimeDelta start, TimeDelta end,
}
bool ChunkDemuxerStream::EvictCodedFrames(DecodeTimestamp media_time,
- size_t newDataSize) {
+ size_t eviction_size,
+ size_t* bytes_released) {
base::AutoLock auto_lock(lock_);
- return stream_->GarbageCollectIfNeeded(media_time, newDataSize);
+ return stream_->GarbageCollectIfNeeded(media_time, eviction_size,
+ bytes_released);
}
void ChunkDemuxerStream::OnSetDuration(TimeDelta duration) {
@@ -318,6 +320,11 @@ void ChunkDemuxerStream::SetStreamMemoryLimit(size_t memory_limit) {
stream_->set_memory_limit(memory_limit);
}
+size_t ChunkDemuxerStream::stream_memory_limit() const {
+ DCHECK(stream_);
+ return stream_->memory_limit();
+}
+
void ChunkDemuxerStream::SetLiveness(Liveness liveness) {
base::AutoLock auto_lock(lock_);
liveness_ = liveness;
@@ -736,12 +743,27 @@ void ChunkDemuxer::OnSelectedVideoTrackChanged(
}
}
+void ChunkDemuxer::OnMemoryPressure(
+ base::TimeDelta currentMediaTime,
+ base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
+ if (memory_pressure_level <
+ base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE)
+ return;
+
+ DecodeTimestamp media_time_dts =
+ DecodeTimestamp::FromPresentationTime(currentMediaTime);
+ base::AutoLock auto_lock(lock_);
+ for (const auto& itr : source_state_map_) {
+ itr.second->OnMemoryPressure(media_time_dts, memory_pressure_level);
+ }
+}
+
bool ChunkDemuxer::EvictCodedFrames(const std::string& id,
base::TimeDelta currentMediaTime,
- size_t newDataSize) {
+ size_t eviction_size) {
DVLOG(1) << __func__ << "(" << id << ")"
<< " media_time=" << currentMediaTime.InSecondsF()
- << " newDataSize=" << newDataSize;
+ << " eviction_size=" << eviction_size;
base::AutoLock auto_lock(lock_);
// Note: The direct conversion from PTS to DTS is safe here, since we don't
@@ -756,7 +778,7 @@ bool ChunkDemuxer::EvictCodedFrames(const std::string& id,
LOG(WARNING) << __func__ << " stream " << id << " not found";
return false;
}
- return itr->second->EvictCodedFrames(media_time_dts, newDataSize);
+ return itr->second->EvictCodedFrames(media_time_dts, eviction_size);
}
bool ChunkDemuxer::AppendData(const std::string& id,

Powered by Google App Engine
This is Rietveld 408576698