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

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..9a09cc816b943bec3f4b530694ed6a6af2228340 100644
--- a/Source/modules/webaudio/AudioContext.h
+++ b/Source/modules/webaudio/AudioContext.h
@@ -241,6 +241,25 @@ protected:
RefPtrWillBeMember<ScriptPromiseResolver> m_offlineResolver;
private:
+ class SuspendResumeResolver {
hongchan 2015/05/04 17:28:38 Should we consider take this definition out of the
Raymond Toy 2015/05/04 17:38:34 It seems natural to keep it here since it's only r
hongchan 2015/05/04 17:41:50 Acknowledged.
+ public:
+ enum ResolverType {
+ ResolverTypeSuspend,
+ ResolverTypeResume
+ };
+
+ static SuspendResumeResolver* createSuspendHandler(PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
+ static SuspendResumeResolver* createResumeHandler(PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
+ ResolverType handlerType() { return m_resolverType; }
+ PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver() { return m_resolver; }
+
+ private:
+ SuspendResumeResolver(ResolverType, PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
+ ~SuspendResumeResolver();
+ ResolverType m_resolverType;
+ RefPtrWillBeRawPtr<ScriptPromiseResolver> m_resolver;
+ };
+
void initialize();
void uninitialize();
@@ -279,23 +298,20 @@ private:
void stopRendering();
// Handle Promises for resume() and suspend()
- void resolvePromisesForResume();
- void resolvePromisesForResumeOnMainThread();
+ void resolvePromisesForSuspendResume();
+ void resolvePromisesForSuspendResumeOnMainThread();
- void resolvePromisesForSuspend();
- void resolvePromisesForSuspendOnMainThread();
+ // Vector of promises created by suspend() and resume(). It takes time to handle them, so we
+ // collect all of the promises here until they can be resolved or rejected. We can then also
+ // process them in the order in which suspend/resume was called.
+ Vector<SuspendResumeResolver*> m_suspendResumeResolvers;
- // 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;
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