@openmixer/plugin-qualify 0.18.5 → 0.20.0
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/README.md +19 -730
- package/bin/plugin-qualify-sync.mjs +1 -1
- package/bin/plugin-qualify.mjs +9 -1
- package/dist/clap-qualify.d.ts +1 -1
- package/dist/compare.d.ts +311 -0
- package/dist/compare.js +502 -0
- package/dist/compare.js.map +1 -0
- package/dist/distributed-records.d.ts +0 -2
- package/dist/distributed-records.js +0 -2
- package/dist/distributed-records.js.map +1 -1
- package/dist/host-admission.d.ts +2 -2
- package/dist/host-admission.js +7 -0
- package/dist/host-admission.js.map +1 -1
- package/dist/hosting-codes.generated.d.ts +1 -0
- package/dist/hosting-codes.generated.js +1 -0
- package/dist/hosting-codes.generated.js.map +1 -1
- package/dist/hosting-suitability.d.ts +3 -1
- package/dist/hosting-suitability.js +9 -0
- package/dist/hosting-suitability.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lv2-loader.js +6 -5
- package/dist/lv2-loader.js.map +1 -1
- package/dist/measurement/format.d.ts +15 -0
- package/dist/measurement/format.js +19 -0
- package/dist/measurement/format.js.map +1 -1
- package/dist/measurement/sweep-jsonl.js +5 -1
- package/dist/measurement/sweep-jsonl.js.map +1 -1
- package/dist/measurement-grid.js +1 -1
- package/dist/pins-file.d.ts +22 -2
- package/dist/pins-file.js +118 -17
- package/dist/pins-file.js.map +1 -1
- package/dist/probe-merge.js +6 -0
- package/dist/probe-merge.js.map +1 -1
- package/dist/probe-runner.d.ts +4 -0
- package/dist/probe-runner.js +12 -3
- package/dist/probe-runner.js.map +1 -1
- package/dist/qualification-record.d.ts +33 -1
- package/dist/qualification-record.js +36 -3
- package/dist/qualification-record.js.map +1 -1
- package/dist/qualify-declarations.d.ts +6 -0
- package/dist/qualify-declarations.js +8 -0
- package/dist/qualify-declarations.js.map +1 -1
- package/dist/qualify-isolated.d.ts +16 -3
- package/dist/qualify-isolated.js +31 -3
- package/dist/qualify-isolated.js.map +1 -1
- package/dist/qualify-pool.d.ts +129 -0
- package/dist/qualify-pool.js +290 -0
- package/dist/qualify-pool.js.map +1 -0
- package/dist/qualify-rejudge.js +7 -0
- package/dist/qualify-rejudge.js.map +1 -1
- package/dist/qualify-sync.d.ts +37 -2
- package/dist/qualify-sync.js +148 -24
- package/dist/qualify-sync.js.map +1 -1
- package/dist/records-package.d.ts +5 -0
- package/dist/records-package.js +25 -8
- package/dist/records-package.js.map +1 -1
- package/fixtures/clap-scan/fake.json +8 -2
- package/fixtures/probe-output/success-msi.json +2 -2
- package/package.json +3 -3
- package/src/clap-qualify.ts +1 -1
- package/src/compare.ts +699 -0
- package/src/distributed-records.ts +0 -3
- package/src/host-admission.ts +9 -2
- package/src/hosting-codes.generated.ts +1 -0
- package/src/hosting-suitability.ts +14 -0
- package/src/index.ts +1 -0
- package/src/lv2-loader.ts +5 -4
- package/src/measurement/format.ts +32 -0
- package/src/measurement/sweep-jsonl.ts +5 -1
- package/src/measurement-grid.ts +1 -1
- package/src/pins-file.ts +109 -16
- package/src/probe-merge.ts +4 -0
- package/src/probe-runner.ts +16 -6
- package/src/qualification-record.ts +59 -4
- package/src/qualify-declarations.ts +8 -0
- package/src/qualify-isolated.ts +31 -5
- package/src/qualify-pool.ts +318 -0
- package/src/qualify-rejudge.ts +8 -0
- package/src/qualify-sync.ts +145 -24
- package/src/records-package.ts +25 -8
- package/tools/benchmark.py +9 -3
- package/tools/compare-host.mjs +432 -0
- package/tools/compare-run.mjs +355 -0
- package/tools/descriptors.py +27 -0
- package/tools/isolated-step.mjs +3 -1
- package/tools/lilv_load.py +25 -0
- package/tools/lv2_resolve.py +3 -1
- package/tools/pool-step.mjs +186 -0
- package/tools/scan.py +16 -20
- package/tools/audit-overlap.sh +0 -250
- package/tools/commit-message-check.sh +0 -128
- package/tools/commit-message-patterns.json +0 -41
- package/tools/private-refs-check.sh +0 -90
package/dist/compare.js
ADDED
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
// Copyright (C) 2026 Pau Aliagas <linuxnow@gmail.com>
|
|
3
|
+
/**
|
|
4
|
+
* `plugin-qualify compare`: every plugin through every host with the same checks, one row per plugin per host.
|
|
5
|
+
*
|
|
6
|
+
* The hosts are mod-host and jalv, the two LV2 hosts a Zynthian or a MOD device runs, and ours: omx-clap-host (one
|
|
7
|
+
* process, the LV2 adapter for LV2, CLAP as itself) and plugin-hostd (a worker per plugin). Every host runs on one
|
|
8
|
+
* private JACK server at one rate and quantum, with the same timeouts, the same stimulus (a tone into an effect, notes
|
|
9
|
+
* into an instrument), the same number of load cycles, the same soak and the same real-time watch.
|
|
10
|
+
*
|
|
11
|
+
* This file holds every decision and no process: the arguments, which host a plugin goes to, how one host's raw
|
|
12
|
+
* observation (`tools/compare-host.mjs` prints it) becomes the row's checks, the comparison record of a plugin, and the
|
|
13
|
+
* summary of a directory of them. A check a host does not let us observe is `not-observable`, never `fail`; a host that
|
|
14
|
+
* is not installed is `skipped` with the reason, never left out.
|
|
15
|
+
*/
|
|
16
|
+
import { createHash } from "node:crypto";
|
|
17
|
+
export const COMPARISON_RECORD_SCHEMA = "plugin-qualify.comparison-record/1";
|
|
18
|
+
export const COMPARISON_SUMMARY_SCHEMA = "plugin-qualify.comparison-summary/1";
|
|
19
|
+
export const COMPARISON_RECORD_SUFFIX = ".comparison.json";
|
|
20
|
+
export const COMPARISON_SUMMARY_FILE = "comparison-summary.json";
|
|
21
|
+
/** The hosts, in the order their rows are written. */
|
|
22
|
+
export const COMPARE_HOSTS = ["omx-clap-host", "plugin-hostd", "mod-host", "jalv"];
|
|
23
|
+
/** The references a published comparison is measured against: without both, a summary is not publishable. */
|
|
24
|
+
export const REFERENCE_HOSTS = ["mod-host", "jalv"];
|
|
25
|
+
export const HOST_TRAITS = {
|
|
26
|
+
"omx-clap-host": {
|
|
27
|
+
program: "omx-clap-host",
|
|
28
|
+
drive: "protocol",
|
|
29
|
+
formats: ["lv2", "clap"],
|
|
30
|
+
latency: { observable: true, how: "the host sets a JACK latency callback: the plugin's latency is on its output port's capture range" },
|
|
31
|
+
rt: "its JACK process callback, counted by rt_watch.so",
|
|
32
|
+
},
|
|
33
|
+
"plugin-hostd": {
|
|
34
|
+
program: "plugin-hostd",
|
|
35
|
+
drive: "protocol",
|
|
36
|
+
formats: ["lv2", "clap"],
|
|
37
|
+
latency: { observable: true, how: "its worker (omx-clap-host) sets a JACK latency callback" },
|
|
38
|
+
rt: "the JACK process callback of every process it starts, counted by rt_watch.so",
|
|
39
|
+
},
|
|
40
|
+
"mod-host": {
|
|
41
|
+
program: "mod-host",
|
|
42
|
+
drive: "protocol",
|
|
43
|
+
formats: ["lv2"],
|
|
44
|
+
latency: { observable: false, how: "mod-host sets no JACK latency callback, so a plugin's latency is not on its ports" },
|
|
45
|
+
rt: "its JACK process callback, counted by rt_watch.so",
|
|
46
|
+
},
|
|
47
|
+
jalv: {
|
|
48
|
+
program: "jalv",
|
|
49
|
+
drive: "process",
|
|
50
|
+
formats: ["lv2"],
|
|
51
|
+
latency: { observable: true, how: "jalv sets a JACK latency callback: the plugin's latency is on its output port's capture range" },
|
|
52
|
+
rt: "its JACK process callback, counted by rt_watch.so",
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export const isCompareHost = (s) => COMPARE_HOSTS.includes(s);
|
|
56
|
+
export const COMPARE_DEFAULTS = {
|
|
57
|
+
rate: 48000,
|
|
58
|
+
quantum: 256,
|
|
59
|
+
cycles: 5,
|
|
60
|
+
soakS: 10,
|
|
61
|
+
windowMs: 2000,
|
|
62
|
+
timeoutMs: 10000,
|
|
63
|
+
};
|
|
64
|
+
const positiveInt = (v) => (v !== undefined && /^[1-9]\d*$/.test(v) ? Number(v) : undefined);
|
|
65
|
+
export function parseCompareArgs(argv) {
|
|
66
|
+
let help = false;
|
|
67
|
+
let all = false;
|
|
68
|
+
let publish = false;
|
|
69
|
+
let force = false;
|
|
70
|
+
let format = "text";
|
|
71
|
+
const targets = [];
|
|
72
|
+
let hosts = [...COMPARE_HOSTS];
|
|
73
|
+
const n = { ...COMPARE_DEFAULTS };
|
|
74
|
+
let out;
|
|
75
|
+
let hostClass;
|
|
76
|
+
let set;
|
|
77
|
+
let server;
|
|
78
|
+
let limit = 0;
|
|
79
|
+
const numeric = {
|
|
80
|
+
"--rate": "rate",
|
|
81
|
+
"--quantum": "quantum",
|
|
82
|
+
"--cycles": "cycles",
|
|
83
|
+
"--soak": "soakS",
|
|
84
|
+
"--window-ms": "windowMs",
|
|
85
|
+
"--timeout-ms": "timeoutMs",
|
|
86
|
+
};
|
|
87
|
+
for (let i = 0; i < argv.length; i++) {
|
|
88
|
+
const a = argv[i] ?? "";
|
|
89
|
+
const key = numeric[a];
|
|
90
|
+
const value = () => argv[++i];
|
|
91
|
+
if (a === "-h" || a === "--help")
|
|
92
|
+
help = true;
|
|
93
|
+
else if (a === "--all")
|
|
94
|
+
all = true;
|
|
95
|
+
else if (a === "--publish")
|
|
96
|
+
publish = true;
|
|
97
|
+
else if (a === "--force")
|
|
98
|
+
force = true;
|
|
99
|
+
else if (a === "--hosts") {
|
|
100
|
+
const v = value();
|
|
101
|
+
const list = (v ?? "").split(",").filter(Boolean);
|
|
102
|
+
const bad = list.filter((h) => !isCompareHost(h));
|
|
103
|
+
if (list.length === 0 || bad.length > 0)
|
|
104
|
+
return { ok: false, error: `--hosts takes a list of ${COMPARE_HOSTS.join(", ")}${bad.length ? `; not a host: ${bad.join(", ")}` : ""}` };
|
|
105
|
+
hosts = COMPARE_HOSTS.filter((h) => list.includes(h));
|
|
106
|
+
}
|
|
107
|
+
else if (key !== undefined) {
|
|
108
|
+
const v = positiveInt(value());
|
|
109
|
+
if (v === undefined)
|
|
110
|
+
return { ok: false, error: `${a} takes a whole number above 0` };
|
|
111
|
+
n[key] = v;
|
|
112
|
+
}
|
|
113
|
+
else if (a === "--limit") {
|
|
114
|
+
const v = positiveInt(value());
|
|
115
|
+
if (v === undefined)
|
|
116
|
+
return { ok: false, error: "--limit takes a whole number above 0" };
|
|
117
|
+
limit = v;
|
|
118
|
+
}
|
|
119
|
+
else if (a === "--out")
|
|
120
|
+
out = value();
|
|
121
|
+
else if (a === "--host-class")
|
|
122
|
+
hostClass = value();
|
|
123
|
+
else if (a === "--set")
|
|
124
|
+
set = value();
|
|
125
|
+
else if (a === "--server")
|
|
126
|
+
server = value();
|
|
127
|
+
else if (a === "--format") {
|
|
128
|
+
const v = value();
|
|
129
|
+
if (v !== "text" && v !== "json")
|
|
130
|
+
return { ok: false, error: "--format is text or json" };
|
|
131
|
+
format = v;
|
|
132
|
+
}
|
|
133
|
+
else if (a.startsWith("-"))
|
|
134
|
+
return { ok: false, error: `unknown option ${a}` };
|
|
135
|
+
else
|
|
136
|
+
targets.push(a);
|
|
137
|
+
}
|
|
138
|
+
for (const [k, v] of [["--out", out], ["--host-class", hostClass], ["--set", set], ["--server", server]]) {
|
|
139
|
+
if (argv.includes(k) && (v === undefined || v.startsWith("-")))
|
|
140
|
+
return { ok: false, error: `${k} needs a value` };
|
|
141
|
+
}
|
|
142
|
+
if (!help && !all && targets.length === 0)
|
|
143
|
+
return { ok: false, error: "name the plugins (LV2 URIs, bundles or .clap files) or --all" };
|
|
144
|
+
if (all && targets.length > 0)
|
|
145
|
+
return { ok: false, error: "--all and named plugins do not go together" };
|
|
146
|
+
if (publish && (out === undefined || hostClass === undefined || set === undefined)) {
|
|
147
|
+
return { ok: false, error: "--publish writes a summary for the records: it needs --out, --host-class and --set" };
|
|
148
|
+
}
|
|
149
|
+
if (publish && !REFERENCE_HOSTS.every((h) => hosts.includes(h))) {
|
|
150
|
+
return { ok: false, error: `--publish compares against ${REFERENCE_HOSTS.join(" and ")}: --hosts must name them` };
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
ok: true,
|
|
154
|
+
args: {
|
|
155
|
+
help,
|
|
156
|
+
all,
|
|
157
|
+
targets,
|
|
158
|
+
hosts,
|
|
159
|
+
rate: n.rate,
|
|
160
|
+
quantum: n.quantum,
|
|
161
|
+
cycles: n.cycles,
|
|
162
|
+
soakS: n.soakS,
|
|
163
|
+
windowMs: n.windowMs,
|
|
164
|
+
timeoutMs: n.timeoutMs,
|
|
165
|
+
out,
|
|
166
|
+
hostClass,
|
|
167
|
+
set,
|
|
168
|
+
publish,
|
|
169
|
+
server,
|
|
170
|
+
limit,
|
|
171
|
+
force,
|
|
172
|
+
format,
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export function compareHelpText() {
|
|
177
|
+
return [
|
|
178
|
+
"usage: plugin-qualify compare [options] (--all | <LV2 URI | bundle | .clap> ...)",
|
|
179
|
+
"",
|
|
180
|
+
"Runs every plugin through each host with the same checks, one row per plugin per host: it loads, it",
|
|
181
|
+
"instantiates, it gives output (an effect a tone, an instrument notes), it survives the load cycles and the soak,",
|
|
182
|
+
"its audio thread allocates, locks or makes a system call or not (rt_watch.so around the host's JACK process",
|
|
183
|
+
"callback), its CPU and the latency the host reports. A check a host does not let us see is `not-observable`.",
|
|
184
|
+
"",
|
|
185
|
+
` --hosts <list> of ${COMPARE_HOSTS.join(",")} (default all); one not installed is skipped, with the reason`,
|
|
186
|
+
` --rate <hz> of the private JACK server (default ${String(COMPARE_DEFAULTS.rate)})`,
|
|
187
|
+
` --quantum <frames> (default ${String(COMPARE_DEFAULTS.quantum)})`,
|
|
188
|
+
` --cycles <n> load and unload cycles before the run (default ${String(COMPARE_DEFAULTS.cycles)})`,
|
|
189
|
+
` --soak <s> seconds the plugin runs under its stimulus (default ${String(COMPARE_DEFAULTS.soakS)})`,
|
|
190
|
+
` --window-ms <ms> the output window, at the start and at the end of the soak (default ${String(COMPARE_DEFAULTS.windowMs)})`,
|
|
191
|
+
` --timeout-ms <ms> the budget of one host step: a reply, a client on the graph (default ${String(COMPARE_DEFAULTS.timeoutMs)})`,
|
|
192
|
+
" --server <name> use this running JACK server instead of starting a private one (dummy driver)",
|
|
193
|
+
" --limit <n> the first n plugins only",
|
|
194
|
+
" --force compare again a plugin whose record in --out was made under the same conditions",
|
|
195
|
+
` --out <dir> write one ${COMPARISON_RECORD_SUFFIX} per plugin and ${COMPARISON_SUMMARY_FILE} there`,
|
|
196
|
+
" --host-class <c> the machine class the summary is for (rpi5, x86-64)",
|
|
197
|
+
" --set <name> the plugin set the summary is for (zynthian-vangelis, fedora44)",
|
|
198
|
+
` --publish a summary for the records: refused unless ${REFERENCE_HOSTS.join(" and ")} are installed and ran`,
|
|
199
|
+
" --format text|json",
|
|
200
|
+
"",
|
|
201
|
+
"exit 0 the comparison ran / 1 a --publish run lacked a reference host / 2 nothing could be compared",
|
|
202
|
+
"",
|
|
203
|
+
].join("\n");
|
|
204
|
+
}
|
|
205
|
+
/** The reference hosts a publishable summary lacks, by name, with the reason each is missing. */
|
|
206
|
+
export function missingReferences(present) {
|
|
207
|
+
return REFERENCE_HOSTS.flatMap((h) => {
|
|
208
|
+
const p = present.find((x) => x.host === h);
|
|
209
|
+
if (p === undefined)
|
|
210
|
+
return [{ host: h, reason: "not asked for with --hosts" }];
|
|
211
|
+
if (!p.installed)
|
|
212
|
+
return [{ host: h, reason: p.reason ?? `${HOST_TRAITS[h].program} is not installed` }];
|
|
213
|
+
return [];
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/** What a directory of records says of each host: it ran where a row of it ran, else the reason its rows give. */
|
|
217
|
+
export function presenceFromRecords(records) {
|
|
218
|
+
return COMPARE_HOSTS.flatMap((h) => {
|
|
219
|
+
const rows = records.flatMap((r) => r.hosts.filter((x) => x.host === h));
|
|
220
|
+
if (rows.length === 0)
|
|
221
|
+
return [];
|
|
222
|
+
const ran = rows.find((x) => x.status === "ran");
|
|
223
|
+
if (ran !== undefined)
|
|
224
|
+
return [{ host: h, installed: true, version: ran.version }];
|
|
225
|
+
if (rows.every((x) => x.status === "not-applicable"))
|
|
226
|
+
return [{ host: h, installed: true, version: rows[0]?.version ?? null }];
|
|
227
|
+
const skipped = rows.find((x) => x.status === "skipped");
|
|
228
|
+
return [{ host: h, installed: false, version: null, reason: skipped?.reason ?? `${HOST_TRAITS[h].program} did not run` }];
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
export function parseSummaryArgs(argv) {
|
|
232
|
+
let dir;
|
|
233
|
+
let hostClass;
|
|
234
|
+
let set;
|
|
235
|
+
let publish = false;
|
|
236
|
+
let help = false;
|
|
237
|
+
for (let i = 0; i < argv.length; i++) {
|
|
238
|
+
const a = argv[i] ?? "";
|
|
239
|
+
if (a === "-h" || a === "--help")
|
|
240
|
+
help = true;
|
|
241
|
+
else if (a === "--publish")
|
|
242
|
+
publish = true;
|
|
243
|
+
else if (a === "--host-class")
|
|
244
|
+
hostClass = argv[++i];
|
|
245
|
+
else if (a === "--set")
|
|
246
|
+
set = argv[++i];
|
|
247
|
+
else if (a.startsWith("-"))
|
|
248
|
+
return { ok: false, error: `unknown option ${a}` };
|
|
249
|
+
else if (dir === undefined)
|
|
250
|
+
dir = a;
|
|
251
|
+
else
|
|
252
|
+
return { ok: false, error: "one directory" };
|
|
253
|
+
}
|
|
254
|
+
if (help)
|
|
255
|
+
return { ok: true, args: { dir: dir ?? ".", publish, help } };
|
|
256
|
+
if (dir === undefined)
|
|
257
|
+
return { ok: false, error: "name the directory of the comparison records" };
|
|
258
|
+
if (publish && (hostClass === undefined || set === undefined))
|
|
259
|
+
return { ok: false, error: "--publish needs --host-class and --set" };
|
|
260
|
+
return { ok: true, args: { dir, publish, help, ...(hostClass === undefined ? {} : { hostClass }), ...(set === undefined ? {} : { set }) } };
|
|
261
|
+
}
|
|
262
|
+
export function summaryHelpText() {
|
|
263
|
+
return [
|
|
264
|
+
"usage: plugin-qualify compare summary <dir> [--host-class <c> --set <s> --publish]",
|
|
265
|
+
"",
|
|
266
|
+
`Reads every ${COMPARISON_RECORD_SUFFIX} in <dir> and writes ${COMPARISON_SUMMARY_FILE} beside them: per host the plugins`,
|
|
267
|
+
"it loads, runs clean, runs real-time safe and crashes on, and the plugins where each host does better than the others.",
|
|
268
|
+
`--publish marks it for the records, and is refused unless ${REFERENCE_HOSTS.join(" and ")} ran.`,
|
|
269
|
+
"",
|
|
270
|
+
].join("\n");
|
|
271
|
+
}
|
|
272
|
+
/** Two runs are the same comparison when every condition but the machine's JACK version and real-time grant agree. */
|
|
273
|
+
export function sameConditions(a, b) {
|
|
274
|
+
return a.rate === b.rate && a.quantum === b.quantum && a.cycles === b.cycles && a.soakS === b.soakS && a.windowMs === b.windowMs && a.timeoutMs === b.timeoutMs;
|
|
275
|
+
}
|
|
276
|
+
/** A peak at or under this is silence (-100 dBFS). */
|
|
277
|
+
export const SILENCE = 1e-5;
|
|
278
|
+
const audible = (p) => typeof p === "number" && Number.isFinite(p) && p > SILENCE;
|
|
279
|
+
/** The real-time verdict from the reports of the host's processes. */
|
|
280
|
+
export function rtCheckOf(reports) {
|
|
281
|
+
if (reports === undefined || reports.length === 0)
|
|
282
|
+
return { result: "not-observable", detail: "no process of the host reported (rt_watch.so was not loaded, or the host was gone)" };
|
|
283
|
+
const watched = reports.filter((r) => r.callbacks > 0);
|
|
284
|
+
const armed = watched.reduce((s, r) => s + r.armedCycles, 0);
|
|
285
|
+
if (watched.length === 0)
|
|
286
|
+
return { result: "not-observable", detail: "no process of the host set a JACK process callback that rt_watch.so could wrap" };
|
|
287
|
+
if (armed === 0)
|
|
288
|
+
return { result: "not-observable", detail: "the process callback never ran past its warm-up" };
|
|
289
|
+
const allocations = watched.reduce((s, r) => s + r.allocations, 0);
|
|
290
|
+
const locks = watched.reduce((s, r) => s + r.locks, 0);
|
|
291
|
+
const syscalls = watched.reduce((s, r) => s + r.syscalls, 0);
|
|
292
|
+
const trylocks = watched.reduce((s, r) => s + (r.trylocks ?? 0), 0);
|
|
293
|
+
const kinds = [...new Set(watched.flatMap((r) => r.kinds ?? []))];
|
|
294
|
+
const clean = allocations === 0 && locks === 0 && syscalls === 0;
|
|
295
|
+
return {
|
|
296
|
+
result: clean ? "pass" : "fail",
|
|
297
|
+
allocations,
|
|
298
|
+
locks,
|
|
299
|
+
trylocks,
|
|
300
|
+
syscalls,
|
|
301
|
+
cycles: armed,
|
|
302
|
+
...(kinds.length ? { kinds } : {}),
|
|
303
|
+
...(clean ? (trylocks > 0 ? { detail: `${String(trylocks)} try-locks on the audio thread over ${String(armed)} cycles; a try-lock never waits` } : {}) : { detail: `on the audio thread over ${String(armed)} cycles: ${String(allocations)} allocations, ${String(locks)} locks, ${String(syscalls)} system calls` }),
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
const NOT_RUN = (why) => ({ result: "not-run", detail: why });
|
|
307
|
+
/** One host's observation of one plugin as its row. */
|
|
308
|
+
export function hostRowOf(host, version, obs, conditions) {
|
|
309
|
+
const base = { host, version };
|
|
310
|
+
if (!obs.installed)
|
|
311
|
+
return { ...base, status: "skipped", reason: obs.problem ?? `${HOST_TRAITS[host].program} is not installed` };
|
|
312
|
+
if (obs.started === false)
|
|
313
|
+
return { ...base, status: "skipped", reason: obs.problem ?? `${HOST_TRAITS[host].program} did not start` };
|
|
314
|
+
const load = obs.load;
|
|
315
|
+
const loaded = load?.ok === true;
|
|
316
|
+
const loads = loaded
|
|
317
|
+
? { result: "pass" }
|
|
318
|
+
: { result: "fail", detail: load?.died ? `the host ended (${load.died})` : load?.resp !== undefined ? `resp ${String(load.resp)}` : load?.detail ?? "no answer in time" };
|
|
319
|
+
const ports = obs.ports;
|
|
320
|
+
const anyPort = ports !== undefined && ports.audioIn + ports.audioOut + ports.midiIn > 0;
|
|
321
|
+
const instantiates = !loaded ? NOT_RUN("it did not load") : anyPort ? { result: "pass" } : { result: "fail", detail: "no port of the plugin appeared on the graph" };
|
|
322
|
+
const running = loaded && anyPort;
|
|
323
|
+
let output;
|
|
324
|
+
if (!running)
|
|
325
|
+
output = { ...NOT_RUN("it is not running") };
|
|
326
|
+
else if (ports.audioOut === 0)
|
|
327
|
+
output = { result: "not-observable", detail: "the plugin has no audio output" };
|
|
328
|
+
else if (obs.peakProblem !== undefined)
|
|
329
|
+
output = { result: "not-observable", detail: obs.peakProblem };
|
|
330
|
+
else if ((obs.nonFinite ?? 0) > 0)
|
|
331
|
+
output = { result: "fail", detail: `the output is not finite (${String(obs.nonFinite)} NaN or infinite samples)`, peak: obs.peak ?? 0, stimulus: obs.stimulus ?? "none" };
|
|
332
|
+
else if (audible(obs.peak))
|
|
333
|
+
output = { result: "pass", peak: obs.peak, stimulus: obs.stimulus ?? "none" };
|
|
334
|
+
else if (obs.stimulus === "none" || obs.stimulus === undefined)
|
|
335
|
+
output = { result: "not-observable", detail: "no stimulus this plugin takes (no audio or MIDI input), and its output was silent", peak: obs.peak ?? 0, stimulus: "none" };
|
|
336
|
+
else
|
|
337
|
+
output = { result: "fail", detail: `silent under ${obs.stimulus}`, peak: obs.peak ?? 0, stimulus: obs.stimulus };
|
|
338
|
+
const c = obs.cycles;
|
|
339
|
+
const cycles = c === undefined
|
|
340
|
+
? { result: "not-run", done: 0, of: conditions.cycles, detail: "the cycles did not run" }
|
|
341
|
+
: c.done === c.of
|
|
342
|
+
? { result: "pass", done: c.done, of: c.of }
|
|
343
|
+
: { result: "fail", done: c.done, of: c.of, detail: c.died ? `the host ended at cycle ${String(c.done + 1)} (${c.died})` : `cycle ${String(c.done + 1)} failed${c.failedAt ? ` at ${c.failedAt}` : ""}` };
|
|
344
|
+
const s = obs.soak;
|
|
345
|
+
const soak = !running || s === undefined
|
|
346
|
+
? { result: "not-run", seconds: 0, detail: "it is not running" }
|
|
347
|
+
: s.alive
|
|
348
|
+
? { result: "pass", seconds: s.seconds, ...(typeof s.peakAtEnd === "number" ? { peakAtEnd: s.peakAtEnd } : {}) }
|
|
349
|
+
: { result: "fail", seconds: s.seconds, detail: `the host ended during the soak${s.died ? ` (${s.died})` : ""}` };
|
|
350
|
+
const rtSafe = !running ? { result: "not-run", detail: "it is not running" } : rtCheckOf(obs.rt);
|
|
351
|
+
const cpu = !running || obs.cpu === undefined
|
|
352
|
+
? { result: "not-run", detail: "it is not running" }
|
|
353
|
+
: "percent" in obs.cpu
|
|
354
|
+
? { result: "measured", percent: Math.round(obs.cpu.percent * 100) / 100 }
|
|
355
|
+
: { result: "not-observable", detail: obs.cpu.problem };
|
|
356
|
+
const traits = HOST_TRAITS[host];
|
|
357
|
+
const latency = !running
|
|
358
|
+
? { result: "not-run", detail: "it is not running" }
|
|
359
|
+
: !traits.latency.observable
|
|
360
|
+
? { result: "not-observable", detail: traits.latency.how }
|
|
361
|
+
: typeof obs.latencyFrames === "number"
|
|
362
|
+
? { result: "measured", frames: obs.latencyFrames }
|
|
363
|
+
: { result: "not-observable", detail: "the output port's latency could not be read" };
|
|
364
|
+
const crashed = obs.died !== undefined;
|
|
365
|
+
const runsClean = !crashed && loaded && running && cycles.result === "pass" && soak.result === "pass" && output.result !== "fail";
|
|
366
|
+
return {
|
|
367
|
+
...base,
|
|
368
|
+
status: "ran",
|
|
369
|
+
checks: { loads, instantiates, output, cycles, soak, rtSafe, cpu, latency },
|
|
370
|
+
...(crashed ? { crash: obs.died } : {}),
|
|
371
|
+
runsClean,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
/** The record's file name: the plugin's id made safe for a file, with a hash of the whole id so two ids never meet. */
|
|
375
|
+
export function comparisonFileName(format, id) {
|
|
376
|
+
const slug = id.replace(/^[a-z]+:\/\//i, "").replace(/[^A-Za-z0-9._-]+/g, "_").replace(/^[._]+|_+$/g, "").slice(0, 80);
|
|
377
|
+
const hash = createHash("sha256").update(`${format}\0${id}`).digest("hex").slice(0, 12);
|
|
378
|
+
return `${slug}-${format}-${hash}${COMPARISON_RECORD_SUFFIX}`;
|
|
379
|
+
}
|
|
380
|
+
export function comparisonRecordOf(plugin, stimulus, conditions, measuredAt, rows) {
|
|
381
|
+
const ordered = COMPARE_HOSTS.flatMap((h) => rows.filter((r) => r.host === h));
|
|
382
|
+
return { schema: COMPARISON_RECORD_SCHEMA, plugin, stimulus, conditions, measuredAt, hosts: ordered };
|
|
383
|
+
}
|
|
384
|
+
/** The row of a host that does not take this plugin's format. */
|
|
385
|
+
export function notApplicableRow(host, version, format) {
|
|
386
|
+
return { host, version, status: "not-applicable", reason: `${HOST_TRAITS[host].program} takes no ${format.toUpperCase()} plugin` };
|
|
387
|
+
}
|
|
388
|
+
/** Problems with a record's shape, empty when it is one: the records repository's check holds the same rules. */
|
|
389
|
+
export function comparisonRecordProblems(rec) {
|
|
390
|
+
const p = [];
|
|
391
|
+
const r = rec;
|
|
392
|
+
if (r === null || typeof r !== "object")
|
|
393
|
+
return ["not an object"];
|
|
394
|
+
if (r.schema !== COMPARISON_RECORD_SCHEMA)
|
|
395
|
+
p.push(`schema is ${JSON.stringify(r.schema)}`);
|
|
396
|
+
if (typeof r.plugin?.id !== "string" || typeof r.plugin.format !== "string")
|
|
397
|
+
p.push("names no plugin");
|
|
398
|
+
if (!Array.isArray(r.hosts) || r.hosts.length === 0)
|
|
399
|
+
p.push("holds no host row");
|
|
400
|
+
for (const h of r.hosts ?? []) {
|
|
401
|
+
if (!isCompareHost(String(h.host)))
|
|
402
|
+
p.push(`a row of the unknown host ${JSON.stringify(h.host)}`);
|
|
403
|
+
if (h.status === "ran" && (h.checks === undefined || typeof h.runsClean !== "boolean"))
|
|
404
|
+
p.push(`${h.host}: ran with no checks`);
|
|
405
|
+
if (h.status !== "ran" && !h.reason)
|
|
406
|
+
p.push(`${h.host}: ${String(h.status)} with no reason`);
|
|
407
|
+
}
|
|
408
|
+
return p;
|
|
409
|
+
}
|
|
410
|
+
const median = (xs) => {
|
|
411
|
+
if (xs.length === 0)
|
|
412
|
+
return null;
|
|
413
|
+
const s = [...xs].sort((a, b) => a - b);
|
|
414
|
+
const m = Math.floor(s.length / 2);
|
|
415
|
+
const hi = s[m] ?? 0;
|
|
416
|
+
return Math.round((s.length % 2 ? hi : ((s[m - 1] ?? hi) + hi) / 2) * 100) / 100;
|
|
417
|
+
};
|
|
418
|
+
/**
|
|
419
|
+
* The summary of a set of comparison records. `present` is what the run found installed; a host absent from every
|
|
420
|
+
* record is still listed, skipped, with its reason. Beats are counted between hosts that both ran the plugin.
|
|
421
|
+
*/
|
|
422
|
+
export function summarise(records, present, meta) {
|
|
423
|
+
const hostsSeen = COMPARE_HOSTS.filter((h) => present.some((p) => p.host === h) || records.some((r) => r.hosts.some((x) => x.host === h)));
|
|
424
|
+
const missing = missingReferences(present);
|
|
425
|
+
const ranRow = (r, h) => r.hosts.find((x) => x.host === h && x.status === "ran");
|
|
426
|
+
const totals = hostsSeen.map((h) => {
|
|
427
|
+
const p = present.find((x) => x.host === h);
|
|
428
|
+
const rows = records.map((r) => ranRow(r, h)).filter((x) => x !== undefined);
|
|
429
|
+
const version = p?.version ?? rows.find((r) => r.version !== null)?.version ?? null;
|
|
430
|
+
const count = (f) => rows.filter(f).length;
|
|
431
|
+
const skipped = rows.length === 0 && (p === undefined || !p.installed);
|
|
432
|
+
return {
|
|
433
|
+
host: h,
|
|
434
|
+
version,
|
|
435
|
+
status: skipped ? "skipped" : "ran",
|
|
436
|
+
...(skipped ? { reason: p?.reason ?? `${HOST_TRAITS[h].program} is not installed` } : {}),
|
|
437
|
+
plugins: rows.length,
|
|
438
|
+
loads: count((r) => r.checks?.loads.result === "pass"),
|
|
439
|
+
instantiates: count((r) => r.checks?.instantiates.result === "pass"),
|
|
440
|
+
output: count((r) => r.checks?.output.result === "pass"),
|
|
441
|
+
runsClean: count((r) => r.runsClean === true),
|
|
442
|
+
rtSafe: count((r) => r.checks?.rtSafe.result === "pass"),
|
|
443
|
+
rtObserved: count((r) => r.checks?.rtSafe.result === "pass" || r.checks?.rtSafe.result === "fail"),
|
|
444
|
+
crashes: count((r) => r.crash !== undefined),
|
|
445
|
+
cpuMedianPercent: median(rows.flatMap((r) => (r.checks?.cpu.result === "measured" && typeof r.checks.cpu.percent === "number" ? [r.checks.cpu.percent] : []))),
|
|
446
|
+
latencyObservable: HOST_TRAITS[h].latency.observable,
|
|
447
|
+
};
|
|
448
|
+
});
|
|
449
|
+
const ran = totals.filter((t) => t.status === "ran").map((t) => t.host);
|
|
450
|
+
const beats = {};
|
|
451
|
+
for (const h of ran)
|
|
452
|
+
beats[h] = [];
|
|
453
|
+
for (const r of records) {
|
|
454
|
+
for (const h of ran) {
|
|
455
|
+
const mine = ranRow(r, h);
|
|
456
|
+
const list = beats[h];
|
|
457
|
+
if (mine === undefined || list === undefined)
|
|
458
|
+
continue;
|
|
459
|
+
const others = ran.filter((o) => o !== h).map((o) => [o, ranRow(r, o)]).filter((x) => x[1] !== undefined);
|
|
460
|
+
const cleanOver = mine.runsClean === true ? others.filter(([, row]) => row.runsClean !== true).map(([o]) => o) : [];
|
|
461
|
+
if (cleanOver.length)
|
|
462
|
+
list.push({ format: r.plugin.format, id: r.plugin.id, over: cleanOver, on: "runs-clean" });
|
|
463
|
+
const rtOver = mine.checks?.rtSafe.result === "pass" ? others.filter(([, row]) => row.checks?.rtSafe.result === "fail").map(([o]) => o) : [];
|
|
464
|
+
if (rtOver.length)
|
|
465
|
+
list.push({ format: r.plugin.format, id: r.plugin.id, over: rtOver, on: "rt-safe" });
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
for (const list of Object.values(beats))
|
|
469
|
+
list.sort((a, b) => a.on.localeCompare(b.on) || a.format.localeCompare(b.format) || a.id.localeCompare(b.id));
|
|
470
|
+
const measured = records.map((r) => r.measuredAt).sort().pop() ?? null;
|
|
471
|
+
return {
|
|
472
|
+
schema: COMPARISON_SUMMARY_SCHEMA,
|
|
473
|
+
hostClass: meta.hostClass ?? null,
|
|
474
|
+
set: meta.set ?? null,
|
|
475
|
+
measured: measured === null ? null : measured.slice(0, 10),
|
|
476
|
+
publishable: meta.publish && missing.length === 0 && REFERENCE_HOSTS.every((h) => ran.includes(h)),
|
|
477
|
+
missing,
|
|
478
|
+
conditions: records[0]?.conditions ?? null,
|
|
479
|
+
records: records.length,
|
|
480
|
+
common: records.filter((r) => ran.every((h) => ranRow(r, h) !== undefined)).length,
|
|
481
|
+
hosts: totals,
|
|
482
|
+
beats,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
/** The text table of a summary, for the terminal. */
|
|
486
|
+
export function summaryTable(s) {
|
|
487
|
+
const lines = [`host version plugins loads clean rt-safe/observed crashes cpu%`];
|
|
488
|
+
for (const t of s.hosts) {
|
|
489
|
+
if (t.status === "skipped") {
|
|
490
|
+
lines.push(`${t.host.padEnd(15)} skipped: ${t.reason ?? ""}`);
|
|
491
|
+
continue;
|
|
492
|
+
}
|
|
493
|
+
lines.push(`${t.host.padEnd(15)} ${(t.version ?? "?").padEnd(27)} ${String(t.plugins).padStart(7)} ${String(t.loads).padStart(5)} ${String(t.runsClean).padStart(5)} ${`${String(t.rtSafe)}/${String(t.rtObserved)}`.padStart(16)} ${String(t.crashes).padStart(7)} ${t.cpuMedianPercent === null ? "-" : String(t.cpuMedianPercent)}`);
|
|
494
|
+
}
|
|
495
|
+
for (const [h, list] of Object.entries(s.beats))
|
|
496
|
+
if (list.length)
|
|
497
|
+
lines.push(`${h} does better on ${String(list.length)}: ${list.map((b) => `${b.id} (${b.on} over ${b.over.join(",")})`).join("; ")}`);
|
|
498
|
+
if (!s.publishable)
|
|
499
|
+
lines.push(`not publishable${s.missing.length ? `: ${s.missing.map((m) => `${m.host}: ${m.reason}`).join("; ")}` : " (no --publish)"}`);
|
|
500
|
+
return `${lines.join("\n")}\n`;
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,6 @@ export declare const DISTRIBUTED_DIR_SYSTEM = "/usr/share/omx/qualification";
|
|
|
5
5
|
/** The file of a set that says where its records come from. */
|
|
6
6
|
export declare const DISTRIBUTED_PROVENANCE_FILE = "provenance.json";
|
|
7
7
|
export declare const DISTRIBUTED_PROVENANCE_SCHEMA = "plugin-qualify.distributed-provenance/1";
|
|
8
|
-
/** The first plugin-qualify that reads the layer: what a package of records depends on. */
|
|
9
|
-
export declare const DISTRIBUTED_LAYER_SINCE = "0.17.0";
|
|
10
8
|
/** Where the records of a set come from. The keys below are always there; the rest is what the builder was given. */
|
|
11
9
|
export interface DistributedProvenance {
|
|
12
10
|
readonly schema: typeof DISTRIBUTED_PROVENANCE_SCHEMA;
|
|
@@ -23,8 +23,6 @@ export const DISTRIBUTED_DIR_SYSTEM = "/usr/share/omx/qualification";
|
|
|
23
23
|
/** The file of a set that says where its records come from. */
|
|
24
24
|
export const DISTRIBUTED_PROVENANCE_FILE = "provenance.json";
|
|
25
25
|
export const DISTRIBUTED_PROVENANCE_SCHEMA = "plugin-qualify.distributed-provenance/1";
|
|
26
|
-
/** The first plugin-qualify that reads the layer: what a package of records depends on. */
|
|
27
|
-
export const DISTRIBUTED_LAYER_SINCE = "0.17.0";
|
|
28
26
|
/** The device tree's model file, where a board names itself. */
|
|
29
27
|
export const BOARD_MODEL_FILE = "/proc/device-tree/model";
|
|
30
28
|
/** The board's own model, or `undefined` on a machine without a device tree. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distributed-records.js","sourceRoot":"","sources":["../src/distributed-records.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,sDAAsD;AACtD;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAgD,MAAM,2BAA2B,CAAC;AAGtH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,iEAAiE;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,8BAA8B,CAAC;AAErE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAC7D,MAAM,CAAC,MAAM,6BAA6B,GAAG,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"distributed-records.js","sourceRoot":"","sources":["../src/distributed-records.ts"],"names":[],"mappings":"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"}
|
package/dist/host-admission.d.ts
CHANGED
|
@@ -21,10 +21,10 @@ export declare function runDecides(profile: HostProfile, format: string, admissi
|
|
|
21
21
|
/** What running the plugin under one host came to. */
|
|
22
22
|
export interface HostAdmission {
|
|
23
23
|
readonly host: AdmittedHost | typeof ADAPTER_HOST;
|
|
24
|
-
/** False when the host could not be run (not installed): there is no evidence either way. */
|
|
24
|
+
/** False when the host could not be run (not installed, no JACK client): there is no evidence either way. */
|
|
25
25
|
readonly measured: boolean;
|
|
26
26
|
readonly admitted: boolean;
|
|
27
|
-
/** Why not: `<host>.resp-<n>`, `<host>.signal-<SIG>`, `mod-host.died-on-add`, `jalv.unknown-port-type`, `<host>.not-installed`, … */
|
|
27
|
+
/** Why not: `<host>.resp-<n>`, `<host>.signal-<SIG>`, `mod-host.died-on-add`, `jalv.unknown-port-type`, `<host>.not-installed`, `<host>.no-jack-client`, … */
|
|
28
28
|
readonly code?: string;
|
|
29
29
|
readonly params: Readonly<Record<string, string | number>>;
|
|
30
30
|
}
|