mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 09:15:35 +00:00
Bug 1182287: Partial revert of bug 1175768. r=karlt
This commit is contained in:
parent
3c098f9b97
commit
76702545bc
@ -416,7 +416,7 @@ TrackBuffer::EvictData(TimeUnit aPlaybackTime,
|
||||
}
|
||||
|
||||
// Get a list of initialized decoders.
|
||||
nsTArray<nsRefPtr<SourceBufferDecoder>> decoders;
|
||||
nsTArray<SourceBufferDecoder*> decoders;
|
||||
decoders.AppendElements(mInitializedDecoders);
|
||||
const TimeUnit evictThresholdTime{TimeUnit::FromSeconds(MSE_EVICT_THRESHOLD_TIME)};
|
||||
|
||||
@ -566,31 +566,29 @@ TrackBuffer::EvictData(TimeUnit aPlaybackTime,
|
||||
}
|
||||
|
||||
void
|
||||
TrackBuffer::RemoveEmptyDecoders(const nsTArray<nsRefPtr<mozilla::SourceBufferDecoder>>& aDecoders)
|
||||
TrackBuffer::RemoveEmptyDecoders(const nsTArray<mozilla::SourceBufferDecoder*>& aDecoders)
|
||||
{
|
||||
nsRefPtr<TrackBuffer> self = this;
|
||||
nsTArray<nsRefPtr<mozilla::SourceBufferDecoder>> decoders(aDecoders);
|
||||
nsCOMPtr<nsIRunnable> task =
|
||||
NS_NewRunnableFunction([self, decoders] () {
|
||||
if (!self->mParentDecoder) {
|
||||
return;
|
||||
}
|
||||
ReentrantMonitorAutoEnter mon(self->mParentDecoder->GetReentrantMonitor());
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mParentDecoder->GetReentrantMonitor().AssertCurrentThreadIn();
|
||||
|
||||
// Remove decoders that have decoders data in them
|
||||
for (uint32_t i = 0; i < decoders.Length(); ++i) {
|
||||
if (decoders[i] == self->mCurrentDecoder ||
|
||||
self->mParentDecoder->IsActiveReader(decoders[i]->GetReader())) {
|
||||
continue;
|
||||
}
|
||||
TimeIntervals buffered = self->GetBuffered(decoders[i]);
|
||||
if (decoders[i]->GetResource()->GetSize() == 0 || !buffered.Length() ||
|
||||
buffered[0].IsEmpty()) {
|
||||
self->RemoveDecoder(decoders[i]);
|
||||
}
|
||||
}
|
||||
});
|
||||
AbstractThread::MainThread()->Dispatch(task.forget());
|
||||
// Remove decoders that have no data in them.
|
||||
for (uint32_t i = 0; i < aDecoders.Length(); ++i) {
|
||||
TimeIntervals buffered = GetBuffered(aDecoders[i]);
|
||||
MSE_DEBUG("maybe remove empty decoders=%d "
|
||||
"size=%lld start=%f end=%f",
|
||||
i, aDecoders[i]->GetResource()->GetSize(),
|
||||
buffered.GetStart().ToSeconds(), buffered.GetEnd().ToSeconds());
|
||||
if (aDecoders[i] == mCurrentDecoder ||
|
||||
mParentDecoder->IsActiveReader(aDecoders[i]->GetReader())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (aDecoders[i]->GetResource()->GetSize() == 0 || !buffered.Length() ||
|
||||
buffered[0].IsEmpty()) {
|
||||
MSE_DEBUG("remove empty decoders=%d", i);
|
||||
RemoveDecoder(aDecoders[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int64_t
|
||||
@ -1223,7 +1221,7 @@ TrackBuffer::RangeRemoval(TimeUnit aStart, TimeUnit aEnd)
|
||||
return RangeRemovalPromise::CreateAndResolve(false, __func__);
|
||||
}
|
||||
|
||||
nsTArray<nsRefPtr<SourceBufferDecoder>> decoders;
|
||||
nsTArray<SourceBufferDecoder*> decoders;
|
||||
decoders.AppendElements(mInitializedDecoders);
|
||||
|
||||
if (aStart <= bufferedStart && aEnd < bufferedEnd) {
|
||||
|
@ -170,7 +170,7 @@ private:
|
||||
void RemoveDecoder(SourceBufferDecoder* aDecoder);
|
||||
|
||||
// Remove all empty decoders from the provided list;
|
||||
void RemoveEmptyDecoders(const nsTArray<nsRefPtr<SourceBufferDecoder>>& aDecoders);
|
||||
void RemoveEmptyDecoders(const nsTArray<SourceBufferDecoder*>& aDecoders);
|
||||
|
||||
void OnMetadataRead(MetadataHolder* aMetadata,
|
||||
SourceBufferDecoder* aDecoder,
|
||||
|
Loading…
Reference in New Issue
Block a user