Bug 219899 - REGRESSION [iOS] Flaky GPU Process crash under -[RTCVideoEncoderH264 destroyCompressionSession]
Summary: REGRESSION [iOS] Flaky GPU Process crash under -[RTCVideoEncoderH264 destroyC...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebRTC (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: youenn fablet
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2020-12-15 10:23 PST by Ryan Haddad
Modified: 2020-12-16 12:52 PST (History)
5 users (show)

See Also:


Attachments
crash log (115.26 KB, text/plain)
2020-12-15 10:23 PST, Ryan Haddad
no flags Details
Patch (6.60 KB, patch)
2020-12-15 10:47 PST, youenn fablet
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Ryan Haddad 2020-12-15 10:23:19 PST
Created attachment 416261 [details]
crash log

webrtc/video-rotation-no-cvo.html appears to be a flaky GPU process crash on iOS 

Thread 4 Crashed:: Dispatch queue: LibWebRTCCodecsQueue
0   com.apple.WebKit              	0x0000000101a11093 IPC::Connection::sendMessage(std::__1::unique_ptr<IPC::Encoder, std::__1::default_delete<IPC::Encoder> >, WTF::OptionSet<IPC::SendOption>) + 17 (Connection.cpp:453)
1   com.apple.WebKit              	0x0000000101ac263a bool IPC::Connection::send<Messages::LibWebRTCCodecs::CompletedEncoding>(Messages::LibWebRTCCodecs::CompletedEncoding&&, unsigned long long, WTF::OptionSet<IPC::SendOption>) + 84
2   com.apple.WebKit              	0x0000000101ac25e0 invocation function for block in WebKit::LibWebRTCCodecsProxy::createEncoder(WTF::ObjectIdentifier<WebKit::RTCEncoderIdentifierType>, WTF::String const&, WTF::Vector<std::__1::pair<WTF::String, WTF::String>, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc> const&, bool) + 62 (LibWebRTCCodecsProxy.mm:138)
3   libwebrtc.dylib               	0x0000000108210eb6 invocation function for block in webrtc::createLocalEncoder(webrtc::SdpVideoFormat const&, void (unsigned char const*, unsigned long, webrtc::WebKitEncodedFrameInfo const&) block_pointer) + 310
4   libwebrtc.dylib               	0x00000001080c68bb -[RTCVideoEncoderH264 frameWasEncoded:flags:sampleBuffer:codecSpecificInfo:width:height:renderTimeMs:timestamp:rotation:isKeyFrameRequired:] + 795 (RTCVideoEncoderH264.mm:937)
5   libwebrtc.dylib               	0x00000001080c628f (anonymous namespace)::compressionOutputCallback(void*, void*, int, unsigned int, opaqueCMSampleBuffer*) + 95 (RTCVideoEncoderH264.mm:186)
6   com.apple.VideoToolbox        	0x0000000113dad300 VTEncoderSessionEmitEncodedFrame + 324
7   H264SW.videocodec             	0x0000000123807661 H264VideoEncoder_EmitEncodedFrame + 1090
8   H264SW.videocodec             	0x00000001238071c4 H264VideoEncoder_CompleteFrames + 308
9   H264SW.videocodec             	0x000000012380474f H264VideoEncoder_Invalidate + 71
10  com.apple.VideoToolbox        	0x0000000113da5a52 VTCompressionSessionInvalidate + 90
11  libwebrtc.dylib               	0x00000001080c63d7 -[RTCVideoEncoderH264 destroyCompressionSession] + 23 (RTCVideoEncoderH264.mm:811)
12  libwebrtc.dylib               	0x00000001080c5c96 -[RTCVideoEncoderH264 releaseEncoder] + 22 (RTCVideoEncoderH264.mm:598)
13  libwebrtc.dylib               	0x0000000108210f37 webrtc::releaseLocalEncoder(void*) + 23 (WebKitEncoder.mm:354)
14  com.apple.WebKit              	0x0000000101ac28b8 WebKit::LibWebRTCCodecsProxy::releaseEncoder(WTF::ObjectIdentifier<WebKit::RTCEncoderIdentifierType>) + 40 (LibWebRTCCodecsProxy.mm:148)
15  com.apple.WebKit              	0x0000000101ab0b71 WebKit::LibWebRTCCodecsProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) + 567 (LibWebRTCCodecsProxyMessageReceiver.cpp:77)
16  libdispatch.dylib             	0x0000000104e6632f _dispatch_call_block_and_release + 12
17  libdispatch.dylib             	0x0000000104e67508 _dispatch_client_callout + 8
18  libdispatch.dylib             	0x0000000104e6d3f9 _dispatch_lane_serial_drain + 715
19  libdispatch.dylib             	0x0000000104e6df74 _dispatch_lane_invoke + 403
20  libdispatch.dylib             	0x0000000104e78577 _dispatch_workloop_worker_thread + 782
21  libsystem_pthread.dylib       	0x0000000105310a3d _pthread_wqthread + 290
22  libsystem_pthread.dylib       	0x000000010530fb77 start_wqthread + 15


https://results.webkit.org/?suite=layout-tests&test=webrtc%2Fvideo-rotation-no-cvo.html
Comment 1 Radar WebKit Bug Importer 2020-12-15 10:23:40 PST
<rdar://problem/72347652>
Comment 2 Ryan Haddad 2020-12-15 10:31:19 PST
I think the first crash on iOS appeared at r270416, but since this is flaky it is probably related to something before that: https://trac.webkit.org/log/webkit/?action=stop_on_copy&mode=stop_on_copy&rev=270416&stop_rev=270402+&limit=100&verbose=on

CC'ing Chris because there were a couple of GPU Process related IPC changes in there, but I have not tried reproducing this locally to bisect.
Comment 3 youenn fablet 2020-12-15 10:46:56 PST
This is a fallout of moving IPC handling in background threads.
Comment 4 youenn fablet 2020-12-15 10:47:29 PST
Created attachment 416263 [details]
Patch
Comment 5 EWS 2020-12-16 12:52:33 PST
Committed r270905: <https://trac.webkit.org/changeset/270905>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 416263 [details].