From 2d27a335e3ca85934cd904ba9cc574536e28d0a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Thu, 18 Aug 2022 12:35:19 +0200 Subject: [PATCH 1/5] Check window exists in the withApplicationArgumentsFromQuery. --- src/mono/wasm/runtime/run-outer.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/mono/wasm/runtime/run-outer.ts b/src/mono/wasm/runtime/run-outer.ts index 189671d6d90545..b01e2f0141c3ef 100644 --- a/src/mono/wasm/runtime/run-outer.ts +++ b/src/mono/wasm/runtime/run-outer.ts @@ -220,13 +220,17 @@ class HostBuilder implements DotnetHostBuilder { withApplicationArgumentsFromQuery(): DotnetHostBuilder { try { - if (typeof globalThis.URLSearchParams != "undefined") { - const params = new URLSearchParams(window.location.search); - const values = params.getAll("arg"); - return this.withApplicationArguments(...values); + if (!globalThis.window) { + throw new Error("Missing window to the query parameters from"); } - - throw new Error("URLSearchParams is supported"); + + if (typeof globalThis.URLSearchParams == "undefined") { + throw new Error("URLSearchParams is supported"); + } + + const params = new URLSearchParams(window.location.search); + const values = params.getAll("arg"); + return this.withApplicationArguments(...values); } catch (err) { mono_exit(1, err); throw err; From a530c57cd6ac8d52e06ccb0cc09d4b35e54ac6a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Thu, 18 Aug 2022 13:13:32 +0200 Subject: [PATCH 2/5] Comment about withModuleConfig use. --- src/mono/sample/wasm/browser/main.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mono/sample/wasm/browser/main.js b/src/mono/sample/wasm/browser/main.js index afe23356a73951..672dbe6ba39f1c 100644 --- a/src/mono/sample/wasm/browser/main.js +++ b/src/mono/sample/wasm/browser/main.js @@ -13,6 +13,10 @@ try { .withConsoleForwarding() .withElementOnExit() .withModuleConfig({ + // This whole 'withModuleConfig' is for demo purposes only. + // It is prefered to use specific 'with***' methods instead. + // Only when such method is doesn't exist, fallback to moduleConfig. + configSrc: "./mono-config.json", onConfigLoaded: (config) => { // This is called during emscripten `dotnet.wasm` instantiation, after we fetched config. From 8541d1b0c4cb9074b0bc166859148e9732107729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Thu, 18 Aug 2022 16:18:46 +0200 Subject: [PATCH 3/5] Rewrite samples and tests. --- src/mono/sample/mbr/browser/main.js | 15 ++++---- .../sample/wasm/browser-bench/frame-main.js | 38 +++++++++---------- src/mono/sample/wasm/browser-bench/main.js | 17 +++++---- .../sample/wasm/browser-eventpipe/main.js | 6 +-- .../browser-nextjs/components/deepThought.js | 34 ++++++++--------- .../sample/wasm/browser-profile/README.md | 20 +++++----- src/mono/sample/wasm/browser-profile/main.js | 24 ++++++------ src/mono/sample/wasm/browser-threads/main.js | 29 +++++++------- src/mono/sample/wasm/browser-webpack/app.js | 6 +-- .../wasm/browser-webpack/package-lock.json | 2 +- src/mono/sample/wasm/browser/main.js | 4 +- src/mono/sample/wasm/console-node-ts/main.ts | 3 ++ src/mono/sample/wasm/node-webpack/app.js | 7 +--- .../wasm/node-webpack/package-lock.json | 2 +- .../WebAssembly/Browser/HotReload/Program.cs | 5 ++- .../WebAssembly.Browser.HotReload.Test.csproj | 6 +++ .../WebAssembly/Browser/HotReload/main.js | 20 ++++++---- .../Browser/RuntimeConfig/Program.cs | 5 ++- ...Assembly.Browser.RuntimeConfig.Test.csproj | 6 +++ .../WebAssembly/Browser/RuntimeConfig/main.js | 7 ++-- 20 files changed, 138 insertions(+), 118 deletions(-) diff --git a/src/mono/sample/mbr/browser/main.js b/src/mono/sample/mbr/browser/main.js index 2b488975a5b327..352fc9e960b7ba 100644 --- a/src/mono/sample/mbr/browser/main.js +++ b/src/mono/sample/mbr/browser/main.js @@ -1,12 +1,13 @@ -import createDotnetRuntime from './dotnet.js' +import { dotnet } from './dotnet.js' try { - const { getAssemblyExports } = await createDotnetRuntime({ - configSrc: "./mono-config.json", - onConfigLoaded: (config) => { - config.environmentVariables["DOTNET_MODIFIABLE_ASSEMBLIES"] = "debug"; - }, - }); + const { getAssemblyExports } = await dotnet + .withModuleConfig({ + onConfigLoaded: (config) => { + config.environmentVariables["DOTNET_MODIFIABLE_ASSEMBLIES"] = "debug"; + } + }) + .create(); const exports = await getAssemblyExports("WasmDelta.dll"); const update = exports.Sample.Test.Update; diff --git a/src/mono/sample/wasm/browser-bench/frame-main.js b/src/mono/sample/wasm/browser-bench/frame-main.js index 92be8c802ea9c1..16431d0e2c8b67 100644 --- a/src/mono/sample/wasm/browser-bench/frame-main.js +++ b/src/mono/sample/wasm/browser-bench/frame-main.js @@ -3,7 +3,7 @@ "use strict"; -import createDotnetRuntime from './dotnet.js' +import { dotnet } from './dotnet.js' class FrameApp { async init({ getAssemblyExports }) { @@ -30,24 +30,24 @@ try { mute = true; } - const runtime = await createDotnetRuntime({ - disableDotnet6Compatibility: true, - configSrc: "./mono-config.json", - printErr: function () { - if (!mute) { - console.error(...arguments); - } - }, - onConfigLoaded: (config) => { - if (window.parent != window) { - window.parent.resolveAppStartEvent("onConfigLoaded"); - } - // config.diagnosticTracing = true; - }, - onAbort: (error) => { - wasm_exit(1, error); - }, - }); + const runtime = await dotnet + .withModuleConfig({ + printErr: function () { + if (!mute) { + console.error(...arguments); + } + }, + onConfigLoaded: (config) => { + if (window.parent != window) { + window.parent.resolveAppStartEvent("onConfigLoaded"); + } + // config.diagnosticTracing = true; + }, + onAbort: (error) => { + wasm_exit(1, error); + }, + }) + .create(); if (window.parent != window) { window.parent.resolveAppStartEvent("onDotnetReady"); diff --git a/src/mono/sample/wasm/browser-bench/main.js b/src/mono/sample/wasm/browser-bench/main.js index 61fa696d3bc11c..4281ec06cf608b 100644 --- a/src/mono/sample/wasm/browser-bench/main.js +++ b/src/mono/sample/wasm/browser-bench/main.js @@ -3,7 +3,7 @@ "use strict"; -import createDotnetRuntime from './dotnet.js' +import { dotnet } from './dotnet.js' let runBenchmark; let setTasks; @@ -94,13 +94,14 @@ try { globalThis.mainApp.FrameReachedManaged = globalThis.mainApp.frameReachedManaged.bind(globalThis.mainApp); globalThis.mainApp.PageShow = globalThis.mainApp.pageShow.bind(globalThis.mainApp); - const runtime = await createDotnetRuntime({ - disableDotnet6Compatibility: true, - configSrc: "./mono-config.json", - onAbort: (error) => { - wasm_exit(1, error); - } - }); + const runtime = await dotnet + .withModuleConfig({ + onAbort: (error) => { + wasm_exit(1, error); + } + }) + .create(); + await mainApp.init(runtime); } catch (err) { diff --git a/src/mono/sample/wasm/browser-eventpipe/main.js b/src/mono/sample/wasm/browser-eventpipe/main.js index aef0806c0efa50..ab31c7d55a4bed 100644 --- a/src/mono/sample/wasm/browser-eventpipe/main.js +++ b/src/mono/sample/wasm/browser-eventpipe/main.js @@ -1,4 +1,4 @@ -import createDotnetRuntime from "./dotnet.js"; +import { dotnet } from "./dotnet.js"; const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) @@ -41,9 +41,7 @@ function getOnClickHandler(startWork, stopWork, getIterationsDone) { } async function main() { - const { MONO, Module, getAssemblyExports } = await createDotnetRuntime({ - configSrc: "./mono-config.json", - }); + const { MONO, Module, getAssemblyExports } = await dotnet.create() globalThis.__Module = Module; globalThis.MONO = MONO; diff --git a/src/mono/sample/wasm/browser-nextjs/components/deepThought.js b/src/mono/sample/wasm/browser-nextjs/components/deepThought.js index 48c97a41e40921..11d8b53a416af0 100644 --- a/src/mono/sample/wasm/browser-nextjs/components/deepThought.js +++ b/src/mono/sample/wasm/browser-nextjs/components/deepThought.js @@ -1,29 +1,29 @@ import { useState, useEffect } from 'react' -import createDotnetRuntime from '@microsoft/dotnet-runtime' +import { dotnet } from '@microsoft/dotnet-runtime' let dotnetRuntimePromise = undefined; -let meaningFunction = undefined; async function createRuntime() { try { const response = await fetch('dotnet.wasm'); const arrayBuffer = await response.arrayBuffer(); - return createDotnetRuntime({ - configSrc: "./mono-config.json", - disableDotnet6Compatibility: true, - locateFile: (path, prefix) => { - return '/' + path; - }, - instantiateWasm: async (imports, successCallback) => { - try { - const arrayBufferResult = await WebAssembly.instantiate(arrayBuffer, imports); - successCallback(arrayBufferResult.instance); - } catch (err) { - console.error(err); - throw err; + + return dotnet. + withModuleConfig({ + locateFile: (path, prefix) => { + return '/' + path; + }, + instantiateWasm: async (imports, successCallback) => { + try { + const arrayBufferResult = await WebAssembly.instantiate(arrayBuffer, imports); + successCallback(arrayBufferResult.instance); + } catch (err) { + console.error(err); + throw err; + } } - } - }); + }) + .create(); } catch (err) { console.error(err); throw err; diff --git a/src/mono/sample/wasm/browser-profile/README.md b/src/mono/sample/wasm/browser-profile/README.md index 46e9802e47ff4a..e077e9af9e4010 100644 --- a/src/mono/sample/wasm/browser-profile/README.md +++ b/src/mono/sample/wasm/browser-profile/README.md @@ -13,16 +13,18 @@ public static void StopProfile(){} 2. Initialize the profiler in the main javascript (e.g. main.js) ``` -await createDotnetRuntime({ - onConfigLoaded: () => { - if (config.enableProfiler) { - config.aotProfilerOptions = { - write_at: "", - send_to: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" +await dotnet + .withModuleConfig({ + onConfigLoaded: () => { + if (config.enableProfiler) { + config.aotProfilerOptions = { + write_at: "", + send_to: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" + } } - } - }, -}); + }, + }) + .create(); ``` 3. Call the `write_at` method at the end of the app, either in C# or in JS. To call the `write_at` method in JS, make use of bindings: diff --git a/src/mono/sample/wasm/browser-profile/main.js b/src/mono/sample/wasm/browser-profile/main.js index d9a5969671176b..b90a8e9101f9d7 100644 --- a/src/mono/sample/wasm/browser-profile/main.js +++ b/src/mono/sample/wasm/browser-profile/main.js @@ -1,4 +1,4 @@ -import createDotnetRuntime from './dotnet.js' +import { dotnet } from './dotnet.js' function wasm_exit(exit_code, reason) { /* Set result in a tests_done element, to be read by xharness */ @@ -29,19 +29,19 @@ function saveProfile(aotProfileData) { } let enableProfiler = false try { - const { INTERNAL, getAssemblyExports: getAssemblyExports } = await createDotnetRuntime({ - configSrc: "./mono-config.json", - disableDotnet6Compatibility: true, - onConfigLoaded: (config) => { - if (config.enableProfiler) { - enableProfiler = true; - config.aotProfilerOptions = { - writeAt: "Sample.Test::StopProfile", - sendTo: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" + const { INTERNAL, getAssemblyExports: getAssemblyExports } = await dotnet + .withModuleConfig({ + onConfigLoaded: (config) => { + if (config.enableProfiler) { + enableProfiler = true; + config.aotProfilerOptions = { + writeAt: "Sample.Test::StopProfile", + sendTo: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" + } } } - } - }); + }) + .create(); console.log("not ready yet") const exports = await getAssemblyExports("Wasm.BrowserProfile.Sample"); const testMeaning = exports.Sample.Test.TestMeaning; diff --git a/src/mono/sample/wasm/browser-threads/main.js b/src/mono/sample/wasm/browser-threads/main.js index 3f52c29dffdf72..4fe4a1e6ae754a 100644 --- a/src/mono/sample/wasm/browser-threads/main.js +++ b/src/mono/sample/wasm/browser-threads/main.js @@ -1,4 +1,4 @@ -import createDotnetRuntime from './dotnet.js' +import { dotnet } from './dotnet.js' function wasm_exit(exit_code, reason) { /* Set result in a tests_done element, to be read by xharness in runonly CI test */ @@ -61,10 +61,12 @@ function onInputValueChanged(exports, inputElement) { try { const inputElement = document.getElementById("inputN"); - const { runtimeBuildInfo, setModuleImports, getAssemblyExports, runMain } = await createDotnetRuntime(() => { - console.log('user code in createDotnetRuntime callback'); - return { - configSrc: "./mono-config.json", + const { setModuleImports, getAssemblyExports, runMain } = await dotnet + .withModuleConfig({ + // This whole 'withModuleConfig' is for demo purposes only. + // It is prefered to use specific 'with***' methods instead. + // Only when such method is doesn't exist, fallback to moduleConfig. + onConfigLoaded: (config) => { // This is called during emscripten `dotnet.wasm` instantiation, after we fetched config. console.log('user code Module.onConfigLoaded'); @@ -83,15 +85,16 @@ try { console.log('user code Module.onDotnetReady'); }, postRun: () => { console.log('user code Module.postRun'); }, - } - }); - console.log('user code after createDotnetRuntime()'); + }) + .create(); + + console.log('user code after dotnet.create'); setModuleImports("main.js", { - Sample: { - Test: { - updateProgress - } - } + Sample: { + Test: { + updateProgress + } + } }); const exports = await getAssemblyExports(assemblyName); diff --git a/src/mono/sample/wasm/browser-webpack/app.js b/src/mono/sample/wasm/browser-webpack/app.js index 3fab9331bcc2a9..334e3350d41af1 100644 --- a/src/mono/sample/wasm/browser-webpack/app.js +++ b/src/mono/sample/wasm/browser-webpack/app.js @@ -1,11 +1,9 @@ -import createDotnetRuntime from '@microsoft/dotnet-runtime' +import { dotnet } from '@microsoft/dotnet-runtime' import _ from 'underscore' async function dotnetMeaning() { try { - const { getAssemblyExports } = await createDotnetRuntime({ - configSrc: "./mono-config.json" - }); + const { getAssemblyExports } = await dotnet.create(); const exports = await getAssemblyExports("Wasm.Browser.WebPack.Sample"); const meaningFunction = exports.Sample.Test.Main; diff --git a/src/mono/sample/wasm/browser-webpack/package-lock.json b/src/mono/sample/wasm/browser-webpack/package-lock.json index 40bd39aeb62e70..99efcaa683e1aa 100644 --- a/src/mono/sample/wasm/browser-webpack/package-lock.json +++ b/src/mono/sample/wasm/browser-webpack/package-lock.json @@ -35,7 +35,7 @@ }, "bin/dotnet-runtime": { "name": "@microsoft/dotnet-runtime", - "version": "7.0.0-dev", + "version": "8.0.0-dev", "license": "MIT", "devDependencies": { "@rollup/plugin-typescript": "8.3.3", diff --git a/src/mono/sample/wasm/browser/main.js b/src/mono/sample/wasm/browser/main.js index 672dbe6ba39f1c..c8527488177573 100644 --- a/src/mono/sample/wasm/browser/main.js +++ b/src/mono/sample/wasm/browser/main.js @@ -41,9 +41,7 @@ try { // at this point both emscripten and monoVM are fully initialized. - // we could use the APIs returned and resolved from createDotnetRuntime promise - // both exports are receiving the same object instances - console.log('user code after createDotnetRuntime()'); + console.log('user code after dotnet.create'); setModuleImports("main.js", { Sample: { Test: { diff --git a/src/mono/sample/wasm/console-node-ts/main.ts b/src/mono/sample/wasm/console-node-ts/main.ts index 88efc4b7615b71..4ede8bc6af37a2 100644 --- a/src/mono/sample/wasm/console-node-ts/main.ts +++ b/src/mono/sample/wasm/console-node-ts/main.ts @@ -9,3 +9,6 @@ const { runMainAndExit } = await createDotnetRuntime(() => ({ const app_args = process.argv.slice(2); const dllName = "Wasm.Console.Node.TS.Sample.dll"; await runMainAndExit(dllName, app_args); + +// import { dotnet } from '@microsoft/dotnet-runtime' +// await dotnet.run(); \ No newline at end of file diff --git a/src/mono/sample/wasm/node-webpack/app.js b/src/mono/sample/wasm/node-webpack/app.js index d43368999eb3bf..0636193f8f5df2 100644 --- a/src/mono/sample/wasm/node-webpack/app.js +++ b/src/mono/sample/wasm/node-webpack/app.js @@ -1,12 +1,9 @@ -import createDotnetRuntime from '@microsoft/dotnet-runtime' +import { dotnet } from '@microsoft/dotnet-runtime' import { color } from 'console-log-colors' async function dotnetMeaning() { try { - const { getAssemblyExports } = await createDotnetRuntime({ - configSrc: "./mono-config.json" - }); - + const { getAssemblyExports } = await dotnet.create(); const exports = await getAssemblyExports("Wasm.Node.WebPack.Sample"); const meaningFunction = exports.Sample.Test.Main; return meaningFunction(); diff --git a/src/mono/sample/wasm/node-webpack/package-lock.json b/src/mono/sample/wasm/node-webpack/package-lock.json index 8a93728a862adc..20d13694b45204 100644 --- a/src/mono/sample/wasm/node-webpack/package-lock.json +++ b/src/mono/sample/wasm/node-webpack/package-lock.json @@ -17,7 +17,7 @@ }, "bin/dotnet-runtime": { "name": "@microsoft/dotnet-runtime", - "version": "7.0.0-dev", + "version": "8.0.0-dev", "license": "MIT", "devDependencies": { "@rollup/plugin-typescript": "8.3.3", diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/Program.cs b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/Program.cs index 3a94759894e025..6c0255467eafef 100644 --- a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/Program.cs +++ b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/Program.cs @@ -4,17 +4,18 @@ using System; using System.Reflection; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices.JavaScript; namespace Sample { - public class Test + public partial class Test { public static void Main(string[] args) { Console.WriteLine ("Hello, World!"); } - [MethodImpl(MethodImplOptions.NoInlining)] + [JSExport] public static int TestMeaning() { const int success = 42; diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj index 7e2602501266f1..cd0aa2d29c8d4a 100644 --- a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj +++ b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj @@ -49,4 +49,10 @@ + + + + + + diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js index 8d267fdcc75604..054ea112613730 100644 --- a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js +++ b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js @@ -1,4 +1,4 @@ -import createDotnetRuntime from './dotnet.js' +import { dotnet } from './dotnet.js' function wasm_exit(exit_code) { var tests_done_elem = document.createElement("label"); @@ -10,13 +10,17 @@ function wasm_exit(exit_code) { } try { - const { BINDING } = await createDotnetRuntime(({ MONO }) => ({ - configSrc: "./mono-config.json", - onConfigLoaded: (config) => { - config.environmentVariables["DOTNET_MODIFIABLE_ASSEMBLIES"] = "debug"; - }, - })); - const testMeaning = BINDING.bind_static_method("[WebAssembly.Browser.HotReload.Test] Sample.Test:TestMeaning"); + const { getAssemblyExports } = await dotnet + .withElementOnExit() + .withModuleConfig({ + onConfigLoaded: (config) => { + config.environmentVariables["DOTNET_MODIFIABLE_ASSEMBLIES"] = "debug"; + } + }) + .create(); + + const exports = await getAssemblyExports("WebAssembly.Browser.HotReload.Test.dll"); + const testMeaning = exports.Sample.Test.TestMeaning const ret = testMeaning(); document.getElementById("out").innerHTML = `${ret}`; console.debug(`ret: ${ret}`); diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/Program.cs b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/Program.cs index 6d1ae322e7e71e..0d484ddee35c10 100644 --- a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/Program.cs +++ b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/Program.cs @@ -3,17 +3,18 @@ using System; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices.JavaScript; namespace Sample { - public class Test + public partial class Test { public static void Main(string[] args) { Console.WriteLine ("Hello, World!"); } - [MethodImpl(MethodImplOptions.NoInlining)] + [JSExport] public static int TestMeaning() { var config = AppContext.GetData("test_runtimeconfig_json"); diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj index 90d9fa155b9245..732efffc9f4fdf 100644 --- a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj +++ b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj @@ -13,4 +13,10 @@ + + + + + + diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/main.js b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/main.js index d00d3b488e414c..3b44c6f15220ee 100644 --- a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/main.js +++ b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/main.js @@ -1,4 +1,4 @@ -import createDotnetRuntime from './dotnet.js' +import { dotnet } from './dotnet.js' function wasm_exit(exit_code) { var tests_done_elem = document.createElement("label"); @@ -10,8 +10,9 @@ function wasm_exit(exit_code) { } try { - const { BINDING } = await createDotnetRuntime(); - const testMeaning = BINDING.bind_static_method("[WebAssembly.Browser.RuntimeConfig.Test] Sample.Test:TestMeaning"); + const { getAssemblyExports } = await dotnet.create(); + const exports = await getAssemblyExports("WebAssembly.Browser.RuntimeConfig.Test.dll"); + const testMeaning = exports.Sample.Test.TestMeaning; const ret = testMeaning(); document.getElementById("out").innerHTML = `${ret}`; console.debug(`ret: ${ret}`); From dac18be80d5720968ae88b74d63ffe428c27111a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Fri, 19 Aug 2022 10:56:01 +0200 Subject: [PATCH 4/5] Feedback. --- src/mono/sample/mbr/browser/main.js | 6 +-- .../sample/wasm/browser-bench/frame-main.js | 28 +++---------- src/mono/sample/wasm/browser-bench/main.js | 22 ++-------- .../browser-nextjs/components/deepThought.js | 12 ------ .../sample/wasm/browser-profile/README.md | 14 +++---- src/mono/sample/wasm/browser-profile/main.js | 41 ++++++------------- src/mono/sample/wasm/console-node-ts/main.ts | 22 +++++----- .../WebAssembly/Browser/HotReload/main.js | 6 +-- 8 files changed, 39 insertions(+), 112 deletions(-) diff --git a/src/mono/sample/mbr/browser/main.js b/src/mono/sample/mbr/browser/main.js index 352fc9e960b7ba..ff6a9d021f72eb 100644 --- a/src/mono/sample/mbr/browser/main.js +++ b/src/mono/sample/mbr/browser/main.js @@ -2,11 +2,7 @@ import { dotnet } from './dotnet.js' try { const { getAssemblyExports } = await dotnet - .withModuleConfig({ - onConfigLoaded: (config) => { - config.environmentVariables["DOTNET_MODIFIABLE_ASSEMBLIES"] = "debug"; - } - }) + .withEnvironmentVariable("DOTNET_MODIFIABLE_ASSEMBLIES", "debug") .create(); const exports = await getAssemblyExports("WasmDelta.dll"); diff --git a/src/mono/sample/wasm/browser-bench/frame-main.js b/src/mono/sample/wasm/browser-bench/frame-main.js index 16431d0e2c8b67..45fd825e15b1e4 100644 --- a/src/mono/sample/wasm/browser-bench/frame-main.js +++ b/src/mono/sample/wasm/browser-bench/frame-main.js @@ -3,7 +3,7 @@ "use strict"; -import { dotnet } from './dotnet.js' +import { dotnet, exit } from './dotnet.js' class FrameApp { async init({ getAssemblyExports }) { @@ -31,21 +31,15 @@ try { } const runtime = await dotnet + .withElementOnExit() + .withExitCodeLogging() .withModuleConfig({ - printErr: function () { - if (!mute) { - console.error(...arguments); - } - }, onConfigLoaded: (config) => { if (window.parent != window) { window.parent.resolveAppStartEvent("onConfigLoaded"); } // config.diagnosticTracing = true; - }, - onAbort: (error) => { - wasm_exit(1, error); - }, + } }) .create(); @@ -58,17 +52,5 @@ catch (err) { if (!mute) { console.error(`WASM ERROR ${err}`); } - wasm_exit(1, err); + exit(1, err); } - -function wasm_exit(exit_code, reason) { - /* Set result in a tests_done element, to be read by xharness */ - var tests_done_elem = document.createElement("label"); - tests_done_elem.id = "tests_done"; - tests_done_elem.innerHTML = exit_code.toString(); - if (exit_code) tests_done_elem.style.background = "red"; - document.body.appendChild(tests_done_elem); - - if (reason) console.error(reason); - console.log(`WASM EXIT ${exit_code}`); -}; diff --git a/src/mono/sample/wasm/browser-bench/main.js b/src/mono/sample/wasm/browser-bench/main.js index 4281ec06cf608b..a973b17939bbcd 100644 --- a/src/mono/sample/wasm/browser-bench/main.js +++ b/src/mono/sample/wasm/browser-bench/main.js @@ -3,7 +3,7 @@ "use strict"; -import { dotnet } from './dotnet.js' +import { dotnet, exit } from './dotnet.js' let runBenchmark; let setTasks; @@ -95,26 +95,12 @@ try { globalThis.mainApp.PageShow = globalThis.mainApp.pageShow.bind(globalThis.mainApp); const runtime = await dotnet - .withModuleConfig({ - onAbort: (error) => { - wasm_exit(1, error); - } - }) + .withElementOnExit() + .withExitCodeLogging() .create(); await mainApp.init(runtime); } catch (err) { - wasm_exit(1, err); + exit(1, err); } -function wasm_exit(exit_code, reason) { - /* Set result in a tests_done element, to be read by xharness */ - const tests_done_elem = document.createElement("label"); - tests_done_elem.id = "tests_done"; - tests_done_elem.innerHTML = exit_code.toString(); - if (exit_code) tests_done_elem.style.background = "red"; - document.body.appendChild(tests_done_elem); - - if (reason) console.error(reason); - console.log(`WASM EXIT ${exit_code}`); -}; diff --git a/src/mono/sample/wasm/browser-nextjs/components/deepThought.js b/src/mono/sample/wasm/browser-nextjs/components/deepThought.js index 11d8b53a416af0..7b2870b8b906a3 100644 --- a/src/mono/sample/wasm/browser-nextjs/components/deepThought.js +++ b/src/mono/sample/wasm/browser-nextjs/components/deepThought.js @@ -5,22 +5,10 @@ let dotnetRuntimePromise = undefined; async function createRuntime() { try { - const response = await fetch('dotnet.wasm'); - const arrayBuffer = await response.arrayBuffer(); - return dotnet. withModuleConfig({ locateFile: (path, prefix) => { return '/' + path; - }, - instantiateWasm: async (imports, successCallback) => { - try { - const arrayBufferResult = await WebAssembly.instantiate(arrayBuffer, imports); - successCallback(arrayBufferResult.instance); - } catch (err) { - console.error(err); - throw err; - } } }) .create(); diff --git a/src/mono/sample/wasm/browser-profile/README.md b/src/mono/sample/wasm/browser-profile/README.md index e077e9af9e4010..555e09657c7dbb 100644 --- a/src/mono/sample/wasm/browser-profile/README.md +++ b/src/mono/sample/wasm/browser-profile/README.md @@ -14,15 +14,11 @@ public static void StopProfile(){} ``` await dotnet - .withModuleConfig({ - onConfigLoaded: () => { - if (config.enableProfiler) { - config.aotProfilerOptions = { - write_at: "", - send_to: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" - } - } - }, + .withConfig({ + aotProfilerOptions: { + writeAt: "", + sendTo: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" + } }) .create(); ``` diff --git a/src/mono/sample/wasm/browser-profile/main.js b/src/mono/sample/wasm/browser-profile/main.js index b90a8e9101f9d7..b6c5195bf37fc3 100644 --- a/src/mono/sample/wasm/browser-profile/main.js +++ b/src/mono/sample/wasm/browser-profile/main.js @@ -1,16 +1,4 @@ -import { dotnet } from './dotnet.js' - -function wasm_exit(exit_code, reason) { - /* Set result in a tests_done element, to be read by xharness */ - const tests_done_elem = document.createElement("label"); - tests_done_elem.id = "tests_done"; - tests_done_elem.innerHTML = exit_code.toString(); - if (exit_code) tests_done_elem.style.background = "red"; - document.body.appendChild(tests_done_elem); - - if (reason) console.error(reason); - console.log(`WASM EXIT ${exit_code}`); -} +import { dotnet, exit } from './dotnet.js' function saveProfile(aotProfileData) { if (!aotProfileData) { @@ -27,21 +15,18 @@ function saveProfile(aotProfileData) { // Remove anchor from body document.body.removeChild(a); } -let enableProfiler = false try { const { INTERNAL, getAssemblyExports: getAssemblyExports } = await dotnet - .withModuleConfig({ - onConfigLoaded: (config) => { - if (config.enableProfiler) { - enableProfiler = true; - config.aotProfilerOptions = { - writeAt: "Sample.Test::StopProfile", - sendTo: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" - } - } + .withElementOnExit() + .withExitCodeLogging() + .withConfig({ + aotProfilerOptions: { + writeAt: "Sample.Test::StopProfile", + sendTo: "System.Runtime.InteropServices.JavaScript.JavaScriptExports::DumpAotProfileData" } }) .create(); + console.log("not ready yet") const exports = await getAssemblyExports("Wasm.BrowserProfile.Sample"); const testMeaning = exports.Sample.Test.TestMeaning; @@ -51,13 +36,11 @@ try { document.getElementById("out").innerHTML = ret; console.debug(`ret: ${ret}`); - if (enableProfiler) { - stopProfile(); - saveProfile(INTERNAL.aotProfileData); - } + stopProfile(); + saveProfile(INTERNAL.aotProfileData); let exit_code = ret == 42 ? 0 : 1; - wasm_exit(exit_code); + exit(exit_code); } catch (err) { - wasm_exit(-1, err); + exit(-1, err); } diff --git a/src/mono/sample/wasm/console-node-ts/main.ts b/src/mono/sample/wasm/console-node-ts/main.ts index 4ede8bc6af37a2..fec10d74f19a0d 100644 --- a/src/mono/sample/wasm/console-node-ts/main.ts +++ b/src/mono/sample/wasm/console-node-ts/main.ts @@ -1,14 +1,14 @@ -import createDotnetRuntime from '@microsoft/dotnet-runtime' -import process from 'process' +// import createDotnetRuntime from '@microsoft/dotnet-runtime' +// import process from 'process' -const { runMainAndExit } = await createDotnetRuntime(() => ({ - disableDotnet6Compatibility: true, - configSrc: "./mono-config.json", -})); +// const { runMainAndExit } = await createDotnetRuntime(() => ({ +// disableDotnet6Compatibility: true, +// configSrc: "./mono-config.json", +// })); -const app_args = process.argv.slice(2); -const dllName = "Wasm.Console.Node.TS.Sample.dll"; -await runMainAndExit(dllName, app_args); +// const app_args = process.argv.slice(2); +// const dllName = "Wasm.Console.Node.TS.Sample.dll"; +// await runMainAndExit(dllName, app_args); -// import { dotnet } from '@microsoft/dotnet-runtime' -// await dotnet.run(); \ No newline at end of file +import { dotnet } from '@microsoft/dotnet-runtime' +await dotnet.run(); \ No newline at end of file diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js index 054ea112613730..ed7d0f24e9ee5b 100644 --- a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js +++ b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/main.js @@ -12,11 +12,7 @@ function wasm_exit(exit_code) { try { const { getAssemblyExports } = await dotnet .withElementOnExit() - .withModuleConfig({ - onConfigLoaded: (config) => { - config.environmentVariables["DOTNET_MODIFIABLE_ASSEMBLIES"] = "debug"; - } - }) + .withEnvironmentVariable("DOTNET_MODIFIABLE_ASSEMBLIES", "debug") .create(); const exports = await getAssemblyExports("WebAssembly.Browser.HotReload.Test.dll"); From 1bd28207654376d558879a6025242774e675fc47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Fri, 19 Aug 2022 11:02:49 +0200 Subject: [PATCH 5/5] Drop commented code. --- src/mono/sample/wasm/console-node-ts/main.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/mono/sample/wasm/console-node-ts/main.ts b/src/mono/sample/wasm/console-node-ts/main.ts index fec10d74f19a0d..d8961099cdff53 100644 --- a/src/mono/sample/wasm/console-node-ts/main.ts +++ b/src/mono/sample/wasm/console-node-ts/main.ts @@ -1,14 +1,2 @@ -// import createDotnetRuntime from '@microsoft/dotnet-runtime' -// import process from 'process' - -// const { runMainAndExit } = await createDotnetRuntime(() => ({ -// disableDotnet6Compatibility: true, -// configSrc: "./mono-config.json", -// })); - -// const app_args = process.argv.slice(2); -// const dllName = "Wasm.Console.Node.TS.Sample.dll"; -// await runMainAndExit(dllName, app_args); - import { dotnet } from '@microsoft/dotnet-runtime' await dotnet.run(); \ No newline at end of file