[js/webgpu] use Headless for webgpu test by default (#19702)

### Description
use Chromium Headless for webgpu test by default. Still use normal
Chromium with window when debug=true or perfMode=true.

Use the
[`--headless=new`](https://developer.chrome.com/docs/chromium/new-headless)
mode.



### Motivation and Context
try to use a more stable way to launch npm tests to avoid a "chrome not
found" issue in pipeline, which may potentially caused by windowed
application.
This commit is contained in:
Yulong Wang 2024-02-28 16:05:08 -08:00 committed by GitHub
parent a93c31e3c9
commit e30618d055
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 9 additions and 24 deletions

View file

@ -86,11 +86,11 @@ module.exports = function(config) {
hostname, hostname,
listenAddress, listenAddress,
customLaunchers: { customLaunchers: {
// the following flags are used to make sure Edge on CI agents to initialize WebGPU correctly. // Chromium-based browsers
EdgeTest: {base: 'Edge', flags: chromiumFlags}, EdgeTest: {base: 'Edge', flags: chromiumFlags},
ChromeTest: {base: 'Chrome', flags: chromiumFlags}, ChromeTest: {base: 'Chrome', flags: chromiumFlags},
ChromeTestHeadless: {base: 'ChromeHeadless', flags: chromiumFlags},
ChromeCanaryTest: {base: 'ChromeCanary', flags: chromiumFlags}, ChromeCanaryTest: {base: 'ChromeCanary', flags: chromiumFlags},
// //
// ==== BrowserStack browsers ==== // ==== BrowserStack browsers ====
// //

View file

@ -542,14 +542,13 @@ async function main() {
npmlog.info('TestRunnerCli.Run', '(4/4) Running karma to start test runner...'); npmlog.info('TestRunnerCli.Run', '(4/4) Running karma to start test runner...');
const webgpu = args.backends.indexOf('webgpu') > -1; const webgpu = args.backends.indexOf('webgpu') > -1;
const webnn = args.backends.indexOf('webnn') > -1; const webnn = args.backends.indexOf('webnn') > -1;
const browser = getBrowserNameFromEnv( const browser = getBrowserNameFromEnv(args.env);
args.env,
args.bundleMode === 'perf' ? 'perf' :
args.debug ? 'debug' :
'test',
webgpu);
const karmaArgs = ['karma', 'start', `--browsers ${browser}`]; const karmaArgs = ['karma', 'start', `--browsers ${browser}`];
const chromiumFlags = ['--enable-features=SharedArrayBuffer', ...args.chromiumFlags]; const chromiumFlags = ['--enable-features=SharedArrayBuffer', ...args.chromiumFlags];
if (args.bundleMode === 'dev' && !args.debug) {
// use headless for 'test' mode (when 'perf' and 'debug' are OFF)
chromiumFlags.push('--headless=new');
}
if (args.debug) { if (args.debug) {
karmaArgs.push('--log-level info --timeout-mocha 9999999'); karmaArgs.push('--log-level info --timeout-mocha 9999999');
chromiumFlags.push('--remote-debugging-port=9333'); chromiumFlags.push('--remote-debugging-port=9333');
@ -662,10 +661,10 @@ async function main() {
fs.writeJSONSync(path.join(TEST_ROOT, './testdata-config.json'), config); fs.writeJSONSync(path.join(TEST_ROOT, './testdata-config.json'), config);
} }
function getBrowserNameFromEnv(env: TestRunnerCliArgs['env'], mode: 'debug'|'perf'|'test', webgpu: boolean) { function getBrowserNameFromEnv(env: TestRunnerCliArgs['env']) {
switch (env) { switch (env) {
case 'chrome': case 'chrome':
return selectChromeBrowser(mode, webgpu); return 'ChromeTest';
case 'edge': case 'edge':
return 'EdgeTest'; return 'EdgeTest';
case 'firefox': case 'firefox':
@ -680,20 +679,6 @@ async function main() {
throw new Error(`env "${env}" not supported.`); throw new Error(`env "${env}" not supported.`);
} }
} }
function selectChromeBrowser(mode: 'debug'|'perf'|'test', webgpu: boolean) {
if (webgpu) {
return 'ChromeTest';
} else {
switch (mode) {
case 'debug':
case 'perf':
return 'ChromeTest';
default:
return 'ChromeTestHeadless';
}
}
}
} }
void main(); void main();