Bug 172954

Summary: REGRESSION(r217311): [GTK] Layout test fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html crashing or failing
Product: WebKit Reporter: Michael Catanzaro <mcatanzaro>
Component: WebKitGTKAssignee: Nobody <webkit-unassigned>
Status: RESOLVED DUPLICATE    
Severity: Normal CC: alex, bugs-noreply, clopez, eric.carlson, mcatanzaro, youennf
Priority: P2    
Version: Other   
Hardware: PC   
OS: Linux   
See Also: https://bugs.webkit.org/show_bug.cgi?id=169811

Description Michael Catanzaro 2017-06-05 20:44:48 PDT
fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html currently has pass/failure flaky expectations, but it's almost never failed on the GTK bot until r217317, after which it has several flaky failures. My guess is the first problematic commit is r217311 "[MediaStream] Allow transition from autoplay to play when a capture stream begins."

The crash backtrace looks like this:

Thread 1 (Thread 0x7f15644caf00 (LWP 29118)):
#0  g_type_check_instance_cast () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/glib-2.52.1/gobject/gtype.c:4057
#1  0x00007f1578050cbc in _ZN7WebCore30MediaPlayerPrivateGStreamerOwr27maybeHandleChangeMutedStateERNS_23MediaStreamTrackPrivateE ()
#2  0x00007f1578050fb8 in _ZN7WebCore30MediaPlayerPrivateGStreamerOwr4playEv ()
#3  0x00007f15776b48cb in _ZN7WebCore16HTMLMediaElement15updatePlayStateENS0_11UpdateStateE ()
#4  0x00007f15776b7d3d in _ZN7WebCore16HTMLMediaElement13setReadyStateENS_16MediaPlayerEnums10ReadyStateE ()
#5  0x00007f15776b8491 in _ZN7WebCore16HTMLMediaElement28mediaPlayerReadyStateChangedEPNS_11MediaPlayerE ()
#6  0x00007f15780517b5 in _ZN7WebCore30MediaPlayerPrivateGStreamerOwr4loadERNS_18MediaStreamPrivateE ()
#7  0x00007f1577af6fea in _ZN7WebCore11MediaPlayer23loadWithNextMediaEngineEPKNS_18MediaPlayerFactoryE ()
#8  0x00007f1577af7b82 in _ZN7WebCore11MediaPlayer4loadERNS_18MediaStreamPrivateE ()
#9  0x00007f15776b5e23 in _ZN7WebCore16HTMLMediaElement12loadResourceERKNS_3URLERNS_11ContentTypeERKN3WTF6StringE ()
#10 0x00007f15776b6a3f in _ZN3WTF8FunctionIFvvEE15CallableWrapperIZN7WebCore16HTMLMediaElement19selectMediaResourceEvEUlvE_E4callEv ()
#11 0x00007f1577a26051 in _ZN7WebCore14TaskDispatcherINS_5TimerEE15dispatchOneTaskEv ()
#12 0x00007f1577a26148 in _ZN7WebCore14TaskDispatcherINS_5TimerEE16sharedTimerFiredEv ()
#13 0x00007f1577a57f7a in _ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv ()
#14 0x00007f1571df4fda in _ZZN3WTF7RunLoop9TimerBaseC4ERS0_ENUlPvE_4_FUNES3_ () from /home/slave/webkitgtk/gtk-linux-64-release/build/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#15 0x00007f156fb965ca in g_main_dispatch () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/glib-2.52.1/glib/gmain.c:3212
#16 g_main_context_dispatch () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/glib-2.52.1/glib/gmain.c:3865
#17 0x00007f156fb96948 in g_main_context_iterate () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/glib-2.52.1/glib/gmain.c:3938
#18 0x00007f156fb96c62 in g_main_loop_run () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/glib-2.52.1/glib/gmain.c:4134
#19 0x00007f1571df53d0 in _ZN3WTF7RunLoop3runEv () from /home/slave/webkitgtk/gtk-linux-64-release/build/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#20 0x00007f15741f0242 in _ZN6WebKit16ChildProcessMainINS_10WebProcessENS_14WebProcessMainEEEiiPPc () from /home/slave/webkitgtk/gtk-linux-64-release/build/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#21 0x00007f156b4cb2b1 in __libc_start_main (main=0x7f15770855b0 <main>, argc=2, argv=0x7ffe64cb3048, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe64cb3038) at ../csu/libc-start.c:291
#22 0x00007f1577085aca in _start ()

There is a second issue here too. When it doesn't crash, it produces this stderr output:

"The glvideoflip GStreamer element isn't available. Video mirroring and rotation functionalities are thus disabled."

First record of this error is r217318, well before the bots were upgraded to Debian Stretch in r217598.
Comment 1 youenn fablet 2017-06-05 20:50:13 PDT
Thanks for the report.
As long as GTK port does not really support captureStream, these tests should be skipped.
If there is no plan to support it in GTK in a not-to-far future, maybe this feature should be compile-guarded
Comment 2 Michael Catanzaro 2017-06-06 08:10:53 PDT
Thanks Youenn. I expect our WebRTC folks, who are CCed, will decide how to best handle this.
Comment 3 Alejandro G. Castro 2017-06-06 23:29:30 PDT
Thanks for the comments.

The videoflip warning is something we added until we have the support in place in gstreamer, it is harmless.

I think we need to fix the crash for the moment, mediaplayer should not crash when changing the muted state, probably some variable it is not properly protected. But yeah we have to consider compile guard until we can check the support.
Comment 4 Alejandro G. Castro 2017-06-07 06:17:43 PDT
Just checked the problem, the source is not an OWR object and we are trying to render it wih the OWR player. We have to Skip the tests and add support for the canvas captureStream API. If we did not have time before the next release we should add a compilation guard in the API to avoid the crash because right now depends on MEDIA_STREAM.

I'm marking as duplicate this bug with the original one and adding the patch to Skip the tests, thanks for the comments.

*** This bug has been marked as a duplicate of bug 169811 ***
Comment 5 Alejandro G. Castro 2017-06-07 06:25:21 PDT
https://trac.webkit.org/r217881