Bug 250656 - [GStreamer] Fix a failure of fast/speechsynthesis/voices-non-mock.html
Summary: [GStreamer] Fix a failure of fast/speechsynthesis/voices-non-mock.html
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKitGTK (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: ChangSeok Oh
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-15 15:52 PST by ChangSeok Oh
Modified: 2023-02-03 10:15 PST (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description ChangSeok Oh 2023-01-15 15:52:11 PST
SSIA.
Comment 1 ChangSeok Oh 2023-01-15 20:40:27 PST
20:34:53.697 2 summarizing results
20:34:53.697 2 Test timing:
20:34:53.697 2    63.08 total testing time
20:34:53.697 2 
20:34:53.697 2 Thread timing:
20:34:53.697 2       worker/0:    13 tests,  34.97 secs
20:34:53.697 2     34.97 cumulative,   5.00 optimal
20:34:53.697 2 
20:34:53.697 2 PER TEST TIME IN TESTSHELL (seconds):
20:34:53.697 2   Median:           0.133
20:34:53.697 2   Mean:             2.637
20:34:53.697 2   90th percentile:  1.020
20:34:53.697 2   99th percentile: 31.310
20:34:53.697 2   Standard dev:     7.953
20:34:53.697 2 
20:34:53.697 2 
20:34:53.697 2 10 slowest tests that are not marked as SLOW and did not timeout/crash:
20:34:53.697 2   fast/speechsynthesis/speech-synthesis-speak-empty-string.html took 1.0 seconds
20:34:53.697 2   fast/speechsynthesis/speech-synthesis-boundary-events.html took 0.9 seconds
20:34:53.697 2   fast/speechsynthesis/speech-synthesis-pause-resume.html took 0.2 seconds
20:34:53.697 2   fast/speechsynthesis/speech-synthesis-utterance-uses-voice.html took 0.2 seconds
20:34:53.697 2   fast/speechsynthesis/speech-synthesis-gc-utterance-crash.html took 0.2 seconds
20:34:53.698 2   fast/speechsynthesis/speech-synthesis-speak.html took 0.2 seconds
20:34:53.698 2   fast/speechsynthesis/speech-synthesis-elapsed-time.html took 0.1 seconds
20:34:53.698 2   fast/speechsynthesis/speech-synthesis-cancel-crash.html took 0.1 seconds
20:34:53.698 2   fast/speechsynthesis/speech-synthesis-cancel.html took 0.1 seconds
20:34:53.698 2   fast/speechsynthesis/speech-synthesis-voices.html took 0.1 seconds
20:34:53.698 2 
20:34:53.698 2 Tests marked as SLOW:
20:34:53.698 2 
20:34:53.698 2 Tests that timed out or crashed:
20:34:53.698 2   fast/speechsynthesis/speech-synthesis-real-client-version.html took 31.3 seconds
20:34:53.698 2 
20:34:53.698 2 Time to process slowest subdirectories:
20:34:53.698 2   all_tests took 35.0 seconds to run 13 tests.
20:34:53.698 2 
20:34:53.698 2 
20:34:53.698 2 22 tests ran as expected, 4 didn't:
20:34:53.698 2 
20:34:53.698 2 Writing JSON files in /app/webkit/WebKitBuild/Release/layout-test-results.
20:34:53.699 2 Finished writing JSON file for the test results server.
20:34:53.702 2 Testing completed, Exit status: 2
=> Results: 22/26 tests passed (84.6%)

=> Tests to be fixed (2):
      1 crashes                  (50.0%)

=> Tests that will only be fixed if they crash (WONTFIX) (0):


Regressions: Unexpected crashes (1)
  fast/speechsynthesis/speech-synthesis-real-client-version.html [ Crash ]

Regressions: Unexpected text-only failures (1)
  fast/speechsynthesis/voices-non-mock.html [ Failure ]
Comment 2 Philippe Normand 2023-01-16 02:27:02 PST
Can you post the crash backtrace?
Comment 3 ChangSeok Oh 2023-01-22 23:52:16 PST
(In reply to Philippe Normand from comment #2)
> Can you post the crash backtrace?

Sure.

#0  0x00007ffff1ecbdd8 in WTF::String::tryGetUTF8(WTF::ConversionMode) const ()           
   from target:/app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.1.so.0          
#1  0x00007ffff1ecbea0 in WTF::String::utf8(WTF::ConversionMode) const ()                 
   from target:/app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.1.so.0          
#2  0x00007ffff51985ea in webKitFliteSrcSetUtterance(_WebKitFliteSrc*, WTF::String const&, WebCore::PlatformSpeechSynthesisVoice const&) () from target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0
#3  0x00007ffff51914e8 in WebCore::GstSpeechSynthesisWrapper::speakUtterance(WTF::RefPtr<WebCore::PlatformSpeechSynthesisUtterance, WTF::RawPtrTraits<WebCore::PlatformSpeechSynthesisUtterance>, WTF::DefaultRefDerefTraits<WebCore::PlatformSpeechSynthesisUtterance> >&&) [clone .part.0] ()
   from target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0                 
#4  0x00007ffff51923f5 in WebCore::PlatformSpeechSynthesizer::speak(WTF::RefPtr<WebCore::PlatformSpeechSynthesisUtterance, WTF::RawPtrTraits<WebCore::PlatformSpeechSynthesisUtterance>, WTF::DefaultRefDerefTraits<WebCore::PlatformSpeechSynthesisUtterance> >&&) ()
   from target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0                 
#5  0x00007ffff5f5f312 in WebCore::SpeechSynthesis::startSpeakingImmediately(WebCore::SpeechSynthesisUtterance&) () from target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0
#6  0x00007ffff5b39f98 in WebCore::jsSpeechSynthesisPrototypeFunction_speak(JSC::JSGlobalObject*, JSC::CallFrame*) () from target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0
#7  0x00007fff90008038 in ?? ()                                                 
#8  0x00007fffffffc180 in ?? ()                                                           
#9  0x00007ffff093a5e4 in js_trampoline_op_call ()                              
   from target:/app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.1.so.0                          
#10 0x0000000000000000 in ?? ()

The fix is coming. But we need to discuss the failure for fast/speechsynthesis/voices-non-mock.html

The GTK/WPE fails in shouldBeTrue("voiceCount > 20"). This means we need more than 20 voices to pass the test. Currently, GTK/WPE ports have 4 voices. I don't know why 20 here though, a possible fix is to make it shouldBeTrue("voiceCount > 0")? Any thought?
Comment 4 chris fleizach 2023-01-23 00:31:59 PST
(In reply to ChangSeok Oh from comment #3)
> (In reply to Philippe Normand from comment #2)
> > Can you post the crash backtrace?
> 
> Sure.
> 
> #0  0x00007ffff1ecbdd8 in WTF::String::tryGetUTF8(WTF::ConversionMode) const
> ()           
>    from
> target:/app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.1.so.0    
> 
> #1  0x00007ffff1ecbea0 in WTF::String::utf8(WTF::ConversionMode) const ()   
> 
>    from
> target:/app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.1.so.0    
> 
> #2  0x00007ffff51985ea in webKitFliteSrcSetUtterance(_WebKitFliteSrc*,
> WTF::String const&, WebCore::PlatformSpeechSynthesisVoice const&) () from
> target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0
> #3  0x00007ffff51914e8 in
> WebCore::GstSpeechSynthesisWrapper::speakUtterance(WTF::RefPtr<WebCore::
> PlatformSpeechSynthesisUtterance,
> WTF::RawPtrTraits<WebCore::PlatformSpeechSynthesisUtterance>,
> WTF::DefaultRefDerefTraits<WebCore::PlatformSpeechSynthesisUtterance> >&&)
> [clone .part.0] ()
>    from target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0   
> 
> #4  0x00007ffff51923f5 in
> WebCore::PlatformSpeechSynthesizer::speak(WTF::RefPtr<WebCore::
> PlatformSpeechSynthesisUtterance,
> WTF::RawPtrTraits<WebCore::PlatformSpeechSynthesisUtterance>,
> WTF::DefaultRefDerefTraits<WebCore::PlatformSpeechSynthesisUtterance> >&&) ()
>    from target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0   
> 
> #5  0x00007ffff5f5f312 in
> WebCore::SpeechSynthesis::startSpeakingImmediately(WebCore::
> SpeechSynthesisUtterance&) () from
> target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0
> #6  0x00007ffff5b39f98 in
> WebCore::jsSpeechSynthesisPrototypeFunction_speak(JSC::JSGlobalObject*,
> JSC::CallFrame*) () from
> target:/app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0
> #7  0x00007fff90008038 in ?? ()                                             
> 
> #8  0x00007fffffffc180 in ?? ()                                             
> 
> #9  0x00007ffff093a5e4 in js_trampoline_op_call ()                          
> 
>    from
> target:/app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.1.so.0    
> 
> #10 0x0000000000000000 in ?? ()
> 
> The fix is coming. But we need to discuss the failure for
> fast/speechsynthesis/voices-non-mock.html
> 
> The GTK/WPE fails in shouldBeTrue("voiceCount > 20"). This means we need
> more than 20 voices to pass the test. Currently, GTK/WPE ports have 4
> voices. I don't know why 20 here though, a possible fix is to make it
> shouldBeTrue("voiceCount > 0")? Any thought?

That was fairly specific for Apple platforms. The number is irrelevant as long as you can confirm you're getting something expected. If, on Mac, we only got 4 voices, that would be a regression...
Comment 5 Philippe Normand 2023-01-23 00:37:54 PST
The value should be queried through a new Internals method then. There we can handle the various platforms and what they expect.
Comment 6 ChangSeok Oh 2023-01-23 18:12:32 PST
(In reply to Philippe Normand from comment #5)
> The value should be queried through a new Internals method then. There we
> can handle the various platforms and what they expect.

O.K. It sounds like more effort than expected. Let's spin off the crash into a separate bug [1]. I will fix it first.

[1] https://bugs.webkit.org/show_bug.cgi?id=251056
Comment 7 ChangSeok Oh 2023-01-31 00:54:11 PST
(In reply to Philippe Normand from comment #5)
> The value should be queried through a new Internals method then. There we
> can handle the various platforms and what they expect.

I thought about adding a new method to the Internals a bit. Do we expect the new method returns a hard-coded value of the expected voice count or available voice count on the testing platform? For the latter, adding a new method is pointless I think. Because the new method returns the same value of window.speechSynthesis.getVoices().length in the test.

If the purpose of the test checks if speechSynthesis is properly initialized with some voices, I think testing shouldBeTrue("voiceCount > 0") should be enough for all platforms. Any thought?
Comment 8 Philippe Normand 2023-01-31 03:39:04 PST
> If the purpose of the test checks if speechSynthesis is properly initialized with some voices, I think testing shouldBeTrue("voiceCount > 0") should be enough for all platforms. Any thought?

IIUC Chris's comment this kind of test wouldn't be sufficient for Apple platforms. Maybe I misunderstood...
Comment 9 ChangSeok Oh 2023-01-31 12:14:22 PST
(In reply to Philippe Normand from comment #8)
> > If the purpose of the test checks if speechSynthesis is properly initialized with some voices, I think testing shouldBeTrue("voiceCount > 0") should be enough for all platforms. Any thought?
> 
> IIUC Chris's comment this kind of test wouldn't be sufficient for Apple
> platforms. Maybe I misunderstood...

Well, then we go to a route of adding an Internals method that returns a hard-coded value for the testing platform.
Comment 10 ChangSeok Oh 2023-01-31 22:03:57 PST
Pull request: https://github.com/WebKit/WebKit/pull/9429
Comment 11 ChangSeok Oh 2023-02-01 10:04:46 PST
Pull request: https://github.com/WebKit/WebKit/pull/9461
Comment 12 EWS 2023-02-03 10:15:34 PST
Committed 259820@main (3aad9165b15d): <https://commits.webkit.org/259820@main>

Reviewed commits have been landed. Closing PR #9429 and removing active labels.