mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-27 22:45:57 +00:00
[js/web] add a test flag to customize chromium flags (#17545)
### Description add a test flag to customize chromium flags. Usage: npm test -- \<other flags> --chromium-flags=<...>
This commit is contained in:
parent
5af6279440
commit
7af2f68ef3
4 changed files with 62 additions and 57 deletions
|
|
@ -3,10 +3,22 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
const bundleMode = require('minimist')(process.argv)['bundle-mode'] || 'dev'; // 'dev'|'perf'|undefined;
|
||||
const karmaPlugins = require('minimist')(process.argv)['karma-plugins'] || undefined;
|
||||
const timeoutMocha = require('minimist')(process.argv)['timeout-mocha'] || 60000;
|
||||
const forceLocalHost = !!require('minimist')(process.argv)['force-localhost'];
|
||||
const args = require('minimist')(process.argv, {});
|
||||
const bundleMode = args['bundle-mode'] || 'dev'; // 'dev'|'perf'|undefined;
|
||||
const karmaPlugins = args['karma-plugins'] || undefined;
|
||||
const timeoutMocha = args['timeout-mocha'] || 60000;
|
||||
const forceLocalHost = !!args['force-localhost'];
|
||||
|
||||
// parse chromium flags
|
||||
let chromiumFlags = args['chromium-flags'];
|
||||
if (!chromiumFlags) {
|
||||
chromiumFlags = [];
|
||||
} else if (typeof chromiumFlags === 'string') {
|
||||
chromiumFlags = [chromiumFlags];
|
||||
} else if (!Array.isArray(chromiumFlags)) {
|
||||
throw new Error(`Invalid command line arg: --chromium-flags: ${chromiumFlags}`);
|
||||
}
|
||||
|
||||
const commonFile = bundleMode === 'dev' ? '../common/dist/ort-common.js' : '../common/dist/ort-common.min.js'
|
||||
const mainFile = bundleMode === 'dev' ? 'test/ort.dev.js' : 'test/ort.perf.js';
|
||||
|
||||
|
|
@ -91,37 +103,10 @@ module.exports = function(config) {
|
|||
listenAddress,
|
||||
customLaunchers: {
|
||||
// the following flags are used to make sure Edge on CI agents to initialize WebGPU correctly.
|
||||
EdgeWebGpuTest: {base: 'Edge', flags: ['--ignore-gpu-blocklist', '--gpu-vendor-id=0x10de']},
|
||||
ChromeTest: {base: 'Chrome', flags: ['--enable-features=SharedArrayBuffer']},
|
||||
ChromeTestHeadless: {base: 'ChromeHeadless', flags: ['--enable-features=SharedArrayBuffer']},
|
||||
ChromeDebug:
|
||||
{debug: true, base: 'Chrome', flags: ['--remote-debugging-port=9333', '--enable-features=SharedArrayBuffer']},
|
||||
ChromeCanaryTest: {
|
||||
base: 'ChromeCanary',
|
||||
flags: ['--enable-features=SharedArrayBuffer', '--enable-experimental-web-platform-features']
|
||||
},
|
||||
ChromeCanaryDebug: {
|
||||
debug: true,
|
||||
base: 'ChromeCanary',
|
||||
flags: [
|
||||
'--remote-debugging-port=9333', '--enable-features=SharedArrayBuffer',
|
||||
'--enable-experimental-web-platform-features'
|
||||
]
|
||||
},
|
||||
ChromeWebGpuProfileTest: {
|
||||
base: 'Chrome',
|
||||
flags:
|
||||
['--window-size=1,1', '--enable-features=SharedArrayBuffer', '--disable-dawn-features=disallow_unsafe_apis']
|
||||
},
|
||||
ChromeWebGpuProfileDebug: {
|
||||
debug: true,
|
||||
base: 'Chrome',
|
||||
flags: [
|
||||
'--remote-debugging-port=9333',
|
||||
'--enable-features=SharedArrayBuffer',
|
||||
'--disable-dawn-features=disallow_unsafe_apis',
|
||||
]
|
||||
},
|
||||
EdgeTest: {base: 'Edge', flags: chromiumFlags},
|
||||
ChromeTest: {base: 'Chrome', flags: chromiumFlags},
|
||||
ChromeTestHeadless: {base: 'ChromeHeadless', flags: chromiumFlags},
|
||||
ChromeCanaryTest: {base: 'ChromeCanary', flags: chromiumFlags},
|
||||
//
|
||||
// ==== BrowserStack browsers ====
|
||||
//
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ Options:
|
|||
|
||||
--no-sandbox This flag will be passed to Chrome.
|
||||
Sometimes Chrome need this flag to work together with Karma.
|
||||
--chromium-flags=<...> This flag will be passed to Chrome and Edge browsers. Can be used multiple times.
|
||||
|
||||
Examples:
|
||||
|
||||
|
|
@ -173,6 +174,7 @@ export interface TestRunnerCliArgs {
|
|||
webglOptions?: InferenceSession.WebGLExecutionProviderOption;
|
||||
globalEnvFlags?: Test.Options['globalEnvFlags'];
|
||||
noSandbox?: boolean;
|
||||
chromiumFlags: string[];
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -439,6 +441,17 @@ export function parseTestRunnerCliArgs(cmdlineArgs: string[]): TestRunnerCliArgs
|
|||
// Option: --no-sandbox
|
||||
const noSandbox = !!args['no-sandbox'];
|
||||
|
||||
// parse chromium flags
|
||||
let chromiumFlags = args['chromium-flags'];
|
||||
if (!chromiumFlags) {
|
||||
chromiumFlags = [];
|
||||
} else if (typeof chromiumFlags === 'string') {
|
||||
chromiumFlags = [chromiumFlags];
|
||||
} else if (!Array.isArray(chromiumFlags)) {
|
||||
throw new Error(`Invalid command line arg: --chromium-flags: ${chromiumFlags}`);
|
||||
}
|
||||
|
||||
|
||||
npmlog.verbose('TestRunnerCli.Init', ` Mode: ${mode}`);
|
||||
npmlog.verbose('TestRunnerCli.Init', ` Env: ${env}`);
|
||||
npmlog.verbose('TestRunnerCli.Init', ` Debug: ${debug}`);
|
||||
|
|
@ -462,6 +475,7 @@ export function parseTestRunnerCliArgs(cmdlineArgs: string[]): TestRunnerCliArgs
|
|||
webglOptions,
|
||||
wasmOptions,
|
||||
globalEnvFlags,
|
||||
noSandbox
|
||||
noSandbox,
|
||||
chromiumFlags
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -475,10 +475,12 @@ async function main() {
|
|||
args.bundleMode === 'perf' ? 'perf' :
|
||||
args.debug ? 'debug' :
|
||||
'test',
|
||||
webgpu, webnn, config.options.globalEnvFlags?.webgpu?.profilingMode === 'default');
|
||||
webgpu, webnn);
|
||||
const karmaArgs = ['karma', 'start', `--browsers ${browser}`];
|
||||
const chromiumFlags = ['--enable-features=SharedArrayBuffer', ...args.chromiumFlags];
|
||||
if (args.debug) {
|
||||
karmaArgs.push('--log-level info --timeout-mocha 9999999');
|
||||
chromiumFlags.push('--remote-debugging-port=9333');
|
||||
} else {
|
||||
karmaArgs.push('--single-run');
|
||||
}
|
||||
|
|
@ -488,7 +490,22 @@ async function main() {
|
|||
if (webgpu || webnn) {
|
||||
karmaArgs.push('--force-localhost');
|
||||
}
|
||||
if (webgpu) {
|
||||
if (browser.includes('Canary')) {
|
||||
chromiumFlags.push('--enable-dawn-features=allow_unsafe_apis,use_dxc');
|
||||
} else {
|
||||
chromiumFlags.push('--enable-dawn-features=use_dxc');
|
||||
chromiumFlags.push('--disable-dawn-features=disallow_unsafe_apis');
|
||||
}
|
||||
}
|
||||
if (webnn) {
|
||||
chromiumFlags.push('--enable-experimental-web-platform-features');
|
||||
}
|
||||
if (config.options.globalEnvFlags?.webgpu?.profilingMode === 'default') {
|
||||
chromiumFlags.push('--disable-dawn-features=disallow_unsafe_apis');
|
||||
}
|
||||
karmaArgs.push(`--bundle-mode=${args.bundleMode}`);
|
||||
karmaArgs.push(...chromiumFlags.map(flag => `--chromium-flags=${flag}`));
|
||||
if (browser.startsWith('Edge')) {
|
||||
// There are currently 2 Edge browser launchers:
|
||||
// - karma-edge-launcher: used to launch the old Edge browser
|
||||
|
|
@ -580,12 +597,12 @@ async function main() {
|
|||
}
|
||||
|
||||
function getBrowserNameFromEnv(
|
||||
env: TestRunnerCliArgs['env'], mode: 'debug'|'perf'|'test', webgpu: boolean, webnn: boolean, profile: boolean) {
|
||||
env: TestRunnerCliArgs['env'], mode: 'debug'|'perf'|'test', webgpu: boolean, webnn: boolean) {
|
||||
switch (env) {
|
||||
case 'chrome':
|
||||
return selectChromeBrowser(mode, webgpu, webnn, profile);
|
||||
return selectChromeBrowser(mode, webgpu, webnn);
|
||||
case 'edge':
|
||||
return webgpu ? 'EdgeWebGpuTest' : 'Edge';
|
||||
return 'EdgeTest';
|
||||
case 'firefox':
|
||||
return 'Firefox';
|
||||
case 'electron':
|
||||
|
|
@ -599,25 +616,14 @@ async function main() {
|
|||
}
|
||||
}
|
||||
|
||||
function selectChromeBrowser(mode: 'debug'|'perf'|'test', webgpu: boolean, webnn: boolean, profile: boolean) {
|
||||
if (webgpu) {
|
||||
switch (mode) {
|
||||
case 'debug':
|
||||
return profile ? 'ChromeWebGpuProfileDebug' : 'ChromeDebug';
|
||||
default:
|
||||
return profile ? 'ChromeWebGpuProfileTest' : 'ChromeTest';
|
||||
}
|
||||
} else if (webnn) {
|
||||
switch (mode) {
|
||||
case 'debug':
|
||||
return 'ChromeCanaryDebug';
|
||||
default:
|
||||
return 'ChromeCanaryTest';
|
||||
}
|
||||
function selectChromeBrowser(mode: 'debug'|'perf'|'test', webgpu: boolean, webnn: boolean) {
|
||||
if (webnn) {
|
||||
return 'ChromeCanaryTest';
|
||||
} else if (webgpu) {
|
||||
return 'ChromeTest';
|
||||
} else {
|
||||
switch (mode) {
|
||||
case 'debug':
|
||||
return 'ChromeDebug';
|
||||
case 'perf':
|
||||
return 'ChromeTest';
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ jobs:
|
|||
displayName: 'Run ort-web tests (wasm,webgl,xnnpack backend)'
|
||||
condition: ne('${{ parameters.RunWebGpuTests }}', 'true')
|
||||
- script: |
|
||||
npm test -- -e=edge -b=webgl,wasm,xnnpack,webgpu
|
||||
npm test -- -e=edge -b=webgl,wasm,xnnpack,webgpu --chromium-flags=--ignore-gpu-blocklist --chromium-flags=--gpu-vendor-id=0x10de
|
||||
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
||||
displayName: 'Run ort-web tests (ALL backends)'
|
||||
condition: ne('${{ parameters.RunWebGpuTests }}', 'false')
|
||||
|
|
|
|||
Loading…
Reference in a new issue