[webkit-changes] [WebKit/WebKit] cb9e03: Various ThreadSafeRefCountedAndCanMakeThreadSafeWe...

Keith Miller noreply at github.com
Tue Dec 3 15:37:58 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: cb9e03866203faa7c3a986f3bbd561661cca913f
      https://github.com/WebKit/WebKit/commit/cb9e03866203faa7c3a986f3bbd561661cca913f
  Author: Keith Miller <keith_miller at apple.com>
  Date:   2024-12-03 (Tue, 03 Dec 2024)

  Changed paths:
    M Source/WTF/WTF.xcodeproj/project.pbxproj
    A Source/WTF/wtf/AbstractThreadSafeRefCountedAndCanMakeWeakPtr.h
    M Source/WTF/wtf/CMakeLists.txt
    M Source/WTF/wtf/ThreadSafeWeakHashSet.h
    M Source/WTF/wtf/ThreadSafeWeakPtr.h
    M Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h
    M Source/WebCore/Modules/mediastream/VideoTrackGenerator.h
    M Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h
    M Source/WebCore/platform/graphics/ImageBuffer.cpp
    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/xr/PlatformXR.h
    M Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.h
    M Source/WebKit/WebProcess/GPU/GPUProcessConnection.h
    M Source/WebKit/WebProcess/GPU/graphics/wc/RemoteWCLayerTreeHostProxy.h
    M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.h
    M Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.h
    M Source/WebKit/WebProcess/GPU/media/RemoteAudioSession.h
    M Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVFManager.h
    M Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h
    M Source/WebKit/WebProcess/GPU/media/RemoteRemoteCommandListener.h
    M Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h
    M Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h
    M Source/WebKit/WebProcess/GPU/webrtc/RemoteVideoFrameObjectHeapProxyProcessor.h
    M Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h
    M Source/WebKit/WebProcess/Model/ModelProcessConnection.h
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.h
    M Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.h
    M Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp

  Log Message:
  -----------
  Various ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr cleanups
https://bugs.webkit.org/show_bug.cgi?id=283588
rdar://140325747

Reviewed by Alex Christensen.

This patch clears up some parts of how ThreadSafeRefCountedAndCanMakeWeakPtr work.
In particular, now that we no longer permit creating a WeakRef during the destructor
of an object we don't need to use a HashMap in ThreadSafeWeakHashSet and can just use
a std::pair, which simplifies the logic. I also added an optimization to not check the
set if there's no weakRefCount when removing/contains checking. This also prevents
allocating a ControlBlock for an object that can't be in the table anyway.

I was originally thinking we could just remove this second pointer but due to
multiple inheritance it's actually necessary. I added some comments to clarify this.

I also added some logic to remove an entry if it's stale when calling
`ThreadSafeWeakHashSet::contains()` as well as some other places we could
opportunistically clear dead entries.

* Source/WTF/WTF.xcodeproj/project.pbxproj:
* Source/WTF/wtf/AbstractThreadSafeRefCountedAndCanMakeWeakPtr.h: Added.
* Source/WTF/wtf/ThreadSafeWeakHashSet.h:
* Source/WTF/wtf/ThreadSafeWeakPtr.h:
(WTF::ThreadSafeWeakPtrControlBlock::weakRef):
(WTF::ThreadSafeWeakPtrControlBlock::makeStrongReferenceIfPossible const):
(WTF::ThreadSafeWeakPtrControlBlock::weakRefCount const):
(WTF::ThreadSafeWeakPtrControlBlock::refCount const):
(WTF::ThreadSafeWeakPtrControlBlock::hasOneRef const):
(WTF::ThreadSafeWeakPtrControlBlock::ThreadSafeWeakPtrControlBlock):
(WTF::ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr::controlBlock const):
(WTF::ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr::weakRefCount const):
(WTF::ThreadSafeWeakPtrControlBlock::weakReferenceCount const): Deleted.
* Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
* Source/WebCore/Modules/mediastream/VideoTrackGenerator.h:
* Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h:
* Source/WebCore/platform/graphics/ImageBuffer.cpp:
(WebCore::ImageBuffer::sinkIntoSerializedImageBuffer):
* 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): Deleted.
(WebCore::RealtimeVideoCaptureSource::deref const): Deleted.
(WebCore::RealtimeVideoCaptureSource::controlBlock const): 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/RealtimeIncomingSourceGStreamer.h:
(): Deleted.
* Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:
* Source/WebCore/platform/mock/MockRealtimeAudioSource.h:
* Source/WebCore/platform/xr/PlatformXR.h:
(PlatformXR::Device::ref const): Deleted.
(PlatformXR::Device::deref const): Deleted.
(PlatformXR::Device::controlBlock const): Deleted.
* Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.h:
* Source/WebKit/WebProcess/GPU/GPUProcessConnection.h:
* Source/WebKit/WebProcess/GPU/graphics/wc/RemoteWCLayerTreeHostProxy.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/RemoteImageDecoderAVFManager.h:
* Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h:
(): Deleted.
* 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/RemoteVideoFrameObjectHeapProxyProcessor.h:
* Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:
* Source/WebKit/WebProcess/Model/ModelProcessConnection.h:
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.h:
(): Deleted.
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.h:
* Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
(TestWebKitAPI::ObjectAddingAndRemovingItself::~ObjectAddingAndRemovingItself):
(TestWebKitAPI::ObjectRemovingItself::create):
(TestWebKitAPI::ObjectRemovingItself::~ObjectRemovingItself):
(TestWebKitAPI::ObjectRemovingItself::ObjectRemovingItself):
(TestWebKitAPI::TEST(WTF_ThreadSafeWeakPtr, ThreadSafeWeakHashSetRemoveNonExistantOnDestruction)):
(TestWebKitAPI::TEST(WTF_ThreadSafeWeakPtr, MultipleInheritance)):

Canonical link: https://commits.webkit.org/287313@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list