| Index: Source/modules/webaudio/AudioContext.h
|
| diff --git a/Source/modules/webaudio/AudioContext.h b/Source/modules/webaudio/AudioContext.h
|
| index 5b19a40d2b8248048d972429ba0e5fe3275e7b52..159380866f53b86c5fdee688e4bc28d821d71ba0 100644
|
| --- a/Source/modules/webaudio/AudioContext.h
|
| +++ b/Source/modules/webaudio/AudioContext.h
|
| @@ -241,6 +241,24 @@ protected:
|
|
|
| RefPtrWillBeMember<ScriptPromiseResolver> m_offlineResolver;
|
| private:
|
| + class SuspendResumeHandler {
|
| + public:
|
| + enum ResolverType {
|
| + ResolverTypeSuspend,
|
| + ResolverTypeResume
|
| + };
|
| +
|
| + static SuspendResumeHandler* createSuspendHandler(PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
|
| + static SuspendResumeHandler* createResumeHandler(PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
|
| + ResolverType handlerType() { return m_resolverType; }
|
| + PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver() { return m_resolver; }
|
| + ~SuspendResumeHandler();
|
| + private:
|
| + SuspendResumeHandler(ResolverType, PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
|
| + ResolverType m_resolverType;
|
| + RefPtrWillBeRawPtr<ScriptPromiseResolver> m_resolver;
|
| + };
|
| +
|
| void initialize();
|
| void uninitialize();
|
|
|
| @@ -278,24 +296,18 @@ private:
|
| // Stop rendering the audio graph.
|
| void stopRendering();
|
|
|
| - // Handle Promises for resume() and suspend()
|
| - void resolvePromisesForResume();
|
| - void resolvePromisesForResumeOnMainThread();
|
| -
|
| - void resolvePromisesForSuspend();
|
| - void resolvePromisesForSuspendOnMainThread();
|
| + void resolvePromisesForSuspendResume();
|
| + void resolvePromisesForSuspendResumeOnMainThread();
|
|
|
| // Vector of promises created by resume(). It takes time to handle them, so we collect all of
|
| // the promises here until they can be resolved or rejected.
|
| - WillBeHeapVector<RefPtrWillBeMember<ScriptPromiseResolver>> m_resumeResolvers;
|
| - // Like m_resumeResolvers but for suspend().
|
| - WillBeHeapVector<RefPtrWillBeMember<ScriptPromiseResolver>> m_suspendResolvers;
|
| + Vector<SuspendResumeHandler*> m_suspendResumeHandlers;
|
| void rejectPendingResolvers();
|
|
|
| - // True if we're in the process of resolving promises for resume(). Resolving can take some
|
| - // time and the audio context process loop is very fast, so we don't want to call resolve an
|
| - // excessive number of times.
|
| - bool m_isResolvingResumePromises;
|
| + // True if we're in the process of resolving promises for suspend()/resume(). Resolving can
|
| + // take some time and the audio context process loop is very fast, so we don't want to call
|
| + // resolve an excessive number of times.
|
| + bool m_isResolvingSuspendResumePromises;
|
|
|
| unsigned m_connectionCount;
|
|
|
|
|