⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 287617 in webkit


Ignore:
Timestamp:
Jan 5, 2022, 10:20:28 AM (5 years ago)
Author:
Russell Epstein
Message:

Cherry-pick r283610. rdar://problem/83435926

ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds
​https://bugs.webkit.org/show_bug.cgi?id=231162

Reviewed by David Kilzer.

Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close.
This ensures that pixel buffers get released very quickly.

  • Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
  • Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h:
  • Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm:
  • Source/webrtc/sdk/objc/base/RTCI420Buffer.h:
  • Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h:
  • Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h:
  • Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm:
  • Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm:

git-svn-id: ​https://svn.webkit.org/repository/webkit/trunk@283610 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Location:
branches/safari-612-branch/Source/ThirdParty/libwebrtc
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/ChangeLog

    r284951 r287617  
     12022-01-05  Russell Epstein  <repstein@apple.com>
     2
     3        Cherry-pick r283610. rdar://problem/83435926
     4
     5    ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds
     6    https://bugs.webkit.org/show_bug.cgi?id=231162
     7   
     8    Reviewed by David Kilzer.
     9   
     10    Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close.
     11    This ensures that pixel buffers get released very quickly.
     12   
     13    * Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
     14    * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h:
     15    * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm:
     16    * Source/webrtc/sdk/objc/base/RTCI420Buffer.h:
     17    * Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h:
     18    * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h:
     19    * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm:
     20    * Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm:
     21   
     22   
     23    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283610 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     24
     25    2021-10-06  Youenn Fablet  <youenn@apple.com>
     26
     27            ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds
     28            https://bugs.webkit.org/show_bug.cgi?id=231162
     29
     30            Reviewed by David Kilzer.
     31
     32            Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close.
     33            This ensures that pixel buffers get released very quickly.
     34
     35            * Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
     36            * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h:
     37            * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm:
     38            * Source/webrtc/sdk/objc/base/RTCI420Buffer.h:
     39            * Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h:
     40            * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h:
     41            * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm:
     42            * Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm:
     43
    1442021-10-26  Alan Coon  <alancoon@apple.com>
    245
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm

    r278701 r287617  
    371371        [rtcFrameTypes addObject:@(RTCFrameType(RTCFrameTypeVideoFrameKey))];
    372372
    373     auto *videoFrame = [[RTCVideoFrame alloc] initWithBuffer:ToObjCVideoFrameBuffer(pixelBufferToFrame(pixelBuffer)) rotation:RTCVideoRotation(rotation) timeStampNs:timeStampNs];
     373    auto videoFrameBuffer = pixelBufferToFrame(pixelBuffer);
     374    auto *videoFrame = [[RTCVideoFrame alloc] initWithBuffer:ToObjCVideoFrameBuffer(videoFrameBuffer) rotation:RTCVideoRotation(rotation) timeStampNs:timeStampNs];
    374375    videoFrame.timeStamp = timeStamp;
    375376    auto *encoder = (__bridge WK_RTCLocalVideoH264H265Encoder *)(localEncoder);
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h

    r237075 r287617  
    2424- (rtc::scoped_refptr<webrtc::I420BufferInterface>)nativeI420Buffer;
    2525
     26#if defined(WEBRTC_WEBKIT_BUILD)
     27- (void)close;
     28#endif
    2629@end
    2730
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm

    r264517 r287617  
    110110}
    111111
     112#if defined(WEBRTC_WEBKIT_BUILD)
     113- (void)close {
     114  _i420Buffer = nullptr;
     115}
     116#endif
     117
    112118#pragma mark - Debugging
    113119
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h

    r252472 r287617  
    2626- (id<RTCI420Buffer>)toI420;
    2727
     28#if defined(WEBRTC_WEBKIT_BUILD)
     29- (void)close;
     30#endif
    2831@end
    2932
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h

    r248077 r287617  
    4949        withTempBuffer:(nullable uint8_t *)tmpBuffer;
    5050
     51#if defined(WEBRTC_WEBKIT_BUILD)
     52- (void)close;
     53#endif
    5154@end
    5255
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm

    r237075 r287617  
    346346}
    347347
     348#if defined(WEBRTC_WEBKIT_BUILD)
     349- (void)close {
     350    CVBufferRelease(_pixelBuffer);
     351    _pixelBuffer = nil;
     352}
     353#endif
     354
    348355@end
  • branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm

    r252472 r287617  
    2323  explicit ObjCI420FrameBuffer(id<RTCI420Buffer> frame_buffer)
    2424      : frame_buffer_(frame_buffer), width_(frame_buffer.width), height_(frame_buffer.height) {}
    25   ~ObjCI420FrameBuffer() override {}
     25  ~ObjCI420FrameBuffer() override {
     26#if defined(WEBRTC_WEBKIT_BUILD)
     27    [frame_buffer_ close];
     28#endif
     29  }
    2630
    2731  int width() const override { return width_; }
    … …  
    5256    : frame_buffer_(frame_buffer), width_(frame_buffer.width), height_(frame_buffer.height) {}
    5357
    54 ObjCFrameBuffer::~ObjCFrameBuffer() {}
     58ObjCFrameBuffer::~ObjCFrameBuffer() {
     59#if defined(WEBRTC_WEBKIT_BUILD)
     60  [frame_buffer_ close];
     61#endif
     62}
    5563
    5664VideoFrameBuffer::Type ObjCFrameBuffer::type() const {
Note: See TracChangeset for help on using the changeset viewer.