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

Unified Diff: third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h

Issue 2793593002: AudioWorklet prototype
Patch Set: Merge changes, AudioParam bug fix Created 3 years, 5 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: third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h
index 0fe739bce91097b24fb31b8bb8bb896fcf648772..f08b32afca8807d7c46088588b06071a0ad0852c 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h
@@ -6,21 +6,75 @@
#define AudioWorkletMessagingProxy_h
#include <memory>
-#include "core/workers/ThreadedWorkletMessagingProxy.h"
+#include "core/CoreExport.h"
+#include "core/loader/WorkletScriptLoader.h"
+#include "core/workers/ThreadedMessagingProxyBase.h"
+#include "core/workers/WorkletGlobalScopeProxy.h"
+#include "core/workers/WorkletPendingTasks.h"
+#include "platform/wtf/WeakPtr.h"
namespace blink {
-class ExecutionContext;
-class WorkerThread;
+class AudioWorkletHandler;
+class AudioWorkletObjectProxy;
+class ScriptSourceCode;
+class WaitableEvent;
+class WebThreadSupportingGC;
+
+// NOTE: Currently this class is a duplication of ThreadedWorkletMessagingProxy,
+// because it needs to have the ownership of the worker thread.
+//
+// When rebasing the code, make sure to copy the behavior of
+// |ThreadedWorkletMessagingProxy| instead of inheriting from it. Think of this
+// class is a composition of |ThreadedWorkletMessagingProxy| and
+// |AudioWorkletMessagingProxy|. This is because we need a direct access of
+// |worklet_object_proxy| from BaseAudioContext.
+
+class CORE_EXPORT AudioWorkletMessagingProxy
+ : public ThreadedMessagingProxyBase,
+ public WorkletGlobalScopeProxy {
+ USING_GARBAGE_COLLECTED_MIXIN(AudioWorkletMessagingProxy);
-class AudioWorkletMessagingProxy final : public ThreadedWorkletMessagingProxy {
public:
AudioWorkletMessagingProxy(ExecutionContext*, WorkerClients*);
- private:
- ~AudioWorkletMessagingProxy() override;
+ // WorkletGlobalScopeProxy implementation.
+ void FetchAndInvokeScript(const KURL& module_url_record,
+ WebURLRequest::FetchCredentialsMode,
+ RefPtr<WebTaskRunner> outside_settings_task_runner,
+ WorkletPendingTasks*) final;
+ void WorkletObjectDestroyed() final;
+ void TerminateWorkletGlobalScope() final;
+
+ void Initialize();
+
+ DECLARE_VIRTUAL_TRACE();
+
+ // This blocks the main thread until the rendering thread completes the
+ // creation of AudioWorkletProcessor.
+ void CreateProcessorInstance(const String& name,
+ AudioWorkletHandler*,
+ WaitableEvent*);
+ // This returns the rendering thread so it can be passed to AudioDestination.
+ WebThreadSupportingGC* GetRenderingThread();
+
+ protected:
std::unique_ptr<WorkerThread> CreateWorkerThread(double origin_time) override;
+
+ AudioWorkletObjectProxy& WorkletObjectProxy() {
+ return *worklet_object_proxy_;
+ }
+
+ private:
+ friend class AudioWorkletMessagingProxyForTest;
+ class LoaderClient;
+
+ void NotifyLoadingFinished(WorkletScriptLoader*);
+ void EvaluateScript(const ScriptSourceCode&);
+
+ std::unique_ptr<AudioWorkletObjectProxy> worklet_object_proxy_;
+ HeapHashSet<Member<WorkletScriptLoader>> loaders_;
};
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698