xbintsc 0.5.38 → 0.5.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/help.d.ts +1 -1
- package/dist/src/codegen/generator/module.js +23 -7
- package/dist/src/codegen/generator/module.js.map +1 -1
- package/dist/src/driver/version.d.ts +1 -1
- package/dist/src/driver/version.js +1 -1
- package/dist/src/extensions/gui/html.js +9 -2
- package/dist/src/extensions/gui/html.js.map +1 -1
- package/dist/tests/codegen/closures.test.js +7 -0
- package/dist/tests/codegen/closures.test.js.map +1 -1
- package/dist/tests/e2e/compile-objects-classes.test.js +31 -0
- package/dist/tests/e2e/compile-objects-classes.test.js.map +1 -1
- package/dist/tests/e2e/gui-canvas-state.test.d.ts +9 -0
- package/dist/tests/e2e/gui-canvas-state.test.js +297 -0
- package/dist/tests/e2e/gui-canvas-state.test.js.map +1 -0
- package/dist/tests/e2e/gui-draw-perf.test.d.ts +22 -0
- package/dist/tests/e2e/gui-draw-perf.test.js +405 -0
- package/dist/tests/e2e/gui-draw-perf.test.js.map +1 -0
- package/dist/tests/e2e/gui-perf.test.d.ts +23 -0
- package/dist/tests/e2e/gui-perf.test.js +283 -0
- package/dist/tests/e2e/gui-perf.test.js.map +1 -0
- package/dist/tests/e2e/gui-script-import-order.test.js +9 -1
- package/dist/tests/e2e/gui-script-import-order.test.js.map +1 -1
- package/dist/tests/e2e/gui-webgl.test.js +4 -4
- package/dist/tests/e2e/gui-webgl.test.js.map +1 -1
- package/dist/tests/e2e/gui-webgl2-shadow-sampler.test.d.ts +8 -0
- package/dist/tests/e2e/gui-webgl2-shadow-sampler.test.js +336 -0
- package/dist/tests/e2e/gui-webgl2-shadow-sampler.test.js.map +1 -0
- package/dist/tests/extensions/gui.test.js +23 -0
- package/dist/tests/extensions/gui.test.js.map +1 -1
- package/doc/gui/api.md +28 -2
- package/doc/gui/canvas.md +110 -27
- package/doc/gui/known-issues.md +32 -10
- package/doc/gui/rendering.md +77 -0
- package/doc/gui/runtime.md +18 -3
- package/doc/gui/webgl.md +38 -19
- package/doc/gui.md +33 -1
- package/doc/zh-CN/gui/api.md +25 -2
- package/doc/zh-CN/gui/canvas.md +95 -26
- package/doc/zh-CN/gui/known-issues.md +21 -4
- package/doc/zh-CN/gui/rendering.md +59 -0
- package/doc/zh-CN/gui/runtime.md +13 -3
- package/doc/zh-CN/gui/webgl.md +27 -5
- package/doc/zh-CN/gui.md +25 -2
- package/package.json +7 -7
- package/runtime/ext_gui/browser.cpp +3 -1
- package/runtime/ext_gui/canvas.cpp +135 -89
- package/runtime/ext_gui/canvas.h +116 -0
- package/runtime/ext_gui/canvas_clip.cpp +143 -0
- package/runtime/ext_gui/canvas_composite.cpp +241 -0
- package/runtime/ext_gui/canvas_coverage.cpp +241 -0
- package/runtime/ext_gui/canvas_gradient.cpp +41 -4
- package/runtime/ext_gui/canvas_image_data.cpp +4 -0
- package/runtime/ext_gui/canvas_internal.h +34 -9
- package/runtime/ext_gui/canvas_raster.cpp +207 -178
- package/runtime/ext_gui/canvas_shadow.cpp +161 -0
- package/runtime/ext_gui/canvas_stroke.cpp +37 -9
- package/runtime/ext_gui/canvas_style.cpp +59 -0
- package/runtime/ext_gui/canvas_text.cpp +140 -0
- package/runtime/ext_gui/css.h +7 -0
- package/runtime/ext_gui/css_sheet.cpp +22 -0
- package/runtime/ext_gui/document.cpp +25 -1
- package/runtime/ext_gui/document.h +8 -0
- package/runtime/ext_gui/dom_api_canvas.cpp +16 -1
- package/runtime/ext_gui/dom_api_canvas_image.cpp +9 -0
- package/runtime/ext_gui/dom_api_canvas_state.cpp +217 -0
- package/runtime/ext_gui/dom_api_internal.h +36 -37
- package/runtime/ext_gui/dom_api_offscreen.cpp +213 -0
- package/runtime/ext_gui/dom_api_proto.cpp +18 -0
- package/runtime/ext_gui/dom_api_webgl.cpp +19 -9
- package/runtime/ext_gui/dom_api_webgl_internal.h +58 -0
- package/runtime/ext_gui/dom_api_webgl_source.cpp +18 -0
- package/runtime/ext_gui/gradient_values.cpp +12 -1
- package/runtime/ext_gui/gui.cpp +5 -0
- package/runtime/ext_gui/gui_canvas.cpp +4 -0
- package/runtime/ext_gui/gui_engine.h +30 -0
- package/runtime/ext_gui/gui_events.cpp +182 -58
- package/runtime/ext_gui/gui_media.cpp +3 -0
- package/runtime/ext_gui/image.cpp +69 -0
- package/runtime/ext_gui/image_bitmap_browser.cpp +11 -0
- package/runtime/ext_gui/layout.cpp +4 -0
- package/runtime/ext_gui/paint.cpp +19 -0
- package/runtime/ext_gui/paint_background.cpp +18 -1
- package/runtime/ext_gui/perf.cpp +171 -0
- package/runtime/ext_gui/perf.h +127 -0
- package/runtime/ext_gui/renderer.cpp +109 -41
- package/runtime/ext_gui/renderer.h +33 -9
- package/runtime/ext_gui/renderer_image.cpp +135 -65
- package/runtime/ext_gui/renderer_internal.h +15 -3
- package/runtime/ext_gui/renderer_text.cpp +24 -12
- package/runtime/ext_gui/style.cpp +101 -30
- package/runtime/ext_gui/style.h +6 -3
- package/runtime/ext_gui/style_print.cpp +7 -1
- package/runtime/ext_gui/text.cpp +23 -4
- package/runtime/ext_gui/text.h +29 -0
- package/runtime/ext_gui/text_cache.cpp +118 -0
- package/runtime/ext_gui/text_glyph_cache.cpp +100 -0
- package/runtime/ext_gui/webgl.h +48 -146
- package/runtime/ext_gui/webgl_blit.cpp +12 -1
- package/runtime/ext_gui/webgl_blit_depth.cpp +270 -0
- package/runtime/ext_gui/webgl_buffer.cpp +59 -1
- package/runtime/ext_gui/webgl_buffer_objects.cpp +106 -9
- package/runtime/ext_gui/webgl_clear.cpp +3 -0
- package/runtime/ext_gui/webgl_context.cpp +29 -3
- package/runtime/ext_gui/webgl_draw.cpp +75 -270
- package/runtime/ext_gui/webgl_draw_buffers.cpp +1 -0
- package/runtime/ext_gui/webgl_draw_setup.cpp +321 -0
- package/runtime/ext_gui/webgl_draw_state.h +130 -0
- package/runtime/ext_gui/webgl_glsl_scan.cpp +3 -8
- package/runtime/ext_gui/webgl_objects.h +148 -0
- package/runtime/ext_gui/webgl_pipeline.cpp +8 -8
- package/runtime/ext_gui/webgl_program_internal.h +35 -0
- package/runtime/ext_gui/webgl_shader.cpp +22 -30
- package/runtime/ext_gui/webgl_webgl2.cpp +36 -0
- package/runtime/ext_gui/window.cpp +56 -1
- package/src/codegen/generator/module.ts +22 -7
- package/src/driver/version.ts +1 -1
- package/src/extensions/gui/html.ts +9 -2
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end test for the `gui` extension — rendering performance counters.
|
|
3
|
+
*
|
|
4
|
+
* A 200-row list (about 1,000 boxes plus text) is loaded, then one thing is
|
|
5
|
+
* changed per frame: a text node, a class, an inline width, and a burst of
|
|
6
|
+
* pointer moves. The engine reports what each frame actually did through
|
|
7
|
+
* `win.stats()` (see `runtime/ext_gui/perf.h`), and the test pins the shape of
|
|
8
|
+
* that work:
|
|
9
|
+
*
|
|
10
|
+
* - a text/class/width change restyles once and repaints once;
|
|
11
|
+
* - a pointer move over a page without `:hover` rules does not restyle;
|
|
12
|
+
* - an idle frame lays out, paints, uploads and presents nothing (a present
|
|
13
|
+
* the window system asked for, or one a starved frame had to defer, is
|
|
14
|
+
* reported separately as `exposes`/`deferred` and is not counted as the
|
|
15
|
+
* page's work);
|
|
16
|
+
* - `@media` is evaluated once per rule, not once per rule and node;
|
|
17
|
+
* - unchanged text is shaped once and then served from the cache.
|
|
18
|
+
*
|
|
19
|
+
* Only counters are asserted (they are deterministic); the wall-clock numbers
|
|
20
|
+
* are printed for a human and, on the machine that ran the suite, compared
|
|
21
|
+
* against `XBINTSC_GUI_PERF_STRICT_MS` (unset in CI, where the GPU is software).
|
|
22
|
+
*/
|
|
23
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
24
|
+
import { createGuiHarness, guiAvailable } from "./gui-helpers.js";
|
|
25
|
+
const harness = createGuiHarness();
|
|
26
|
+
/** The row count of the generated page (three elements per row). */
|
|
27
|
+
const ROWS = 200;
|
|
28
|
+
/** Parse `perf.<phase> key=value ...` lines out of the program's stdout. */
|
|
29
|
+
function parsePhases(stdout) {
|
|
30
|
+
const phases = {};
|
|
31
|
+
for (const line of stdout.split("\n")) {
|
|
32
|
+
const match = /^(perf\.[a-z0-9]+)[ \t]+(.*)$/.exec(line);
|
|
33
|
+
if (match === null)
|
|
34
|
+
continue;
|
|
35
|
+
const phase = match[1];
|
|
36
|
+
const rest = match[2];
|
|
37
|
+
if (phase === undefined || rest === undefined)
|
|
38
|
+
continue;
|
|
39
|
+
const fields = {};
|
|
40
|
+
for (const token of rest.split(/\s+/)) {
|
|
41
|
+
const equals = token.indexOf("=");
|
|
42
|
+
if (equals > 0)
|
|
43
|
+
fields[token.slice(0, equals)] = token.slice(equals + 1);
|
|
44
|
+
}
|
|
45
|
+
phases[phase] = fields;
|
|
46
|
+
}
|
|
47
|
+
return phases;
|
|
48
|
+
}
|
|
49
|
+
function count(phases, phase, key) {
|
|
50
|
+
const fields = phases[phase];
|
|
51
|
+
if (fields === undefined)
|
|
52
|
+
throw new Error(`missing ${phase} line in the program output`);
|
|
53
|
+
const raw = fields[key];
|
|
54
|
+
if (raw === undefined)
|
|
55
|
+
throw new Error(`missing ${phase}.${key} in the program output`);
|
|
56
|
+
const value = Number(raw);
|
|
57
|
+
if (Number.isNaN(value))
|
|
58
|
+
throw new Error(`${phase}.${key} is not a number`);
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Presents the page caused: every presented frame minus the ones the frame loop
|
|
63
|
+
* had to attribute to something other than this frame's work.
|
|
64
|
+
*
|
|
65
|
+
* `exposes` is a redraw the *window system* asked for. A headless X server maps
|
|
66
|
+
* the window whenever it gets around to it and then sends `Expose`, which the
|
|
67
|
+
* engine must honour (the window has no contents) — that arrives at a time no
|
|
68
|
+
* test can schedule, and only on a slow runner does it land inside the quiet
|
|
69
|
+
* sample. `deferred` is a present a starved frame had to postpone: SDL's
|
|
70
|
+
* non-blocking swapchain acquire skips a frame while the GPU still holds the
|
|
71
|
+
* image, and the engine then presents the retained paint on the next frame (see
|
|
72
|
+
* `runtime/ext_gui/perf.h`).
|
|
73
|
+
*/
|
|
74
|
+
function pagePresents(phases, phase) {
|
|
75
|
+
return (count(phases, phase, "presents") -
|
|
76
|
+
count(phases, phase, "exposes") -
|
|
77
|
+
count(phases, phase, "deferred"));
|
|
78
|
+
}
|
|
79
|
+
describe.skipIf(!guiAvailable)("gui extension — rendering performance", () => {
|
|
80
|
+
beforeAll(() => harness.setup());
|
|
81
|
+
afterAll(() => harness.cleanup());
|
|
82
|
+
it("scales with the change instead of the whole document", () => {
|
|
83
|
+
const result = harness.compileAndRun("perf-stress", `
|
|
84
|
+
import { createWindow, run } from "gui";
|
|
85
|
+
|
|
86
|
+
const ROWS = ${ROWS};
|
|
87
|
+
|
|
88
|
+
const CSS = \`
|
|
89
|
+
* { margin: 0; padding: 0; }
|
|
90
|
+
html, body { background-color: #05070a; color: #d0d8e0; font-size: 12px; }
|
|
91
|
+
.row { display: flex; height: 22px; padding: 2px 6px; background-color: #101418; }
|
|
92
|
+
.label { flex: 1; color: #d0d8e0; }
|
|
93
|
+
.value { width: 80px; color: #6fd3a0; }
|
|
94
|
+
.hot { background-color: #2a303a; }
|
|
95
|
+
@media (max-width: 500px) { .row { height: 16px; } }
|
|
96
|
+
@media (min-width: 500px) { .value { width: 90px; } }
|
|
97
|
+
\`;
|
|
98
|
+
|
|
99
|
+
let body = "";
|
|
100
|
+
for (let i = 0; i < ROWS; i++) {
|
|
101
|
+
body = body + '<div class="row"><span class="label">Item ' + i +
|
|
102
|
+
'</span><span class="value">' + (1000 + i) + "</span></div>";
|
|
103
|
+
}
|
|
104
|
+
const HTML = "<html><head><style>" + CSS + "</style></head><body>" +
|
|
105
|
+
"<div id='root'>" + body + "</div></body></html>";
|
|
106
|
+
|
|
107
|
+
const win = createWindow({ title: "perf", width: 900, height: 700 });
|
|
108
|
+
win.setBackground("#05070a");
|
|
109
|
+
win.loadHTML(HTML);
|
|
110
|
+
|
|
111
|
+
const doc = win.document;
|
|
112
|
+
const labels = doc.querySelectorAll(".label");
|
|
113
|
+
const values = doc.querySelectorAll(".value");
|
|
114
|
+
const rows = doc.querySelectorAll(".row");
|
|
115
|
+
|
|
116
|
+
const round = (value: number): number => Math.round(value * 100) / 100;
|
|
117
|
+
|
|
118
|
+
/** Print the work the frame that just finished did. */
|
|
119
|
+
const report = (label: string, before: any, after: any): void => {
|
|
120
|
+
console.log(label +
|
|
121
|
+
" restyles=" + (after.restyles - before.restyles) +
|
|
122
|
+
" nodes=" + (after.restyleNodes - before.restyleNodes) +
|
|
123
|
+
" rules=" + (after.rulesEvaluated - before.rulesEvaluated) +
|
|
124
|
+
" media=" + (after.mediaEvaluated - before.mediaEvaluated) +
|
|
125
|
+
" layouts=" + (after.layouts - before.layouts) +
|
|
126
|
+
" boxes=" + (after.layoutBoxes - before.layoutBoxes) +
|
|
127
|
+
" shapes=" + (after.textShapeCalls - before.textShapeCalls) +
|
|
128
|
+
" hits=" + (after.textShapeHits - before.textShapeHits) +
|
|
129
|
+
" paints=" + (after.paints - before.paints) +
|
|
130
|
+
" ops=" + (after.paintOps - before.paintOps) +
|
|
131
|
+
" runs=" + (after.drawRuns - before.drawRuns) +
|
|
132
|
+
" draws=" + (after.drawCalls - before.drawCalls) +
|
|
133
|
+
" uploads=" + (after.uploadSubmits - before.uploadSubmits) +
|
|
134
|
+
" presents=" + (after.presents - before.presents) +
|
|
135
|
+
" exposes=" + (after.exposes - before.exposes) +
|
|
136
|
+
" deferred=" + (after.deferred - before.deferred) +
|
|
137
|
+
" starved=" + (after.starvedFrames - before.starvedFrames) +
|
|
138
|
+
" frames=" + (after.frames - before.frames) +
|
|
139
|
+
" sync=" + (after.syncNodes - before.syncNodes) +
|
|
140
|
+
" ms=" + round(after.frameMs) +
|
|
141
|
+
" restyleMs=" + round(after.restyleMs) +
|
|
142
|
+
" layoutMs=" + round(after.layoutMs) +
|
|
143
|
+
" paintMs=" + round(after.paintMs) +
|
|
144
|
+
" uploadMs=" + round(after.uploadMs) +
|
|
145
|
+
" drawMs=" + round(after.drawMs));
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
const phases = ["perf.idle", "perf.text", "perf.class", "perf.width", "perf.hover"];
|
|
149
|
+
let step = 0;
|
|
150
|
+
let before: any = null;
|
|
151
|
+
let tailBefore: any = null;
|
|
152
|
+
let tailStarted = false;
|
|
153
|
+
|
|
154
|
+
const apply = (index: number): void => {
|
|
155
|
+
if (index === 1) labels[0].textContent = "Item 0 changed";
|
|
156
|
+
else if (index === 2) rows[5].classList.add("hot");
|
|
157
|
+
else if (index === 3) values[7].style.width = "120px";
|
|
158
|
+
else if (index === 4) {
|
|
159
|
+
for (let i = 0; i < 6; i++) win.sendEvent("mousemove", { x: 200, y: 40 + i * 22 });
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const finish = (): void => {
|
|
164
|
+
const now: any = win.stats();
|
|
165
|
+
report("perf.idle2", tailBefore, now);
|
|
166
|
+
console.log("perf.page rows=" + ROWS + " labels=" + labels.length +
|
|
167
|
+
" treeNodes=" + now.treeNodes);
|
|
168
|
+
win.close();
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/* The quiet-period sample: the first timer snapshot still contains the
|
|
172
|
+
* last animated frame, so take one more 60 ms apart and compare from
|
|
173
|
+
* there. No animation frame is pending, so the engine must present
|
|
174
|
+
* nothing while the counter still advances. */
|
|
175
|
+
const tail = (): void => {
|
|
176
|
+
if (tailStarted) return;
|
|
177
|
+
tailStarted = true;
|
|
178
|
+
tailBefore = win.stats();
|
|
179
|
+
win.setTimeout(finish, 60);
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const tick = (): void => {
|
|
183
|
+
const now: any = win.stats();
|
|
184
|
+
if (before !== null && step <= phases.length) report(phases[step - 1], before, now);
|
|
185
|
+
if (step >= phases.length) {
|
|
186
|
+
win.setTimeout(tail, 40);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
before = now;
|
|
190
|
+
apply(step);
|
|
191
|
+
step = step + 1;
|
|
192
|
+
win.requestAnimationFrame(tick);
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
win.on("ready", () => {
|
|
196
|
+
console.log("perf.ready driver=" + win.driver());
|
|
197
|
+
win.requestAnimationFrame(tick);
|
|
198
|
+
});
|
|
199
|
+
win.on("close", () => console.log("perf.closed"));
|
|
200
|
+
run();
|
|
201
|
+
console.log("perf.exit");
|
|
202
|
+
`, { autocloseMs: 8000, console: true });
|
|
203
|
+
expect(result.stdout).toContain("perf.ready");
|
|
204
|
+
expect(result.stdout).toContain("perf.closed");
|
|
205
|
+
const phases = parsePhases(result.stdout);
|
|
206
|
+
/* The generated page really is the large one. */
|
|
207
|
+
expect(count(phases, "perf.page", "rows")).toBe(ROWS);
|
|
208
|
+
expect(count(phases, "perf.page", "labels")).toBe(ROWS);
|
|
209
|
+
expect(count(phases, "perf.page", "treeNodes")).toBeGreaterThan(ROWS * 4);
|
|
210
|
+
/* First animated frame after the document settled: it presents, but the
|
|
211
|
+
* document is not restyled, laid out or repainted again. The sample is a
|
|
212
|
+
* single frame, so an expose the window system asked for in it coalesces
|
|
213
|
+
* into the same present and does not change the count. If the GPU or the
|
|
214
|
+
* compositor had no image for it, the frame is counted as `starved` instead
|
|
215
|
+
* and its present happens on a later frame. */
|
|
216
|
+
expect(count(phases, "perf.idle", "restyles")).toBe(0);
|
|
217
|
+
expect(count(phases, "perf.idle", "layouts")).toBe(0);
|
|
218
|
+
expect(count(phases, "perf.idle", "paints")).toBe(0);
|
|
219
|
+
const idlePresented = count(phases, "perf.idle", "presents") + count(phases, "perf.idle", "starved");
|
|
220
|
+
expect(idlePresented).toBe(1);
|
|
221
|
+
/* Every presented frame issues one draw per run — the documented cost of
|
|
222
|
+
* the current painter-order batching. */
|
|
223
|
+
if (count(phases, "perf.idle", "presents") > 0) {
|
|
224
|
+
expect(count(phases, "perf.idle", "draws")).toBeGreaterThanOrEqual(ROWS);
|
|
225
|
+
}
|
|
226
|
+
/* One text change: one restyle, one layout, one repaint. */
|
|
227
|
+
expect(count(phases, "perf.text", "restyles")).toBe(1);
|
|
228
|
+
expect(count(phases, "perf.text", "nodes")).toBeGreaterThan(ROWS * 2);
|
|
229
|
+
expect(count(phases, "perf.text", "layouts")).toBe(1);
|
|
230
|
+
expect(count(phases, "perf.text", "paints")).toBe(1);
|
|
231
|
+
/* The repaint rebuilt the alternating runs, and the frame that drew them
|
|
232
|
+
* issued one draw per run. A frame with no drawable target (no swapchain
|
|
233
|
+
* image, a window with no drawable area) records no draws and is presented
|
|
234
|
+
* again later instead — the engine keeps the paint pending, so the runs are
|
|
235
|
+
* not lost; that is what `deferred` reports. */
|
|
236
|
+
expect(count(phases, "perf.text", "runs")).toBeGreaterThanOrEqual(ROWS);
|
|
237
|
+
const textDraws = count(phases, "perf.text", "draws");
|
|
238
|
+
if (textDraws > 0) {
|
|
239
|
+
expect(textDraws).toBe(count(phases, "perf.text", "runs"));
|
|
240
|
+
}
|
|
241
|
+
/* `@media` is evaluated once per rule, not once per rule and node. */
|
|
242
|
+
expect(count(phases, "perf.text", "media")).toBeLessThanOrEqual(2);
|
|
243
|
+
/* Text is shaped from the cache: only the changed words are new. */
|
|
244
|
+
expect(count(phases, "perf.text", "hits")).toBeGreaterThan(ROWS);
|
|
245
|
+
expect(count(phases, "perf.text", "shapes")).toBeLessThan(ROWS);
|
|
246
|
+
/* A class change repaints; a width change reflows. */
|
|
247
|
+
expect(count(phases, "perf.class", "paints")).toBe(1);
|
|
248
|
+
expect(count(phases, "perf.width", "layouts")).toBe(1);
|
|
249
|
+
/* Pointer moves over a document without `:hover` rules must not restyle. */
|
|
250
|
+
expect(count(phases, "perf.hover", "restyles")).toBe(0);
|
|
251
|
+
expect(count(phases, "perf.hover", "layouts")).toBe(0);
|
|
252
|
+
/* Nothing changed across a quiet period: no restyle, no layout, no paint,
|
|
253
|
+
* no upload, no present of the page's making and no draw, while frames keep
|
|
254
|
+
* being served. A present the window system asked for (`exposes`) or a
|
|
255
|
+
* starved frame deferred (`deferred`) is not the page's, but it does replay
|
|
256
|
+
* the retained draws — so the draw assertion only applies to a quiet window
|
|
257
|
+
* the compositor left alone. */
|
|
258
|
+
expect(count(phases, "perf.idle2", "frames")).toBeGreaterThan(0);
|
|
259
|
+
expect(count(phases, "perf.idle2", "restyles")).toBe(0);
|
|
260
|
+
expect(count(phases, "perf.idle2", "layouts")).toBe(0);
|
|
261
|
+
expect(count(phases, "perf.idle2", "paints")).toBe(0);
|
|
262
|
+
expect(count(phases, "perf.idle2", "uploads")).toBe(0);
|
|
263
|
+
expect(pagePresents(phases, "perf.idle2")).toBe(0);
|
|
264
|
+
if (count(phases, "perf.idle2", "exposes") === 0 &&
|
|
265
|
+
count(phases, "perf.idle2", "deferred") === 0) {
|
|
266
|
+
expect(count(phases, "perf.idle2", "draws")).toBe(0);
|
|
267
|
+
}
|
|
268
|
+
/* A human-readable wall-clock line, and an opt-in local budget. */
|
|
269
|
+
console.log("gui perf: " +
|
|
270
|
+
`textFrame=${count(phases, "perf.text", "ms")}ms ` +
|
|
271
|
+
`restyle=${count(phases, "perf.text", "restyleMs")}ms ` +
|
|
272
|
+
`layout=${count(phases, "perf.text", "layoutMs")}ms ` +
|
|
273
|
+
`paint=${count(phases, "perf.text", "paintMs")}ms ` +
|
|
274
|
+
`upload=${count(phases, "perf.text", "uploadMs")}ms ` +
|
|
275
|
+
`draw=${count(phases, "perf.text", "drawMs")}ms ` +
|
|
276
|
+
`runs=${count(phases, "perf.text", "runs")}`);
|
|
277
|
+
const strictMs = Number(process.env.XBINTSC_GUI_PERF_STRICT_MS ?? "0");
|
|
278
|
+
if (strictMs > 0) {
|
|
279
|
+
expect(count(phases, "perf.text", "ms")).toBeLessThan(strictMs);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
//# sourceMappingURL=gui-perf.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gui-perf.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-perf.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -132,6 +132,7 @@ export function bump(): number { n += seed; return n; }
|
|
|
132
132
|
const label = (name: string, value: any): void => console.log(name + "=" + value);
|
|
133
133
|
label("before", (win as any).probe === undefined ? "undefined" : "set");
|
|
134
134
|
win.loadHTML(page);
|
|
135
|
+
label("size", (win as any).innerWidth + "x" + (win as any).innerHeight);
|
|
135
136
|
label("probe", (win as any).probe);
|
|
136
137
|
win.close();
|
|
137
138
|
`, {
|
|
@@ -155,7 +156,14 @@ console.log("probe-module=" + ( window as any ).probe);
|
|
|
155
156
|
},
|
|
156
157
|
});
|
|
157
158
|
expect(value("before")).toBe("undefined");
|
|
158
|
-
|
|
159
|
+
const parts = value("probe").split(",");
|
|
160
|
+
/* The module ran during `loadHTML` and saw the same window the program
|
|
161
|
+
* holds. Its size is compared rather than asserted literally: a runner may
|
|
162
|
+
* clamp the requested 1280×720 to its display (the macOS CI window comes
|
|
163
|
+
* back smaller), and the point here is that the deferred module reads the
|
|
164
|
+
* real window, not a particular size. */
|
|
165
|
+
expect(parts[0]).toBe(value("size"));
|
|
166
|
+
expect(parts.slice(1)).toEqual(["3", "SPAN:ok", "120x80", "true"]);
|
|
159
167
|
});
|
|
160
168
|
});
|
|
161
169
|
//# sourceMappingURL=gui-script-import-order.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gui-script-import-order.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-script-import-order.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gui-script-import-order.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-script-import-order.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -175,7 +175,7 @@ describe.skipIf(!guiAvailable)("gui extension — WebGL", () => {
|
|
|
175
175
|
expect(stderr).not.toContain("pipeline creation failed");
|
|
176
176
|
expect(stderr).not.toContain("shader build");
|
|
177
177
|
});
|
|
178
|
-
it("supports blend constants, dynamic buffers, vertex textures, gl_FragDepth
|
|
178
|
+
it("supports blend constants, dynamic buffers, vertex textures, gl_FragDepth and context loss", () => {
|
|
179
179
|
const { value, stderr } = harness.compileAndRun("webgl-extra", `
|
|
180
180
|
import { createWindow } from "gui";
|
|
181
181
|
import page from "./page.html";
|
|
@@ -287,7 +287,7 @@ describe.skipIf(!guiAvailable)("gui extension — WebGL", () => {
|
|
|
287
287
|
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
|
288
288
|
label("vertex-texture", probe());
|
|
289
289
|
|
|
290
|
-
// --- shader-written depth is
|
|
290
|
+
// --- shader-written depth is translated ----------------------------
|
|
291
291
|
const depth_fs: any = gl.createShader(gl.FRAGMENT_SHADER);
|
|
292
292
|
gl.shaderSource(depth_fs, "precision mediump float;" +
|
|
293
293
|
"void main() { gl_FragDepth = 0.5; gl_FragColor = vec4(1.0); }");
|
|
@@ -325,8 +325,8 @@ describe.skipIf(!guiAvailable)("gui extension — WebGL", () => {
|
|
|
325
325
|
expect(value("vtex-vs")).toBe("true");
|
|
326
326
|
expect(value("vtex-link")).toBe("true");
|
|
327
327
|
expect(value("vertex-texture")).toBe("0,255,0,255");
|
|
328
|
-
expect(value("fragdepth")).toBe("
|
|
329
|
-
expect(value("fragdepth-log")).toContain("gl_FragDepth");
|
|
328
|
+
expect(value("fragdepth")).toBe("true");
|
|
329
|
+
expect(value("fragdepth-log")).not.toContain("gl_FragDepth is not supported");
|
|
330
330
|
expect(value("lose-ext")).toBe("true");
|
|
331
331
|
expect(value("lost")).toBe("true");
|
|
332
332
|
expect(value("lost-error")).toBe("37442"); // GL_CONTEXT_LOST_WEBGL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gui-webgl.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-webgl.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gui-webgl.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-webgl.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GUI e2e: comparative shadow samplers and `gl_FragDepth`.
|
|
3
|
+
*
|
|
4
|
+
* `sampler2DShadow` must reach SDL_GPU as a comparison sampler, and a fragment
|
|
5
|
+
* shader that writes `gl_FragDepth` must actually update the depth attachment.
|
|
6
|
+
* Both are checked by rendering and reading pixels back.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|