RESOLVED FIXED 217704
Add support for GPUProcess WebAudio media element providers
https://bugs.webkit.org/show_bug.cgi?id=217704
Summary Add support for GPUProcess WebAudio media element providers
youenn fablet
Reported 2020-10-14 05:44:16 PDT
Add support for GPUProcess WebAudio media element providers
Attachments
Patch (74.13 KB, patch)
2020-10-14 05:45 PDT, youenn fablet
no flags
Patch (55.00 KB, patch)
2020-10-15 03:57 PDT, youenn fablet
ews-feeder: commit-queue-
Patch (55.10 KB, patch)
2020-10-15 05:02 PDT, youenn fablet
ews-feeder: commit-queue-
Patch (55.23 KB, patch)
2020-10-15 05:14 PDT, youenn fablet
no flags
Patch (55.15 KB, patch)
2020-10-15 05:22 PDT, youenn fablet
no flags
Patch (55.17 KB, patch)
2020-10-15 05:30 PDT, youenn fablet
no flags
Patch for landing (55.18 KB, patch)
2020-10-16 01:48 PDT, youenn fablet
ews-feeder: commit-queue-
youenn fablet
Comment 1 2020-10-14 05:45:31 PDT
youenn fablet
Comment 2 2020-10-15 03:57:33 PDT
youenn fablet
Comment 3 2020-10-15 05:02:48 PDT
youenn fablet
Comment 4 2020-10-15 05:14:06 PDT
youenn fablet
Comment 5 2020-10-15 05:22:58 PDT
youenn fablet
Comment 6 2020-10-15 05:30:14 PDT
Eric Carlson
Comment 7 2020-10-15 20:24:12 PDT
Comment on attachment 411432 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=411432&action=review > Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:345 > + m_ringBuffer = m_ringBufferCallback ? m_ringBufferCallback(description, capacity) : nullptr; > + if (!m_ringBuffer) { > + m_ringBuffer = makeUnique<CARingBuffer>(); > + m_ringBuffer->allocate(description, capacity); > + } Is it possible for m_ringBufferCallback() to return NULL? If not, I would change this to something like if (m_ringBufferCallback) m_ringBuffer = m_ringBufferCallback(...) else { m_ringBuffer = makeUnique<...> ... } > Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderCocoa.mm:144 > + m_dataSource->pushSamples(MediaTime(m_writeCount, m_inputDescription->sampleRate()), data, frameCount); Good catch! > Source/WebKit/GPUProcess/media/RemoteAudioSourceProviderProxy.cpp:29 > +#if ENABLE(GPU_PROCESS) && ENABLE(WEB_AUDIO) && PLATFORM(COCOA) `ENABLE_WEB_AUDIO` is defined in PlatformEnableCocoa.h, so I think `ENABLE(WEB_AUDIO) && PLATFORM(COCOA)` can be just `PLATFORM(COCOA)` > Source/WebKit/GPUProcess/media/RemoteAudioSourceProviderProxy.h:28 > +#if ENABLE(GPU_PROCESS) && ENABLE(WEB_AUDIO) && PLATFORM(COCOA) Ditto. > Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:889 > +#if ENABLE(WEB_AUDIO) && PLATFORM(COCOA) Ditto. > Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:903 > +#if ENABLE(WEB_AUDIO) && PLATFORM(COCOA) Ditto. > Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h:314 > +#if ENABLE(WEB_AUDIO) && PLATFORM(COCOA) Ditto. > Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp:105 > +#if PLATFORM(COCOA) && ENABLE(WEB_AUDIO) Ditto. > Source/WebKit/WebProcess/GPU/GPUProcessConnection.h:70 > +#if PLATFORM(COCOA) && ENABLE(WEB_AUDIO) Ditto. > Source/WebKit/WebProcess/GPU/GPUProcessConnection.h:108 > +#if PLATFORM(COCOA) && ENABLE(WEB_AUDIO) Ditto. > Source/WebKit/WebProcess/GPU/media/RemoteAudioSourceProvider.cpp:29 > #if ENABLE(GPU_PROCESS) && ENABLE(WEB_AUDIO) && PLATFORM(COCOA) Ditto. > Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp:29 > +#include "Logging.h" Is this needed?
youenn fablet
Comment 8 2020-10-16 01:34:02 PDT
(In reply to Eric Carlson from comment #7) > Comment on attachment 411432 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=411432&action=review > > > Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:345 > > + m_ringBuffer = m_ringBufferCallback ? m_ringBufferCallback(description, capacity) : nullptr; > > + if (!m_ringBuffer) { > > + m_ringBuffer = makeUnique<CARingBuffer>(); > > + m_ringBuffer->allocate(description, capacity); > > + } > > Is it possible for m_ringBufferCallback() to return NULL? If not, I would > change this to something like > > if (m_ringBufferCallback) > m_ringBuffer = m_ringBufferCallback(...) > else { > m_ringBuffer = makeUnique<...> > ... > } I did that initially but thought it was as good this way. I'll change the ring buffer callback to pass a UniqueRef. > > Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderCocoa.mm:144 > > + m_dataSource->pushSamples(MediaTime(m_writeCount, m_inputDescription->sampleRate()), data, frameCount); > > Good catch! > > > Source/WebKit/GPUProcess/media/RemoteAudioSourceProviderProxy.cpp:29 > > +#if ENABLE(GPU_PROCESS) && ENABLE(WEB_AUDIO) && PLATFORM(COCOA) > > `ENABLE_WEB_AUDIO` is defined in PlatformEnableCocoa.h, so I think > `ENABLE(WEB_AUDIO) && PLATFORM(COCOA)` can be just `PLATFORM(COCOA)` CMake build is defining these macros in Source/cmake/OptionsXXX.cmake so it might be safer to keep these. > > Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp:29 > > +#include "Logging.h" > > Is this needed? Unified build issue.
youenn fablet
Comment 9 2020-10-16 01:48:15 PDT
Created attachment 411547 [details] Patch for landing
EWS
Comment 10 2020-10-16 02:49:02 PDT
Committed r268577: <https://trac.webkit.org/changeset/268577> All reviewed patches have been landed. Closing bug and clearing flags on attachment 411547 [details].
Radar WebKit Bug Importer
Comment 11 2020-10-16 02:50:19 PDT
Note You need to log in before you can comment on or make changes to this bug.