bug 1081766 clear mDecoders in BreakCycles to save dispatching another task r=kinetik

--HG--
extra : rebase_source : 24cd218c1fe0bc4c67d6f9d94d98dfec1e3b497b
extra : histedit_source : 43fd6a0c7d2ba766f8f9f4fdb8fcd5adc6e5ed02
This commit is contained in:
Karl Tomlinson 2014-10-10 17:58:50 +13:00
parent 2af6386af0
commit ee59dd7387

View File

@ -54,22 +54,17 @@ TrackBuffer::~TrackBuffer()
class ReleaseDecoderTask : public nsRunnable {
public:
explicit ReleaseDecoderTask(SourceBufferDecoder* aDecoder)
: mDecoder(aDecoder)
{
mDecoders.AppendElement(aDecoder);
}
explicit ReleaseDecoderTask(nsTArray<nsRefPtr<SourceBufferDecoder>>& aDecoders)
{
mDecoders.SwapElements(aDecoders);
}
NS_IMETHOD Run() MOZ_OVERRIDE MOZ_FINAL {
mDecoders.Clear();
mDecoder = nullptr;
return NS_OK;
}
private:
nsTArray<nsRefPtr<SourceBufferDecoder>> mDecoders;
nsRefPtr<SourceBufferDecoder> mDecoder;
};
void
@ -397,11 +392,12 @@ TrackBuffer::ContainsTime(int64_t aTime)
void
TrackBuffer::BreakCycles()
{
MOZ_ASSERT(NS_IsMainThread());
for (uint32_t i = 0; i < mDecoders.Length(); ++i) {
mDecoders[i]->GetReader()->BreakCycles();
}
NS_DispatchToMainThread(new ReleaseDecoderTask(mDecoders));
MOZ_ASSERT(mDecoders.IsEmpty());
mDecoders.Clear();
// These are cleared in Shutdown()
MOZ_ASSERT(mInitializedDecoders.IsEmpty());