Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: d1cbec4c36d40118f5549264674a7a7fe280c18b
https://github.com/WebKit/WebKit/commit/d1cbec4c36d40118f5549264674a7a7fe280c18b
Author: Alex Christensen <[email protected]>
Date: 2023-06-06 (Tue, 06 Jun 2023)
Changed paths:
M Source/WTF/wtf/ThreadSafeWeakHashSet.h
M Source/WTF/wtf/ThreadSafeWeakPtr.h
M Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h
M Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h
M Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.h
M Source/WebCore/PAL/pal/graphics/WebGPU/WebGPU.h
M Source/WebCore/platform/NowPlayingManager.h
M Source/WebCore/platform/RemoteCommandListener.cpp
M Source/WebCore/platform/RemoteCommandListener.h
M Source/WebCore/platform/audio/AudioDestination.h
M Source/WebCore/platform/audio/AudioHardwareListener.cpp
M Source/WebCore/platform/audio/AudioHardwareListener.h
M Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.h
M Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.h
M Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.h
M Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm
M Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.h
M Source/WebCore/platform/cocoa/RemoteCommandListenerCocoa.h
M Source/WebCore/platform/cocoa/RemoteCommandListenerCocoa.mm
M Source/WebCore/platform/glib/RemoteCommandListenerGLib.cpp
M Source/WebCore/platform/glib/RemoteCommandListenerGLib.h
M Source/WebCore/platform/graphics/avfoundation/SampleBufferDisplayLayer.cpp
M Source/WebCore/platform/graphics/avfoundation/SampleBufferDisplayLayer.h
M
Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h
M
Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm
M
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h
M Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h
M Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h
M Source/WebCore/platform/mediastream/RealtimeMediaSource.h
M Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.cpp
M Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.h
M Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h
M
Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h
M
Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h
M Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h
M Source/WebCore/platform/mock/MockRealtimeAudioSource.h
M Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp
M Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.h
M Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp
M Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h
M Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.h
M
Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.cpp
M
Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.h
M Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp
M Source/WebKit/WebProcess/GPU/GPUProcessConnection.h
M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp
M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h
M Source/WebKit/WebProcess/GPU/graphics/wc/RemoteWCLayerTreeHostProxy.cpp
M Source/WebKit/WebProcess/GPU/graphics/wc/RemoteWCLayerTreeHostProxy.h
M Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp
M Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.h
M Source/WebKit/WebProcess/GPU/media/MediaSourcePrivateRemote.cpp
M Source/WebKit/WebProcess/GPU/media/MediaSourcePrivateRemote.h
M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.h
M Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.h
M Source/WebKit/WebProcess/GPU/media/RemoteAudioSession.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteAudioSession.h
M Source/WebKit/WebProcess/GPU/media/RemoteAudioSourceProvider.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteAudioSourceProvider.h
M Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVF.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVF.h
M Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVFManager.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVFManager.h
M Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h
M Source/WebKit/WebProcess/GPU/media/RemoteRemoteCommandListener.cpp
M Source/WebKit/WebProcess/GPU/media/RemoteRemoteCommandListener.h
M Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp
M Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.h
M Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.cpp
M Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.h
M Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.cpp
M Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.h
M Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp
M Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h
M Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h
M Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp
M Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.h
M
Source/WebKit/WebProcess/GPU/webrtc/RemoteVideoFrameObjectHeapProxyProcessor.h
M Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp
M Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h
M Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp
M Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.h
M Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h
M Source/WebKit/WebProcess/WebProcess.cpp
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.cpp
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.h
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.cpp
M Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp
Log Message:
-----------
Make GPUProcessConnection::Client thread safe
https://bugs.webkit.org/show_bug.cgi?id=249451
Reviewed by David Kilzer and Mike Wyrzykowski.
For UserMediaCaptureManagerProxy::createCameraSource I made an actual iterator
for ThreadSafeWeakHashSet that stores a vector of strong references.
I made ThreadSafeWeakPtrControlBlock non-templatized so that pure virtual
functions
can return the control block which is only available from another parent class
of a subclass.
In order to support this multiple inheritance, a ThreadSafeWeakPtr needs to
store
more information than just a pointer. I took the approach that std::weak_ptr
takes
and stored two pointers, one to the control block and one to the object of
correct
type, which may be different than the object that the control block points to
in the
case of multiple inheritance. I added an API test to verify this works
correctly.
Calling the proper destructor works because it always casts the void* to the
correct
type, and my API test verifies this works correctly. Keeping a pointer to the
control
block in ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr prevents us from
needing
strong references to keep two pointers also, so it can continue to work with
Ref/RefPtr.
GPUProcessConnection::m_clients is now a ThreadSafeWeakHashSet. The cleanup in
many clients'
gpuProcessConnectionDidClose is replaced by calling clear() in
GPUProcessConnection::didClose.
Many of the clients had a member pointing back to the GPUProcessConnection,
usually
a WeakPtr<GPUProcessConnection>. These were changed to
ThreadSafeWeakPtr<GPUProcessConnection>.
* Source/WTF/wtf/ThreadSafeWeakHashSet.h:
* Source/WTF/wtf/ThreadSafeWeakPtr.h:
(WTF::ThreadSafeWeakPtrControlBlock::strongDeref const):
(WTF::ThreadSafeWeakPtrControlBlock::makeStrongReferenceIfPossible const):
(WTF::ThreadSafeWeakPtrControlBlock::WTF_GUARDED_BY_LOCK):
(WTF::ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr::deref const):
(WTF::ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr::controlBlock const):
(WTF::ThreadSafeWeakPtr::ThreadSafeWeakPtr):
(WTF::ThreadSafeWeakPtr::operator=):
(WTF::ThreadSafeWeakPtr::get const):
(WTF::ThreadSafeWeakPtr::controlBlock):
* Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
* Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h:
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.h:
* Source/WebCore/PAL/pal/graphics/WebGPU/WebGPU.h:
* Source/WebCore/platform/NowPlayingManager.h:
* Source/WebCore/platform/RemoteCommandListener.cpp:
(WebCore::RemoteCommandListener::create):
* Source/WebCore/platform/RemoteCommandListener.h:
* Source/WebCore/platform/audio/AudioDestination.h:
* Source/WebCore/platform/audio/AudioHardwareListener.cpp:
(WebCore::AudioHardwareListener::resetCreationFunction):
* Source/WebCore/platform/audio/AudioHardwareListener.h:
* Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.h:
* Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.h:
* Source/WebCore/platform/cocoa/RemoteCommandListenerCocoa.h:
* Source/WebCore/platform/cocoa/RemoteCommandListenerCocoa.mm:
(WebCore::RemoteCommandListenerCocoa::create):
* Source/WebCore/platform/glib/RemoteCommandListenerGLib.cpp:
(WebCore::RemoteCommandListenerGLib::create):
* Source/WebCore/platform/glib/RemoteCommandListenerGLib.h:
* Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h:
* Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h:
* Source/WebCore/platform/mediastream/RealtimeMediaSource.h:
* Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.cpp:
(WebCore::RealtimeVideoCaptureSource::ref const):
(WebCore::RealtimeVideoCaptureSource::deref const):
(WebCore::RealtimeVideoCaptureSource::controlBlock const):
(WebCore::RealtimeVideoCaptureSource::~RealtimeVideoCaptureSource): Deleted.
* Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.h:
* Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h:
* Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:
*
Source/WebCore/platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h:
*
Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h:
* Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:
* Source/WebCore/platform/mock/MockRealtimeAudioSource.h:
* Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/Platform/IPC/WorkQueueMessageReceiver.h:
* Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
(WebKit::UserMediaCaptureManagerProxy::createMicrophoneSource):
* Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
* Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.h:
* Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.cpp:
(WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::removeSource):
(WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::remoteAudioSamplesAvailable):
(WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::remoteCaptureFailed):
(WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::remoteSourceStopped):
(WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::setStorage):
* Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.h:
* Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp:
(WebKit::GPUProcessConnection::didClose):
* Source/WebKit/WebProcess/GPU/GPUProcessConnection.h:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h:
* Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.h:
* Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.h:
* Source/WebKit/WebProcess/GPU/media/RemoteAudioSession.h:
* Source/WebKit/WebProcess/GPU/media/RemoteAudioSourceProviderManager.h:
* Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVFManager.h:
* Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h:
* Source/WebKit/WebProcess/GPU/media/RemoteRemoteCommandListener.cpp:
(WebKit::RemoteRemoteCommandListener::create):
* Source/WebKit/WebProcess/GPU/media/RemoteRemoteCommandListener.h:
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h:
* Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
* Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
(WebKit::MediaRecorderPrivate::startRecording):
* Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
*
Source/WebKit/WebProcess/GPU/webrtc/RemoteVideoFrameObjectHeapProxyProcessor.h:
* Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:
* Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h:
* Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h:
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
(WebKit::RemoteRealtimeAudioSource::~RemoteRealtimeAudioSource): Deleted.
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.cpp:
(WebKit::RemoteRealtimeMediaSource::removeAsClient): Deleted.
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.h:
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
(WebKit::RemoteRealtimeVideoSource::~RemoteRealtimeVideoSource): Deleted.
* Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
(TestWebKitAPI::TEST):
Canonical link: https://commits.webkit.org/264919@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes