Chromium Code Reviews| Index: third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp |
| diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp |
| index f59c7373237c228e98fdabb450050777484a7da2..1c3ba9c974528f022254c1dab422a79c5081064e 100644 |
| --- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp |
| +++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp |
| @@ -20,66 +20,7 @@ |
| namespace blink { |
| -namespace { |
| - |
| -// TODO(hongchan): consider refactoring static methods in this class into |
| -// a template class. |
| -class AudioWorkletThreadHolder final : public WorkletBackingThreadHolder { |
| - public: |
| - static AudioWorkletThreadHolder* instance() { |
| - MutexLocker locker(holderInstanceMutex()); |
| - return s_instance; |
| - } |
| - |
| - static void ensureInstance() { |
| - if (!s_instance) |
| - s_instance = new AudioWorkletThreadHolder; |
| - } |
| - |
| - static void clear() { |
| - MutexLocker locker(holderInstanceMutex()); |
| - if (s_instance) { |
| - s_instance->shutdownAndWait(); |
| - delete s_instance; |
| - s_instance = nullptr; |
| - } |
| - } |
| - |
| - static void createForTest() { |
| - MutexLocker locker(holderInstanceMutex()); |
| - DCHECK_EQ(nullptr, s_instance); |
| - s_instance = |
| - new AudioWorkletThreadHolder(WorkerBackingThread::createForTest( |
| - "AudioWorkletThread", BlinkGC::PerThreadHeapMode)); |
| - } |
| - |
| - private: |
| - AudioWorkletThreadHolder( |
| - std::unique_ptr<WorkerBackingThread> backingThread = nullptr) |
| - : WorkletBackingThreadHolder( |
| - backingThread |
| - ? std::move(backingThread) |
| - : WorkerBackingThread::create("AudioWorkletThread", |
| - BlinkGC::PerThreadHeapMode)) {} |
| - |
| - static Mutex& holderInstanceMutex() { |
| - DEFINE_THREAD_SAFE_STATIC_LOCAL(Mutex, holderMutex, new Mutex); |
| - return holderMutex; |
| - } |
| - |
| - void initializeOnThread() { |
| - MutexLocker locker(holderInstanceMutex()); |
| - DCHECK(!m_initialized); |
| - m_thread->initialize(); |
| - m_initialized = true; |
| - } |
| - |
| - static AudioWorkletThreadHolder* s_instance; |
| -}; |
| - |
| -AudioWorkletThreadHolder* AudioWorkletThreadHolder::s_instance = nullptr; |
| - |
| -} // namespace |
| +template class WorkletThreadHolder<AudioWorkletThread>; |
| std::unique_ptr<AudioWorkletThread> AudioWorkletThread::create( |
| PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, |
| @@ -99,7 +40,8 @@ AudioWorkletThread::AudioWorkletThread( |
| AudioWorkletThread::~AudioWorkletThread() {} |
| WorkerBackingThread& AudioWorkletThread::workerBackingThread() { |
| - return *AudioWorkletThreadHolder::instance()->thread(); |
| + return *WorkletThreadHolder<AudioWorkletThread>::threadHolderInstance() |
| + ->thread(); |
| } |
| void collectAllGarbageOnAudioWorkletThread(WaitableEvent* doneEvent) { |
| @@ -110,10 +52,11 @@ void collectAllGarbageOnAudioWorkletThread(WaitableEvent* doneEvent) { |
| void AudioWorkletThread::collectAllGarbage() { |
| DCHECK(isMainThread()); |
| WaitableEvent doneEvent; |
| - AudioWorkletThreadHolder* instance = AudioWorkletThreadHolder::instance(); |
| - if (!instance) |
| + WorkletThreadHolder<AudioWorkletThread>* threadHolderInstance = |
| + WorkletThreadHolder<AudioWorkletThread>::threadHolderInstance(); |
| + if (!threadHolderInstance) |
| return; |
| - instance->thread()->backingThread().postTask( |
| + threadHolderInstance->thread()->backingThread().postTask( |
| BLINK_FROM_HERE, crossThreadBind(&collectAllGarbageOnAudioWorkletThread, |
| crossThreadUnretained(&doneEvent))); |
| doneEvent.wait(); |
| @@ -121,16 +64,13 @@ void AudioWorkletThread::collectAllGarbage() { |
| void AudioWorkletThread::ensureSharedBackingThread() { |
| DCHECK(isMainThread()); |
| - AudioWorkletThreadHolder::ensureInstance(); |
| + WorkletThreadHolder<AudioWorkletThread>::ensureInstance( |
| + "AudioWorkletThread", BlinkGC::PerThreadHeapMode); |
| } |
| void AudioWorkletThread::clearSharedBackingThread() { |
| DCHECK(isMainThread()); |
| - AudioWorkletThreadHolder::clear(); |
| -} |
| - |
| -void AudioWorkletThread::createSharedBackingThreadForTest() { |
| - AudioWorkletThreadHolder::createForTest(); |
| + WorkletThreadHolder<AudioWorkletThread>::clearInstance(); |
|
haraken
2016/10/26 07:41:49
Are you sure that this method is called?
As far a
nhiroki
2016/10/26 08:10:02
Good catch! I replied in the original CL:
https://
|
| } |
| WorkerOrWorkletGlobalScope* AudioWorkletThread::createWorkerGlobalScope( |