Bug 208368
Summary: | [GTK] imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.worker.html is a flaky failure | ||
---|---|---|---|
Product: | WebKit | Reporter: | Diego Pino <dpino> |
Component: | New Bugs | Assignee: | Nobody <webkit-unassigned> |
Status: | NEW | ||
Severity: | Normal | CC: | bugs-noreply, lmoura |
Priority: | P2 | ||
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
See Also: | https://bugs.webkit.org/show_bug.cgi?id=211614 |
Diego Pino
* imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.worker.html [ Failure Pass ]
The test has been flaky since:
r252470 NOERROR
[r252471-r252674] UNKNOWN
r252675 NOERROR
[r252676-r252816] UNKNOWN
r252817 TEXT PASS (Expected: PASS)
Diff:
--- /home/igalia/dpino/workspace/webkit-gtk/layout-test-results/imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.worker-expected.txt
+++ /home/igalia/dpino/workspace/webkit-gtk/layout-test-results/imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.worker-actual.txt
@@ -1,3 +1,5 @@
+
+Harness Error (TIMEOUT), message = null
PASS WebAssembly.instantiate(module): Non-object imports argument: null
PASS WebAssembly.instantiate(module): Non-object imports argument: true
@@ -90,37 +92,37 @@
PASS WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: 0.1
PASS WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: NaN
PASS WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: object "[object Object]"
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: undefined
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: null
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: true
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: ""
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: symbol "Symbol()"
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: plain object
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: WebAssembly.Global
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: WebAssembly.Global.prototype
-PASS WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype)
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: undefined
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: null
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: true
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: ""
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: symbol "Symbol()"
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: 1
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: 0.1
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: NaN
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: plain object
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: WebAssembly.Memory
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: WebAssembly.Memory.prototype
-PASS WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: Object.create(WebAssembly.Memory.prototype)
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: undefined
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: null
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: true
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: ""
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: symbol "Symbol()"
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: 1
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: 0.1
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: NaN
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: plain object
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: WebAssembly.Table
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: WebAssembly.Table.prototype
-PASS WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: Object.create(WebAssembly.Table.prototype)
+TIMEOUT WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: undefined Test timed out
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: null
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: true
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: ""
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: symbol "Symbol()"
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: plain object
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: WebAssembly.Global
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: WebAssembly.Global.prototype
+NOTRUN WebAssembly.instantiate(buffer): Importing a global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype)
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: undefined
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: null
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: true
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: ""
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: symbol "Symbol()"
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: 1
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: 0.1
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: NaN
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: plain object
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: WebAssembly.Memory
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: WebAssembly.Memory.prototype
+NOTRUN WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: Object.create(WebAssembly.Memory.prototype)
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: undefined
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: null
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: true
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: ""
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: symbol "Symbol()"
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: 1
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: 0.1
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: NaN
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: plain object
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: WebAssembly.Table
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: WebAssembly.Table.prototype
+NOTRUN WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: Object.create(WebAssembly.Table.prototype)
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Lauro Moura
imported/w3c/web-platform-tests/wasm/webapi/instantiateStreaming-bad-imports.any.worker.html
This test was updated and expected pass since r271993, but it's flaky with the same behavior.
Maybe related bug211614 (another wasm worker flakiness).
Lauro Moura
After some investigation, this seems to be some issue related to timer callbacks being called from different run loops (or something like that).
The Wasm.instantiate (JSWebAssembly.cpp::instantiate() call compiles the code asynchronously, scheduling a timer job to resolve the promise as soon as possible (through vm.deferredWorkTimer->scheduleWorkSoon(...).
Normal flow:
Scheduling:
1 DeferredWorkTimer.cpp::scheduleWorkSoon()
1.1 No scheduled work. Timer scheduled immediately through JSRunLoopTimer.cpp::Manager.scheduleTimer()
1.1.1 scheduleTimer() then associate this timer with the PerVMData for the current VM/runLoop() of this timer.
1.1.2 schedule a oneShot to trigger the timer through the PerVMData manager.
Firing timer:
1 JSRunLoopTimer::Manager::timerDidFire()
1.1 Iterate through PerVMData items, skipping those from a different RunLoop than RunLoop::current()
1.2 For each VM, take the timers that should be fired and trigger them.
Back to the test, in a normal run, the timerDidFire() call immediately after scheduling is always called from the same RunLoop that registered it and everything follows happily.
When the timeout occurs - in comparison to a clean run - the timerDidFire() seems to be called from a different RunLoop::current() than the one when the timer callback was scheduled, so the instantiate() timers are being ignored by the runloop check.
Not sure why this is happending or what would be the proper fix.
As this does not seems to be something wasm-specific, this could be the cause of other worker tests flakiness, no?