Bug 1343732 - use SystemGroup::Dispatch() in ~AutoTaskQueue(). r?jya
MozReview-Commit-ID: IWFs5e8U7VQ
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -647,20 +647,19 @@ MediaFormatReader::DecoderFactory::DoIni
// This ensure that the reader's taskqueue will never blocked while a demuxer
// is itself blocked attempting to access the MediaCache or the MediaResource.
class MediaFormatReader::DemuxerProxy
{
using TrackType = TrackInfo::TrackType;
class Wrapper;
public:
- explicit DemuxerProxy(MediaDataDemuxer* aDemuxer, AbstractThread* aMainThread)
+ explicit DemuxerProxy(MediaDataDemuxer* aDemuxer)
: mTaskQueue(new AutoTaskQueue(
- GetMediaThreadPool(MediaThreadType::PLATFORM_DECODER),
- aMainThread))
+ GetMediaThreadPool(MediaThreadType::PLATFORM_DECODER)))
, mData(new Data(aDemuxer))
{
MOZ_COUNT_CTOR(DemuxerProxy);
}
~DemuxerProxy()
{
MOZ_COUNT_DTOR(DemuxerProxy);
@@ -987,19 +986,17 @@ MediaFormatReader::DemuxerProxy::NotifyD
MediaFormatReader::MediaFormatReader(AbstractMediaDecoder* aDecoder,
MediaDataDemuxer* aDemuxer,
VideoFrameContainer* aVideoFrameContainer)
: MediaDecoderReader(aDecoder)
, mAudio(this, MediaData::AUDIO_DATA,
Preferences::GetUint("media.audio-max-decode-error", 3))
, mVideo(this, MediaData::VIDEO_DATA,
Preferences::GetUint("media.video-max-decode-error", 2))
- , mDemuxer(new DemuxerProxy(aDemuxer, aDecoder
- ? aDecoder->AbstractMainThread()
- : AbstractThread::MainThread()))
+ , mDemuxer(new DemuxerProxy(aDemuxer))
, mDemuxerInitDone(false)
, mLastReportedNumDecodedFrames(0)
, mPreviousDecodedKeyframeTime_us(sNoPreviousDecodedKeyframe)
, mInitDone(false)
, mTrackDemuxersMayBlock(false)
, mSeekScheduled(false)
, mVideoFrameContainer(aVideoFrameContainer)
, mDecoderFactory(new DecoderFactory(this))
--- a/dom/media/mediasource/AutoTaskQueue.h
+++ b/dom/media/mediasource/AutoTaskQueue.h
@@ -13,21 +13,19 @@
namespace mozilla {
// A convenience TaskQueue not requiring explicit shutdown.
class AutoTaskQueue : public AbstractThread
{
public:
explicit AutoTaskQueue(already_AddRefed<SharedThreadPool> aPool,
- AbstractThread* aAbstractMainThread,
bool aSupportsTailDispatch = false)
: AbstractThread(aSupportsTailDispatch)
, mTaskQueue(new TaskQueue(Move(aPool), aSupportsTailDispatch))
- , mAbstractMainThread(aAbstractMainThread)
{}
TaskDispatcher& TailDispatcher() override
{
return mTaskQueue->TailDispatcher();
}
void Dispatch(already_AddRefed<nsIRunnable> aRunnable,
@@ -47,17 +45,16 @@ public:
bool IsCurrentThreadIn() override { return mTaskQueue->IsCurrentThreadIn(); }
private:
~AutoTaskQueue()
{
RefPtr<TaskQueue> taskqueue = mTaskQueue;
nsCOMPtr<nsIRunnable> task =
NS_NewRunnableFunction([taskqueue]() { taskqueue->BeginShutdown(); });
- mAbstractMainThread->Dispatch(task.forget());
+ SystemGroup::Dispatch("~AutoTaskQueue", TaskCategory::Other, task.forget());
}
RefPtr<TaskQueue> mTaskQueue;
- const RefPtr<AbstractThread> mAbstractMainThread;
};
} // namespace mozilla
#endif
--- a/dom/media/mediasource/MediaSourceDemuxer.cpp
+++ b/dom/media/mediasource/MediaSourceDemuxer.cpp
@@ -17,17 +17,16 @@
namespace mozilla {
typedef TrackInfo::TrackType TrackType;
using media::TimeUnit;
using media::TimeIntervals;
MediaSourceDemuxer::MediaSourceDemuxer(AbstractThread* aAbstractMainThread)
: mTaskQueue(new AutoTaskQueue(GetMediaThreadPool(MediaThreadType::PLAYBACK),
- aAbstractMainThread,
/* aSupportsTailDispatch = */ false))
, mMonitor("MediaSourceDemuxer")
{
MOZ_ASSERT(NS_IsMainThread());
}
// Due to inaccuracies in determining buffer end
// frames (Bug 1065207). This value is based on videos seen in the wild.