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

Unified Diff: media/filters/source_buffer_stream.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/source_buffer_stream.cc
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc
index fe3dbfea4fca61cd406a420363b5ea62b194e62b..fafe2e66976c3ea2473d0edbb66dccd4230ca771 100644
--- a/media/filters/source_buffer_stream.cc
+++ b/media/filters/source_buffer_stream.cc
@@ -693,37 +693,40 @@ void SourceBufferStream::SetConfigIds(const BufferQueue& buffers) {
}
bool SourceBufferStream::GarbageCollectIfNeeded(DecodeTimestamp media_time,
- size_t newDataSize) {
+ size_t eviction_size,
+ size_t* bytes_released) {
DCHECK(media_time != kNoDecodeTimestamp());
- // Garbage collection should only happen before/during appending new data,
- // which should not happen in end-of-stream state.
- DCHECK(!end_of_stream_);
+
+ if (bytes_released)
+ *bytes_released = 0;
+
// Compute size of |ranges_|.
size_t ranges_size = GetBufferedSize();
// Sanity and overflow checks
- if ((newDataSize > memory_limit_) ||
- (ranges_size + newDataSize < ranges_size)) {
+ if ((eviction_size > memory_limit_) ||
+ (ranges_size + eviction_size < ranges_size)) {
LIMITED_MEDIA_LOG(DEBUG, media_log_, num_garbage_collect_algorithm_logs_,
kMaxGarbageCollectAlgorithmWarningLogs)
- << GetStreamTypeName() << " stream: "
- << "new append of newDataSize=" << newDataSize
+ << GetStreamTypeName() << " stream: " << __func__
+ << " eviction_size=" << eviction_size
<< " bytes exceeds memory_limit_=" << memory_limit_
<< ", currently buffered ranges_size=" << ranges_size;
return false;
}
// Return if we're under or at the memory limit.
- if (ranges_size + newDataSize <= memory_limit_)
+ if (ranges_size + eviction_size <= memory_limit_)
return true;
- size_t bytes_to_free = ranges_size + newDataSize - memory_limit_;
+ size_t bytes_to_free = ranges_size + eviction_size - memory_limit_;
DVLOG(2) << __func__ << " " << GetStreamTypeName()
<< ": Before GC media_time=" << media_time.InSecondsF()
<< " ranges_=" << RangesToString(ranges_)
<< " seek_pending_=" << seek_pending_
- << " ranges_size=" << ranges_size << " newDataSize=" << newDataSize
+ << " ranges_size=" << ranges_size
+ << " eviction_size=" << eviction_size
<< " memory_limit_=" << memory_limit_
<< " last_appended_buffer_timestamp_="
<< last_appended_buffer_timestamp_.InSecondsF();
@@ -836,6 +839,9 @@ bool SourceBufferStream::GarbageCollectIfNeeded(DecodeTimestamp media_time,
<< " bytes_freed=" << bytes_freed
<< " ranges_=" << RangesToString(ranges_);
+ if (bytes_released)
+ *bytes_released = bytes_freed;
+
return bytes_freed >= bytes_to_free;
}

Powered by Google App Engine
This is Rietveld 408576698