NotNull<AllocPolicy*> GlobalAllocPolicy::Instance(TrackType aTrack) { StaticMutexAutoLock lock(sMutex); if (aTrack == TrackType::kAudioTrack) { static RefPtr<AllocPolicyImpl> sAudioPolicy = []() { SystemGroup::Dispatch( TaskCategory::Other, NS_NewRunnableFunction( "GlobalAllocPolicy::GlobalAllocPolicy:Audio", []() { ClearOnShutdown(&sAudioPolicy, ShutdownPhase::ShutdownThreads); })); return new AllocPolicyImpl(MediaDecoderLimitDefault()); }(); return WrapNotNull(sAudioPolicy.get()); } static RefPtr<AllocPolicyImpl> sVideoPolicy = []() { SystemGroup::Dispatch( TaskCategory::Other, NS_NewRunnableFunction( "GlobalAllocPolicy::GlobalAllocPolicy:Audio", []() { ClearOnShutdown(&sVideoPolicy, ShutdownPhase::ShutdownThreads); })); return new AllocPolicyImpl(MediaDecoderLimitDefault()); }(); return WrapNotNull(sVideoPolicy.get()); }
GlobalAllocPolicy::GlobalAllocPolicy() : mMonitor("DecoderAllocPolicy::mMonitor") , mDecoderLimit(MediaDecoderLimitDefault()) { SystemGroup::Dispatch( TaskCategory::Other, NS_NewRunnableFunction("GlobalAllocPolicy::GlobalAllocPolicy", [this]() { ClearOnShutdown(this, ShutdownPhase::ShutdownThreads); })); }