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

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: Update according to review. 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..ca32230f5c07316cb4ed29f96d72d773dfeaac87 100644
--- a/Source/modules/webaudio/AudioContext.h
+++ b/Source/modules/webaudio/AudioContext.h
@@ -241,6 +241,27 @@ protected:
RefPtrWillBeMember<ScriptPromiseResolver> m_offlineResolver;
private:
+ // Helper class to wrap a ScriptPromiseResolver to include information on whether the resolver
+ // was created by suspend() or resume() so that we can process them correctly.
+ class SuspendResumeResolver {
haraken 2015/05/04 23:24:41 This needs to be: class SuspendResumeResolver :
Raymond Toy 2015/05/14 21:26:05 When I do this and make m_resolver be a RefPtrWill
haraken 2015/05/14 21:28:27 You'll need to use NoBaseWillBeGarbageCollected.
+ public:
+ enum ResolverType {
+ ResolverTypeSuspend,
+ ResolverTypeResume
+ };
+
+ static SuspendResumeResolver* createSuspendResolver(PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
+ static SuspendResumeResolver* createResumeResolver(PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
+ ResolverType handlerType() const { return m_resolverType; }
+ PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver() { return m_resolver; }
+
+ private:
+ SuspendResumeResolver(ResolverType, PassRefPtrWillBeRawPtr<ScriptPromiseResolver>);
+ ~SuspendResumeResolver();
+ ResolverType m_resolverType;
+ RefPtrWillBeRawPtr<ScriptPromiseResolver> m_resolver;
haraken 2015/05/04 23:24:41 RefPtrWillBeMember<ScriptPromiseResolver> Also yo
+ };
+
void initialize();
void uninitialize();
@@ -279,23 +300,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;
haraken 2015/05/04 23:24:40 WillBeHeapVector<OwnPtrWillBeMember<SuspendResumeR
- // 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