mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-15 15:52:21 +00:00
Launch QA browsers on SwiftShader where there is no Metal
The shared launcher always asked for ANGLE's Metal backend, which exists only on macOS; on CI's Linux runners WebGL failed and the Street Level gate never saw the app start. The default is now Metal on macOS and SwiftShader elsewhere; QA_ANGLE still overrides it.
This commit is contained in:
1 parent
02ad2d045a
commit
ab5c593ab6
3 files changed
+24
-5
No files matched your search
@@ -27,7 +27,12 @@ import {
|
|||||||
STRICT_TILE_HOSTS,
|
STRICT_TILE_HOSTS,
|
||||||
} from './qa-map-policy.mjs';
|
} from './qa-map-policy.mjs';
|
||||||
import { createMissLoader, tileCacheFile } from './qa/tileCache.mjs';
|
import { createMissLoader, tileCacheFile } from './qa/tileCache.mjs';
|
||||||
import { closeBrowser, diagnoseExit, exitAfterFlush } from './qa/browser.mjs';
|
import {
|
||||||
|
closeBrowser,
|
||||||
|
diagnoseExit,
|
||||||
|
exitAfterFlush,
|
||||||
|
qaAngle,
|
||||||
|
} from './qa/browser.mjs';
|
||||||
import { DAYTIME, shiftTime } from './qa/time.mjs';
|
import { DAYTIME, shiftTime } from './qa/time.mjs';
|
||||||
import {
|
import {
|
||||||
PLANESPOTTERS_EMPTY_BODY,
|
PLANESPOTTERS_EMPTY_BODY,
|
||||||
@@ -78,7 +83,7 @@ export const RESERVED_PORTS = Object.freeze([
|
|||||||
.split(',').map((port) => port.trim()).filter(Boolean),
|
.split(',').map((port) => port.trim()).filter(Boolean),
|
||||||
]);
|
]);
|
||||||
/** Chrome flags every scenario's browser starts with (the GPU path). */
|
/** Chrome flags every scenario's browser starts with (the GPU path). */
|
||||||
export const CHROME_ARGS = Object.freeze([`--use-angle=${process.env.QA_ANGLE || 'metal'}`, '--enable-gpu']);
|
export const CHROME_ARGS = Object.freeze([`--use-angle=${qaAngle()}`, '--enable-gpu']);
|
||||||
|
|
||||||
/** The values of --layers=a,b and --evidence=FILE (null when absent). */
|
/** The values of --layers=a,b and --evidence=FILE (null when absent). */
|
||||||
export function strictArguments(argv = process.argv) {
|
export function strictArguments(argv = process.argv) {
|
||||||
|
|||||||
@@ -1,6 +1,14 @@
|
|||||||
import { processTree, readProcesses } from './process.mjs';
|
import { processTree, readProcesses } from './process.mjs';
|
||||||
import puppeteer from 'puppeteer';
|
import puppeteer from 'puppeteer';
|
||||||
import { chromeExecutablePath } from '../qa-chrome.mjs';
|
import { chromeExecutablePath } from '../qa-chrome.mjs';
|
||||||
|
/**
|
||||||
|
* The ANGLE backend: QA_ANGLE, else Metal on macOS and SwiftShader elsewhere
|
||||||
|
* (CI's Linux runners have no GPU, and Metal does not exist there).
|
||||||
|
*/
|
||||||
|
export function qaAngle(env = process.env, platform = process.platform) {
|
||||||
|
return env.QA_ANGLE || (platform === 'darwin' ? 'metal' : 'swiftshader');
|
||||||
|
}
|
||||||
|
|
||||||
/** Keep every scenario on the same headless GPU path. */
|
/** Keep every scenario on the same headless GPU path. */
|
||||||
export function launchBrowser({ args = [], ...options } = {}) {
|
export function launchBrowser({ args = [], ...options } = {}) {
|
||||||
return puppeteer.launch({
|
return puppeteer.launch({
|
||||||
@@ -8,7 +16,7 @@ export function launchBrowser({ args = [], ...options } = {}) {
|
|||||||
...options,
|
...options,
|
||||||
headless: true,
|
headless: true,
|
||||||
args: [
|
args: [
|
||||||
`--use-angle=${process.env.QA_ANGLE || 'metal'}`,
|
`--use-angle=${qaAngle()}`,
|
||||||
'--enable-gpu',
|
'--enable-gpu',
|
||||||
...args,
|
...args,
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import puppeteer from 'puppeteer';
|
import puppeteer from 'puppeteer';
|
||||||
import { launchBrowser } from './browser.mjs';
|
import { launchBrowser, qaAngle } from './browser.mjs';
|
||||||
|
|
||||||
test('scenario launch uses the selected ANGLE backend and stays headless', async (t) => {
|
test('scenario launch uses the selected ANGLE backend and stays headless', async (t) => {
|
||||||
const prior = process.env.QA_ANGLE;
|
const prior = process.env.QA_ANGLE;
|
||||||
@@ -35,5 +35,11 @@ test('scenario launch uses the selected ANGLE backend and stays headless', async
|
|||||||
assert.equal(options.protocolTimeout, 120000);
|
assert.equal(options.protocolTimeout, 120000);
|
||||||
delete process.env.QA_ANGLE;
|
delete process.env.QA_ANGLE;
|
||||||
await launchBrowser();
|
await launchBrowser();
|
||||||
assert.equal(options.args[0], '--use-angle=metal');
|
assert.equal(options.args[0], `--use-angle=${qaAngle({})}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('the default backend is Metal on macOS and SwiftShader elsewhere', () => {
|
||||||
|
assert.equal(qaAngle({}, 'darwin'), 'metal');
|
||||||
|
assert.equal(qaAngle({}, 'linux'), 'swiftshader');
|
||||||
|
assert.equal(qaAngle({ QA_ANGLE: 'vulkan' }, 'linux'), 'vulkan');
|
||||||
});
|
});
|
||||||
Reference in new issue
Block a user