[webkit-changes] [WebKit/WebKit] 0a7b2c: Adopt ThreadSafeWeakPtr in LocalSampleBufferDispla...

youennf noreply at github.com
Fri Jun 23 06:55:43 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0a7b2cd6eaaf26123fbcfeffae9adc0c07ed79ef
      https://github.com/WebKit/WebKit/commit/0a7b2cd6eaaf26123fbcfeffae9adc0c07ed79ef
  Author: Youenn Fablet <youennf at gmail.com>
  Date:   2023-06-23 (Fri, 23 Jun 2023)

  Changed paths:
    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/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h

  Log Message:
  -----------
  Adopt ThreadSafeWeakPtr in LocalSampleBufferDisplayLayer
https://bugs.webkit.org/show_bug.cgi?id=258441
rdar://111203259

Reviewed by Eric Carlson.

SampleBufferDisplayLayer was migrated to ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr but not LocalSampleBufferDisplayLayer.
LocalSampleBufferDisplayLayer was still using WeakPtr and a work queue, with dispatchSync in its destructor.
This works ok except if dispatching a task from another dispatched task, which was happening in LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition.

To prevent this, we are introducing enqueueBufferInternal which should be called from the work queue.
In addition to that, we are removing the dispatchSync in the destructor and make use of ThreadSafeWeakPtr in the work queue, to make code more robust.

We have to change WebAVSampleBufferStatusChangeListener also and are now storing the displayLayer at begin time, since stop might be called within LocalSampleBufferDisplayLayer destructor.
Covered by exsting tests.

* Source/WebCore/platform/graphics/avfoundation/SampleBufferDisplayLayer.h:
* Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
* Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
(-[WebAVSampleBufferStatusChangeListener begin:]):
(-[WebAVSampleBufferStatusChangeListener stop]):
(-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
(WebCore::LocalSampleBufferDisplayLayer::initialize):
(WebCore::LocalSampleBufferDisplayLayer::~LocalSampleBufferDisplayLayer):
(WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
(WebCore::LocalSampleBufferDisplayLayer::flush):
(WebCore::LocalSampleBufferDisplayLayer::flushAndRemoveImage):
(WebCore::LocalSampleBufferDisplayLayer::enqueueVideoFrame):
(WebCore::LocalSampleBufferDisplayLayer::enqueueBuffer):
(WebCore::LocalSampleBufferDisplayLayer::enqueueBufferInternal):
(WebCore::LocalSampleBufferDisplayLayer::onIrregularFrameRateNotification):
(WebCore::LocalSampleBufferDisplayLayer::clearVideoFrames):
(WebCore::LocalSampleBufferDisplayLayer::requestNotificationWhenReadyForVideoData):
(-[WebAVSampleBufferStatusChangeListener begin]): Deleted.
* Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:

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




More information about the webkit-changes mailing list