Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1014)

Unified Diff: Source/modules/webaudio/AudioContext.h

Issue 1123603002: Process suspend() and resume() in call order (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698