-
-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathplaywright.config.ts
More file actions
139 lines (138 loc) · 4.4 KB
/
Copy pathplaywright.config.ts
File metadata and controls
139 lines (138 loc) · 4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// Covers tests/benchmark (perf) and tests/e2e (functional smoke);
// each project scopes its own files via testMatch.
testDir: './tests',
timeout: 180000, // 3 min for large files
workers: 1, // Single worker for accurate benchmarks (no resource contention)
fullyParallel: false, // Sequential execution for consistent timing
// NOTE: webServer is only honored at the TOP level — the per-project
// webServer blocks on the benchmark projects below are silently
// ignored by Playwright (latent: those projects are run manually
// against an already-running server). The e2e projects rely on this
// one; reuseExistingServer keeps local dev-server workflows working.
webServer: {
command: 'pnpm --filter @ifc-lite/viewer exec vite preview --port 3000',
port: 3000,
reuseExistingServer: true,
timeout: 90000,
env: {
BROWSER: 'none',
},
},
projects: [
{
name: 'viewer-e2e',
testMatch: /(viewer-smoke|usd-export|laz-wasm)\.e2e\.spec\.ts/,
timeout: 240000,
use: {
...devices['Desktop Chrome'],
baseURL: 'http://localhost:3000',
actionTimeout: 60000,
headless: false,
channel: 'chrome',
launchOptions: {
args: [
'--enable-gpu',
'--enable-webgpu',
'--enable-unsafe-webgpu',
'--use-angle=default',
'--ignore-gpu-blocklist',
],
},
},
},
{
name: 'viewer-e2e-ci',
testMatch: /(viewer-smoke|usd-export|laz-wasm)\.e2e\.spec\.ts/,
timeout: 240000,
use: {
baseURL: 'http://localhost:3000',
actionTimeout: 60000,
headless: true,
// Real Chrome, not Playwright's headless shell — the shell's
// WebGPU device is broken under software rendering (createBuffer
// fails for KB-sized buffers, popErrorScope instance drops).
// GitHub-hosted runners have Chrome preinstalled. WebGPU over
// SwiftShader needs the Vulkan flag set below.
channel: 'chrome',
launchOptions: {
args: [
'--enable-unsafe-webgpu',
'--enable-features=Vulkan',
'--use-vulkan=swiftshader',
'--disable-vulkan-surface',
'--ignore-gpu-blocklist',
'--enable-gpu',
],
},
},
},
{
name: 'viewer-benchmark',
testMatch: /viewer-benchmark\.spec\.ts/,
timeout: 600000, // 10 min for very large files (327MB)
webServer: {
command: 'pnpm --filter @ifc-lite/viewer exec vite preview --port 3000',
port: 3000,
reuseExistingServer: true,
timeout: 60000,
env: {
BROWSER: 'none',
},
},
use: {
...devices['Desktop Chrome'],
baseURL: 'http://localhost:3000',
actionTimeout: 300000,
// Run headed for realistic GPU/WebGPU performance
headless: false,
// Use real Chrome channel for accurate benchmarks
channel: 'chrome',
// Enable GPU for WebGPU
launchOptions: {
args: [
'--enable-gpu',
'--enable-webgpu',
'--enable-unsafe-webgpu',
'--use-angle=default',
'--ignore-gpu-blocklist',
],
},
},
},
{
name: 'viewer-benchmark-ci',
testMatch: /viewer-benchmark\.spec\.ts/,
timeout: 600000,
webServer: {
command: 'pnpm --filter @ifc-lite/viewer exec vite preview --port 3000',
port: 3000,
reuseExistingServer: true,
timeout: 60000,
env: {
BROWSER: 'none',
},
},
use: {
baseURL: 'http://localhost:3000',
actionTimeout: 300000,
// CI mode: headless but with GPU flags
headless: true,
// Real Chrome (preinstalled on the runner), not Playwright's bundled
// headless shell — the shell's WebGPU device is broken under software
// rendering (same reason the E2E CI project pins channel: 'chrome').
channel: 'chrome',
launchOptions: {
args: [
'--enable-gpu',
'--enable-webgpu',
'--enable-unsafe-webgpu',
'--use-angle=swiftshader', // Software rendering for CI
'--ignore-gpu-blocklist',
],
},
},
},
],
});