From 0145d8be1fa14da38bce1fae81c9c86c3c966f47 Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Mon, 25 Jul 2022 19:36:18 +0200 Subject: [PATCH 1/3] WIP: Ensure WasmTestRunner is exitting on a non-background thread --- .../tests/WasmTestRunner/WasmTestRunner.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/libraries/Common/tests/WasmTestRunner/WasmTestRunner.cs b/src/libraries/Common/tests/WasmTestRunner/WasmTestRunner.cs index 46a942a0f9cde1..0dfd8efb63eebc 100644 --- a/src/libraries/Common/tests/WasmTestRunner/WasmTestRunner.cs +++ b/src/libraries/Common/tests/WasmTestRunner/WasmTestRunner.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using Microsoft.DotNet.XHarness.TestRunners.Xunit; @@ -58,6 +59,23 @@ public static async Task Main(string[] args) IncludedMethods = includedMethods }; - return await runner.Run(); + int result = await runner.Run(); + + // if the execution doesn't finish on the main thread, the test runner + // doesn't exit correctly and the test time outs + await SwitchToMainThreadAsync(); + + return result; + } + + private static async Task SwitchToMainThreadAsync() + { + // TODO: is there a better way to do this? this works but it feels very hacky... + // it would be best to ensure switching threads in the mono driver so that it works for _all_ + // WASM programs running on Mono + while (Thread.CurrentThread.IsBackground) + { + await Task.Delay(1); + } } } From b101d8220f51cad6168d6c3614d234b2c58f667d Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Tue, 26 Jul 2022 12:03:04 +0200 Subject: [PATCH 2/3] Prevent infinite recursion --- src/mono/wasm/runtime/debug.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/mono/wasm/runtime/debug.ts b/src/mono/wasm/runtime/debug.ts index d27cd44e87ba9a..421694fe3d074e 100644 --- a/src/mono/wasm/runtime/debug.ts +++ b/src/mono/wasm/runtime/debug.ts @@ -473,6 +473,9 @@ export function mono_wasm_trace_logger(log_domain_ptr: CharPtr, log_level_ptr: C } export function setup_proxy_console(id: string, originalConsole: Console, origin: string): void { + const originalConsoleLog = originalConsole.log; + const originalConsoleError = originalConsole.error; + function proxyConsoleMethod(prefix: string, func: any, asJson: boolean) { return function (...args: any[]) { try { @@ -518,21 +521,20 @@ export function setup_proxy_console(id: string, originalConsole: Console, origin const consoleWebSocket = new WebSocket(consoleUrl); consoleWebSocket.onopen = function () { - originalConsole.log(`browser: [${id}] Console websocket connected.`); + originalConsoleLog(`browser: [${id}] Console websocket connected.`); }; consoleWebSocket.onerror = function (event) { - originalConsole.error(`[${id}] websocket error: ${event}`, event); + originalConsoleError(`[${id}] websocket error: ${event}`, event); }; consoleWebSocket.onclose = function (event) { - originalConsole.error(`[${id}] websocket closed: ${event}`, event); + originalConsoleError(`[${id}] websocket closed: ${event}`, event); }; const send = (msg: string) => { if (consoleWebSocket.readyState === WebSocket.OPEN) { consoleWebSocket.send(msg); - } - else { - originalConsole.log(msg); + } else { + originalConsoleLog(msg); } }; From c09ddc306b6df3c5af6cb0df08f29a6ac5012360 Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Tue, 26 Jul 2022 15:28:07 +0200 Subject: [PATCH 3/3] WIP: Try increasing pthread pool size --- src/mono/wasm/wasm.proj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/wasm/wasm.proj b/src/mono/wasm/wasm.proj index c20fb1f0c5ca2a..55ed32bcf7c195 100644 --- a/src/mono/wasm/wasm.proj +++ b/src/mono/wasm/wasm.proj @@ -124,7 +124,7 @@ <_EmccCommonFlags Condition="'$(WasmEnableSIMD)' == 'true'" Include="-msimd128" /> <_EmccCommonFlags Condition="'$(MonoWasmThreads)' == 'true'" Include="-s USE_PTHREADS=1" /> <_EmccLinkFlags Condition="'$(MonoWasmThreads)' == 'true'" Include="-Wno-pthreads-mem-growth" /> - <_EmccLinkFlags Condition="'$(MonoWasmThreads)' == 'true'" Include="-s PTHREAD_POOL_SIZE=2" /> + <_EmccLinkFlags Condition="'$(MonoWasmThreads)' == 'true'" Include="-s PTHREAD_POOL_SIZE=32" />