@farmslot/recipe-runner 0.24.0 → 0.26.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/CHANGELOG.md +10 -0
- package/README.md +1 -0
- package/dist/core/library-manifest.d.ts +24 -4
- package/dist/core/library-manifest.d.ts.map +1 -1
- package/dist/core/library-manifest.js +60 -11
- package/dist/core/library-manifest.js.map +1 -1
- package/dist/core/path.d.ts +1 -1
- package/dist/core/path.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/cdp-trace.d.ts +92 -0
- package/dist/runtime/cdp-trace.d.ts.map +1 -0
- package/dist/runtime/cdp-trace.js +385 -0
- package/dist/runtime/cdp-trace.js.map +1 -0
- package/dist/runtime/frame-metrics.d.ts +26 -0
- package/dist/runtime/frame-metrics.d.ts.map +1 -0
- package/dist/runtime/frame-metrics.js +134 -0
- package/dist/runtime/frame-metrics.js.map +1 -0
- package/dist/runtime/js-task-metrics.d.ts +16 -0
- package/dist/runtime/js-task-metrics.d.ts.map +1 -0
- package/dist/runtime/js-task-metrics.js +34 -0
- package/dist/runtime/js-task-metrics.js.map +1 -0
- package/package.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,16 @@ All notable changes to `@farmslot/recipe-runner` (published as `@farmslot/recipe
|
|
|
6
6
|
|
|
7
7
|
- Active-development baseline; add user-facing changes here before release or package publication.
|
|
8
8
|
|
|
9
|
+
## 0.26.0 - 2026-10-06
|
|
10
|
+
|
|
11
|
+
- Add `@farmslot/recipe-runner/runtime/cdp-trace`, the CDP performance trace engine moved from mm-harness: `createCdpTraceCollector(client, { kind, platform, marker, markerPrefix })` runs one `Tracing` capture at a time and aligns it to the host clock through a marker the host writes into the trace; `parseTraceCapture(capture, kind)` turns a capture into JavaScript-task and native-frame samples with summaries. A `TraceKind` names what a trace captures (categories, renderer scoping, scope label, native source, JavaScript-task flag, `draw` or `cadence` frame timing), so the host keeps its own platform names. The marker prefix defaults to `farmslot-clock-`. `summarizeFrames` (from `@farmslot/adapter-rn`) and `summarizeJavaScriptTasks` move here too, unchanged.
|
|
12
|
+
- Publish with protocol 0.34.0.
|
|
13
|
+
|
|
14
|
+
## 0.25.0 - 2026-10-06
|
|
15
|
+
|
|
16
|
+
- The library digest (`digestRecipeLibrary`) covers every file under each declared adapter module's directory, not only the module file, so a plugin's helper files move it. A module at the library root contributes itself and the library's `actions/`, not the whole root. Add `libraryAdapterFiles(root, declaration)` (the module's directory plus the library's `actions/`, the files a host lets the plugin import) and `digestLibraryAdapter(root, declaration)` for one plugin. The module's directory is listed strictly (`listLibraryFiles(root, directory, { strict: true })`): dot-files are digested, and a `node_modules`, a symlinked directory, or more than `MAX_LIBRARY_ADAPTER_FILES` (1,000) files fails with `RECIPE_SOURCE_INVALID`.
|
|
17
|
+
- Publish with protocol 0.34.0.
|
|
18
|
+
|
|
9
19
|
## 0.24.0 - 2026-10-05
|
|
10
20
|
|
|
11
21
|
- Add `@farmslot/recipe-runner/cdp-broker`: the CDP broker that shares one inspector connection between bridge commands and long-lived collectors, moved from mm-harness. Both React Native and browser-extension network capture use it.
|
package/README.md
CHANGED
|
@@ -229,6 +229,7 @@ surface and capture ids; `feedbackDraftFromDocument` is the same restore for cod
|
|
|
229
229
|
- `/runtime/cdp`, `/runtime/react-native-bridge`, `/runtime/browser-extension`
|
|
230
230
|
- `/runtime/deps-readiness`, `/runtime/log-analysis`, `/runtime/metro-probe`
|
|
231
231
|
- `/runtime/decision-types`, `/runtime/orchestrate-up`
|
|
232
|
+
- `/runtime/cdp-trace` (CDP performance traces, frame and JavaScript-task summaries)
|
|
232
233
|
- `/cli`, `/cli/support`
|
|
233
234
|
- `/visual-review`
|
|
234
235
|
|
|
@@ -15,7 +15,7 @@ export interface RecipeLibraryAdapterDeclaration {
|
|
|
15
15
|
export interface RecipeLibraryManifest {
|
|
16
16
|
/** Platform variant folders under recipes/, in addition to the built-in platforms. */
|
|
17
17
|
platforms?: string[];
|
|
18
|
-
/** Platform adapter plugins this library ships
|
|
18
|
+
/** Platform adapter plugins this library ships; a host loads one when a command selects it. */
|
|
19
19
|
adapters?: Record<string, RecipeLibraryAdapterDeclaration>;
|
|
20
20
|
/** Action manifest files keyed by platform or `shared`, relative to the library root. */
|
|
21
21
|
actions?: Record<string, string>;
|
|
@@ -42,12 +42,32 @@ export declare function checkRecipeLibraryRequirements(library: string, manifest
|
|
|
42
42
|
* Regular files under `<root>/<directory>`, as sorted `/`-separated paths relative to the root.
|
|
43
43
|
* The one walker for loading and digesting: it skips dot-entries, `node_modules` and symlinked
|
|
44
44
|
* directories, and rejects any file that resolves outside the library root.
|
|
45
|
+
*
|
|
46
|
+
* `strict` (an adapter plugin's directory, whose code runs in the host): nothing is skipped
|
|
47
|
+
* silently. Dot-entries are listed, and a `node_modules` or a symlinked directory is refused
|
|
48
|
+
* (`RECIPE_SOURCE_INVALID`), since the digest could not cover what it holds.
|
|
45
49
|
*/
|
|
46
|
-
export declare function listLibraryFiles(root: string, directory: string
|
|
50
|
+
export declare function listLibraryFiles(root: string, directory: string, options?: {
|
|
51
|
+
strict?: boolean;
|
|
52
|
+
}): Promise<string[]>;
|
|
53
|
+
/** The most files one adapter plugin's directory may hold; past it the plugin should be bundled. */
|
|
54
|
+
export declare const MAX_LIBRARY_ADAPTER_FILES = 1000;
|
|
55
|
+
/**
|
|
56
|
+
* Files one declared adapter plugin contributes, sorted and relative to the root: its module,
|
|
57
|
+
* plus every file under the module's directory when that directory is not the library root,
|
|
58
|
+
* so a multi-file plugin's helpers are covered (a module at the root contributes itself only),
|
|
59
|
+
* plus the library's `actions/`. The module's directory is listed strictly: dot-entries count,
|
|
60
|
+
* and a `node_modules` or a symlinked directory is refused. These are the files a host lets the
|
|
61
|
+
* plugin import from disk.
|
|
62
|
+
*/
|
|
63
|
+
export declare function libraryAdapterFiles(root: string, declaration: RecipeLibraryAdapterDeclaration): Promise<string[]>;
|
|
64
|
+
/** Content digest of one declared adapter plugin: the files `libraryAdapterFiles` lists. */
|
|
65
|
+
export declare function digestLibraryAdapter(root: string, declaration: RecipeLibraryAdapterDeclaration): Promise<string>;
|
|
47
66
|
/**
|
|
48
67
|
* Content digest of what a library contributes to discovery and runs: recipe-library.json,
|
|
49
|
-
* recipes/, manifests/, actions/,
|
|
50
|
-
* endings, so a CRLF checkout of the same
|
|
68
|
+
* recipes/, manifests/, actions/, the files it declares, and each adapter plugin's directory
|
|
69
|
+
* (`libraryAdapterFiles`). Text files hash with LF line endings, so a CRLF checkout of the same
|
|
70
|
+
* content has the same digest.
|
|
51
71
|
*/
|
|
52
72
|
export declare function digestRecipeLibrary(root: string, manifest?: RecipeLibraryManifest): Promise<string>;
|
|
53
73
|
//# sourceMappingURL=library-manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-manifest.d.ts","sourceRoot":"","sources":["../../src/core/library-manifest.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAClE,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAG5C,yGAAyG;AACzG,eAAO,MAAM,0BAA0B,8CAA+C,CAAC;AAEvF,MAAM,WAAW,+BAA+B;IAC9C,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wGAAwG;AACxG,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB
|
|
1
|
+
{"version":3,"file":"library-manifest.d.ts","sourceRoot":"","sources":["../../src/core/library-manifest.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAClE,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAG5C,yGAAyG;AACzG,eAAO,MAAM,0BAA0B,8CAA+C,CAAC;AAEvF,MAAM,WAAW,+BAA+B;IAC9C,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wGAAwG;AACxG,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;IAC3D,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,oGAAoG;AACpG,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWnE;AAED,8FAA8F;AAC9F,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CA0F5C;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAC3C,eAAe,GAAE,qBAA0B,GAC1C,wBAAwB,EAAE,CAuB5B;AAgCD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CAyDnB;AAED,oGAAoG;AACpG,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,+BAA+B,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB;AAED,4FAA4F;AAC5F,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,+BAA+B,GAC3C,OAAO,CAAC,MAAM,CAAC,CAEjB;AAID;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -154,8 +154,12 @@ async function declaredLibraryFile(rootReal, root, relativePath, key, invalid) {
|
|
|
154
154
|
* Regular files under `<root>/<directory>`, as sorted `/`-separated paths relative to the root.
|
|
155
155
|
* The one walker for loading and digesting: it skips dot-entries, `node_modules` and symlinked
|
|
156
156
|
* directories, and rejects any file that resolves outside the library root.
|
|
157
|
+
*
|
|
158
|
+
* `strict` (an adapter plugin's directory, whose code runs in the host): nothing is skipped
|
|
159
|
+
* silently. Dot-entries are listed, and a `node_modules` or a symlinked directory is refused
|
|
160
|
+
* (`RECIPE_SOURCE_INVALID`), since the digest could not cover what it holds.
|
|
157
161
|
*/
|
|
158
|
-
export async function listLibraryFiles(root, directory) {
|
|
162
|
+
export async function listLibraryFiles(root, directory, options = {}) {
|
|
159
163
|
const rootReal = await libraryRootReal(root);
|
|
160
164
|
const visit = async (relativeDir) => {
|
|
161
165
|
let entries;
|
|
@@ -170,9 +174,11 @@ export async function listLibraryFiles(root, directory) {
|
|
|
170
174
|
}
|
|
171
175
|
// Entries are checked concurrently: discovery walks a library several times per command.
|
|
172
176
|
const nested = await Promise.all(entries.map(async (entry) => {
|
|
173
|
-
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
174
|
-
return [];
|
|
175
177
|
const relativePath = path.join(relativeDir, entry.name);
|
|
178
|
+
if (options.strict && entry.name === 'node_modules')
|
|
179
|
+
throw invalidRecipeSource(`Adapter directory entry ${relativePath.split(path.sep).join('/')} is a node_modules, which the plugin digest cannot cover.`, 'bundle the dependency into the plugin, or depend on a package the host installs');
|
|
180
|
+
if (!options.strict && (entry.name.startsWith('.') || entry.name === 'node_modules'))
|
|
181
|
+
return [];
|
|
176
182
|
if (entry.isDirectory())
|
|
177
183
|
return visit(relativePath);
|
|
178
184
|
if (!entry.isFile() && !entry.isSymbolicLink())
|
|
@@ -188,8 +194,11 @@ export async function listLibraryFiles(root, directory) {
|
|
|
188
194
|
throw invalidRecipeSource(`Library file ${portable} is a broken symlink.`, 'remove the symlink or restore its target inside the library root');
|
|
189
195
|
}
|
|
190
196
|
// Symlinked directories are not followed, so a link cannot pull another tree in.
|
|
191
|
-
if (entry.isSymbolicLink() && !(await stat(fileReal)).isFile())
|
|
197
|
+
if (entry.isSymbolicLink() && !(await stat(fileReal)).isFile()) {
|
|
198
|
+
if (options.strict)
|
|
199
|
+
throw invalidRecipeSource(`Adapter directory entry ${portable} is a symlinked directory, which the plugin digest cannot cover.`, 'replace the symlink with the files it points to');
|
|
192
200
|
return [];
|
|
201
|
+
}
|
|
193
202
|
if (!isPathWithin(rootReal, fileReal)) {
|
|
194
203
|
throw invalidRecipeSource(`Library file ${portable} resolves outside its library root.`, 'move the file inside the library root or remove the escaping symlink');
|
|
195
204
|
}
|
|
@@ -199,19 +208,52 @@ export async function listLibraryFiles(root, directory) {
|
|
|
199
208
|
};
|
|
200
209
|
return (await visit(directory)).sort();
|
|
201
210
|
}
|
|
211
|
+
/** The most files one adapter plugin's directory may hold; past it the plugin should be bundled. */
|
|
212
|
+
export const MAX_LIBRARY_ADAPTER_FILES = 1000;
|
|
213
|
+
/**
|
|
214
|
+
* Files one declared adapter plugin contributes, sorted and relative to the root: its module,
|
|
215
|
+
* plus every file under the module's directory when that directory is not the library root,
|
|
216
|
+
* so a multi-file plugin's helpers are covered (a module at the root contributes itself only),
|
|
217
|
+
* plus the library's `actions/`. The module's directory is listed strictly: dot-entries count,
|
|
218
|
+
* and a `node_modules` or a symlinked directory is refused. These are the files a host lets the
|
|
219
|
+
* plugin import from disk.
|
|
220
|
+
*/
|
|
221
|
+
export async function libraryAdapterFiles(root, declaration) {
|
|
222
|
+
const module = path
|
|
223
|
+
.relative(root, path.resolve(root, declaration.module))
|
|
224
|
+
.split(path.sep)
|
|
225
|
+
.join('/');
|
|
226
|
+
const rootReal = await libraryRootReal(root);
|
|
227
|
+
const moduleReal = await existingRealpath(path.join(root, module));
|
|
228
|
+
if (moduleReal && !isPathWithin(rootReal, moduleReal))
|
|
229
|
+
throw invalidRecipeSource(`Library file ${module} resolves outside its library root.`, 'move the file inside the library root or remove the escaping symlink');
|
|
230
|
+
const directory = path.posix.dirname(module);
|
|
231
|
+
const files = new Set(moduleReal ? [module] : []);
|
|
232
|
+
if (directory !== '.') {
|
|
233
|
+
for (const file of await listLibraryFiles(root, directory, { strict: true }))
|
|
234
|
+
files.add(file);
|
|
235
|
+
}
|
|
236
|
+
if (files.size > MAX_LIBRARY_ADAPTER_FILES)
|
|
237
|
+
throw invalidRecipeSource(`Adapter module ${module} sits in a directory of ${files.size} files (at most ${MAX_LIBRARY_ADAPTER_FILES}).`, `give the adapter its own directory, or bundle it into fewer files`);
|
|
238
|
+
// The library's actions/ is shared code a plugin may import too.
|
|
239
|
+
for (const file of await listLibraryFiles(root, 'actions'))
|
|
240
|
+
files.add(file);
|
|
241
|
+
return [...files].sort();
|
|
242
|
+
}
|
|
243
|
+
/** Content digest of one declared adapter plugin: the files `libraryAdapterFiles` lists. */
|
|
244
|
+
export async function digestLibraryAdapter(root, declaration) {
|
|
245
|
+
return digestFiles(root, await libraryAdapterFiles(root, declaration));
|
|
246
|
+
}
|
|
202
247
|
const fileDigests = new Map();
|
|
203
248
|
/**
|
|
204
249
|
* Content digest of what a library contributes to discovery and runs: recipe-library.json,
|
|
205
|
-
* recipes/, manifests/, actions/,
|
|
206
|
-
* endings, so a CRLF checkout of the same
|
|
250
|
+
* recipes/, manifests/, actions/, the files it declares, and each adapter plugin's directory
|
|
251
|
+
* (`libraryAdapterFiles`). Text files hash with LF line endings, so a CRLF checkout of the same
|
|
252
|
+
* content has the same digest.
|
|
207
253
|
*/
|
|
208
254
|
export async function digestRecipeLibrary(root, manifest) {
|
|
209
255
|
const files = new Set();
|
|
210
|
-
const declared = [
|
|
211
|
-
RECIPE_LIBRARY_MANIFEST_FILE,
|
|
212
|
-
...Object.values(manifest?.actions ?? {}),
|
|
213
|
-
...Object.values(manifest?.adapters ?? {}).map((adapter) => adapter.module),
|
|
214
|
-
];
|
|
256
|
+
const declared = [RECIPE_LIBRARY_MANIFEST_FILE, ...Object.values(manifest?.actions ?? {})];
|
|
215
257
|
const rootReal = await libraryRootReal(root);
|
|
216
258
|
for (const file of declared) {
|
|
217
259
|
const relative = path.relative(root, path.resolve(root, file)).split(path.sep).join('/');
|
|
@@ -228,6 +270,13 @@ export async function digestRecipeLibrary(root, manifest) {
|
|
|
228
270
|
for (const file of await listLibraryFiles(root, directory))
|
|
229
271
|
files.add(file);
|
|
230
272
|
}
|
|
273
|
+
for (const adapter of Object.values(manifest?.adapters ?? {})) {
|
|
274
|
+
for (const file of await libraryAdapterFiles(root, adapter))
|
|
275
|
+
files.add(file);
|
|
276
|
+
}
|
|
277
|
+
return digestFiles(root, [...files]);
|
|
278
|
+
}
|
|
279
|
+
async function digestFiles(root, files) {
|
|
231
280
|
const sorted = [...files].sort();
|
|
232
281
|
const digests = await Promise.all(sorted.map((file) => fileDigest(path.join(root, file))));
|
|
233
282
|
const hash = createHash('sha256');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-manifest.js","sourceRoot":"","sources":["../../src/core/library-manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"library-manifest.js","sourceRoot":"","sources":["../../src/core/library-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/core/path.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare function isPathWithin(root: string, candidate: string): boolean;
|
|
2
2
|
export declare function readFileWithinRoot(root: string, relativePath: string): Promise<Buffer>;
|
|
3
3
|
export declare function digestFileWithinRoot(root: string, relativePath: string): Promise<string>;
|
|
4
|
-
export declare function statFileWithinRoot(root: string, relativePath: string): Promise<import("
|
|
4
|
+
export declare function statFileWithinRoot(root: string, relativePath: string): Promise<import("fs").Stats>;
|
|
5
5
|
export declare function writeFileWithinRoot(root: string, relativePath: string, data: string | Uint8Array): Promise<string>;
|
|
6
6
|
export declare function copyFileWithinRoots(sourceRoot: string, sourceRelativePath: string, destinationRoot: string, destinationRelativePath: string): Promise<string>;
|
|
7
7
|
//# sourceMappingURL=path.d.ts.map
|
package/dist/core/path.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/core/path.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAMrE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5F;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS9F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/core/path.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAMrE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5F;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS9F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,+BAO1E;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GAAG,UAAU,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,EAC1B,eAAe,EAAE,MAAM,EACvB,uBAAuB,EAAE,MAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export { extractWorkflowGraph, type WorkflowGraph } from './core/graph.js';
|
|
|
10
10
|
export { redactRecipeParams } from './core/invocation.js';
|
|
11
11
|
export type { LibraryRecipeMatch, RecipeLibraryEnv, RecipeLibraryLoadOptions, RecipeLibraryResolution, ResolvedLibraryRecipe, } from './core/library.js';
|
|
12
12
|
export { applyTaskLocalInvocationTrust, BUILT_IN_RECIPE_PLATFORMS, defaultRecipeLibrarySources, findLibraryRecipe, listRecipeFiles, listRecipeLibraryPlatforms, loadRecipeLibraries, logRecipeLibraryResolution, logRecipeLibraryShadows, logRecipeLibrarySources, parseRecipeLibraryPath, personalRecipeLibraryRoot, resolveRecipeLibrarySources, } from './core/library.js';
|
|
13
|
-
export { checkRecipeLibraryRequirements, digestRecipeLibrary, listLibraryFiles, readRecipeLibraryManifest, RECIPE_LIBRARY_DIRECTORIES, RECIPE_LIBRARY_MANIFEST_FILE, type RecipeLibraryAdapterDeclaration, type RecipeLibraryManifest, type RecipeLibraryRequirement, type RecipePackageVersions, SHARED_RECIPE_SCOPE, } from './core/library-manifest.js';
|
|
13
|
+
export { checkRecipeLibraryRequirements, digestLibraryAdapter, digestRecipeLibrary, libraryAdapterFiles, listLibraryFiles, MAX_LIBRARY_ADAPTER_FILES, readRecipeLibraryManifest, RECIPE_LIBRARY_DIRECTORIES, RECIPE_LIBRARY_MANIFEST_FILE, type RecipeLibraryAdapterDeclaration, type RecipeLibraryManifest, type RecipeLibraryRequirement, type RecipePackageVersions, SHARED_RECIPE_SCOPE, } from './core/library-manifest.js';
|
|
14
14
|
export { resolveRecipeParams, resolveRecipeValue } from './core/parameters.js';
|
|
15
15
|
export { RecipeResolutionError } from './core/resolution-error.js';
|
|
16
16
|
export { createRecipeRunner, defineActionAdapter } from './core/runner.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { RecipeExecutionError } from './core/failure.js';
|
|
|
7
7
|
export { extractWorkflowGraph } from './core/graph.js';
|
|
8
8
|
export { redactRecipeParams } from './core/invocation.js';
|
|
9
9
|
export { applyTaskLocalInvocationTrust, BUILT_IN_RECIPE_PLATFORMS, defaultRecipeLibrarySources, findLibraryRecipe, listRecipeFiles, listRecipeLibraryPlatforms, loadRecipeLibraries, logRecipeLibraryResolution, logRecipeLibraryShadows, logRecipeLibrarySources, parseRecipeLibraryPath, personalRecipeLibraryRoot, resolveRecipeLibrarySources, } from './core/library.js';
|
|
10
|
-
export { checkRecipeLibraryRequirements, digestRecipeLibrary, listLibraryFiles, readRecipeLibraryManifest, RECIPE_LIBRARY_DIRECTORIES, RECIPE_LIBRARY_MANIFEST_FILE, SHARED_RECIPE_SCOPE, } from './core/library-manifest.js';
|
|
10
|
+
export { checkRecipeLibraryRequirements, digestLibraryAdapter, digestRecipeLibrary, libraryAdapterFiles, listLibraryFiles, MAX_LIBRARY_ADAPTER_FILES, readRecipeLibraryManifest, RECIPE_LIBRARY_DIRECTORIES, RECIPE_LIBRARY_MANIFEST_FILE, SHARED_RECIPE_SCOPE, } from './core/library-manifest.js';
|
|
11
11
|
export { resolveRecipeParams, resolveRecipeValue } from './core/parameters.js';
|
|
12
12
|
export { RecipeResolutionError } from './core/resolution-error.js';
|
|
13
13
|
export { createRecipeRunner, defineActionAdapter } from './core/runner.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAEL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,aAAa,GAEd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,yBAAyB,EACzB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAsB,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQ1D,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAK5B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,wBAAwB,EAOxB,eAAe,GAIhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EAEnB,sBAAsB,GAKvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EACL,gCAAgC,EAChC,YAAY,EACZ,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAEL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,aAAa,GAEd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,yBAAyB,EACzB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAsB,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQ1D,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAK5B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,wBAAwB,EAOxB,eAAe,GAIhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EAEnB,sBAAsB,GAKvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EACL,gCAAgC,EAChC,YAAY,EACZ,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type FrameMetricSummary, type FrameSample, summarizeFrames } from './frame-metrics.js';
|
|
2
|
+
import { type JavaScriptTaskMetricSummary, type JavaScriptTaskSample, summarizeJavaScriptTasks } from './js-task-metrics.js';
|
|
3
|
+
export { type FrameMetricSummary, type FrameSample, type JavaScriptTaskMetricSummary, type JavaScriptTaskSample, summarizeFrames, summarizeJavaScriptTasks, };
|
|
4
|
+
export interface TraceKind {
|
|
5
|
+
categories: readonly string[];
|
|
6
|
+
rendererScoped: boolean;
|
|
7
|
+
scope: string;
|
|
8
|
+
nativeSource: string;
|
|
9
|
+
javascriptTasks: boolean;
|
|
10
|
+
frameTiming: 'draw' | 'cadence';
|
|
11
|
+
}
|
|
12
|
+
export type PerformanceSourceStatus = 'complete' | 'partial' | 'unavailable';
|
|
13
|
+
interface PerformanceSourceResult<TSample, TSummary> {
|
|
14
|
+
status: PerformanceSourceStatus;
|
|
15
|
+
kind: string;
|
|
16
|
+
unavailableReasons: string[];
|
|
17
|
+
coverageGapReasons: string[];
|
|
18
|
+
samples: TSample[];
|
|
19
|
+
summary: TSummary;
|
|
20
|
+
clockSyncUncertaintyMs?: number;
|
|
21
|
+
}
|
|
22
|
+
type JavaScriptPerformanceSourceBase = Omit<PerformanceSourceResult<JavaScriptTaskSample, JavaScriptTaskMetricSummary>, 'summary'>;
|
|
23
|
+
export type JavaScriptPerformanceSourceResult = (JavaScriptPerformanceSourceBase & {
|
|
24
|
+
applicability: 'applicable';
|
|
25
|
+
summary: JavaScriptTaskMetricSummary;
|
|
26
|
+
}) | (JavaScriptPerformanceSourceBase & {
|
|
27
|
+
applicability: 'not_applicable';
|
|
28
|
+
summary: Record<string, never>;
|
|
29
|
+
});
|
|
30
|
+
export type NativeUiPerformanceSourceResult = PerformanceSourceResult<FrameSample, FrameMetricSummary>;
|
|
31
|
+
export interface PerformanceCaptureResult<P extends string = string> {
|
|
32
|
+
platform: P;
|
|
33
|
+
javascript: JavaScriptPerformanceSourceResult;
|
|
34
|
+
nativeUi: NativeUiPerformanceSourceResult;
|
|
35
|
+
trace: TraceEvidence;
|
|
36
|
+
rawTraceEvents?: TraceEvent[];
|
|
37
|
+
}
|
|
38
|
+
export interface TraceEvidence {
|
|
39
|
+
beginFrameCount: number;
|
|
40
|
+
dataLossOccurred: boolean;
|
|
41
|
+
drawFrameCount: number;
|
|
42
|
+
overflow: boolean;
|
|
43
|
+
profileChunkCount: number;
|
|
44
|
+
rendererProcessId?: number;
|
|
45
|
+
runTaskCount: number;
|
|
46
|
+
scope: string;
|
|
47
|
+
totalEventCount: number;
|
|
48
|
+
}
|
|
49
|
+
export interface PerformanceBackend<P extends string = string> {
|
|
50
|
+
start(id: string): Promise<void>;
|
|
51
|
+
end(id: string): Promise<PerformanceCaptureResult<P>>;
|
|
52
|
+
close(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
export interface CdpClient {
|
|
55
|
+
send(method: string, params?: Record<string, unknown>, timeoutMs?: number): Promise<unknown>;
|
|
56
|
+
on(method: string, handler: (params: Record<string, unknown>) => void): () => void;
|
|
57
|
+
close(): void;
|
|
58
|
+
}
|
|
59
|
+
export interface TraceEvent {
|
|
60
|
+
name?: string;
|
|
61
|
+
cat?: string;
|
|
62
|
+
ph?: string;
|
|
63
|
+
ts?: number;
|
|
64
|
+
dur?: number;
|
|
65
|
+
pid?: number;
|
|
66
|
+
tid?: number;
|
|
67
|
+
args?: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
export interface TraceCapture<P extends string = string> {
|
|
70
|
+
platform: P;
|
|
71
|
+
events: TraceEvent[];
|
|
72
|
+
markerName?: string;
|
|
73
|
+
markerHostEpochMs?: number;
|
|
74
|
+
markerUncertaintyMs?: number;
|
|
75
|
+
dataLossOccurred: boolean;
|
|
76
|
+
overflow: boolean;
|
|
77
|
+
unavailableReasons: string[];
|
|
78
|
+
coverageGapReasons: string[];
|
|
79
|
+
}
|
|
80
|
+
export interface TraceClockSync {
|
|
81
|
+
hostEpochMs: number;
|
|
82
|
+
uncertaintyMs: number;
|
|
83
|
+
}
|
|
84
|
+
export interface CdpTraceCollectorOptions<P extends string = string> {
|
|
85
|
+
kind: TraceKind;
|
|
86
|
+
platform: P;
|
|
87
|
+
marker(name: string): Promise<TraceClockSync>;
|
|
88
|
+
markerPrefix?: string;
|
|
89
|
+
}
|
|
90
|
+
export declare function createCdpTraceCollector<P extends string = string>(client: CdpClient, { kind, platform, marker, markerPrefix }: CdpTraceCollectorOptions<P>): PerformanceBackend<P>;
|
|
91
|
+
export declare function parseTraceCapture<P extends string = string>(capture: TraceCapture<P>, kind: TraceKind): PerformanceCaptureResult<P>;
|
|
92
|
+
//# sourceMappingURL=cdp-trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-trace.d.ts","sourceRoot":"","sources":["../../src/runtime/cdp-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
// CDP performance traces: start and end a `Tracing` capture over a CDP
|
|
2
|
+
// client, align it to the host clock through a marker written into the trace,
|
|
3
|
+
// and turn it into JavaScript-task and native-frame samples with summaries.
|
|
4
|
+
// The host names what a trace captures with a `TraceKind`.
|
|
5
|
+
import { summarizeFrames } from './frame-metrics.js';
|
|
6
|
+
import { summarizeJavaScriptTasks, } from './js-task-metrics.js';
|
|
7
|
+
export { summarizeFrames, summarizeJavaScriptTasks, };
|
|
8
|
+
const MAX_TRACE_BYTES = 16 * 1024 * 1024;
|
|
9
|
+
const MAX_TRACE_EVENTS = 250_000;
|
|
10
|
+
const DEFAULT_MARKER_PREFIX = 'farmslot-clock-';
|
|
11
|
+
export function createCdpTraceCollector(client, { kind, platform, marker, markerPrefix = DEFAULT_MARKER_PREFIX }) {
|
|
12
|
+
let active;
|
|
13
|
+
const offData = client.on('Tracing.dataCollected', (params) => {
|
|
14
|
+
if (!active || !Array.isArray(params.value))
|
|
15
|
+
return;
|
|
16
|
+
for (const value of params.value) {
|
|
17
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
18
|
+
continue;
|
|
19
|
+
const event = value;
|
|
20
|
+
const bytes = Buffer.byteLength(JSON.stringify(event));
|
|
21
|
+
if (active.events.length >= MAX_TRACE_EVENTS || active.bytes + bytes > MAX_TRACE_BYTES) {
|
|
22
|
+
active.overflow = true;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
active.events.push(event);
|
|
26
|
+
active.bytes += bytes;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
const offComplete = client.on('Tracing.tracingComplete', (params) => {
|
|
30
|
+
if (!active)
|
|
31
|
+
return;
|
|
32
|
+
active.dataLossOccurred = params.dataLossOccurred === true;
|
|
33
|
+
active.complete?.();
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
async start(id) {
|
|
37
|
+
if (active)
|
|
38
|
+
throw new Error('Only one CDP performance trace may be active.');
|
|
39
|
+
let complete;
|
|
40
|
+
const completePromise = new Promise((resolve) => {
|
|
41
|
+
complete = resolve;
|
|
42
|
+
});
|
|
43
|
+
active = {
|
|
44
|
+
id,
|
|
45
|
+
events: [],
|
|
46
|
+
bytes: 0,
|
|
47
|
+
overflow: false,
|
|
48
|
+
dataLossOccurred: false,
|
|
49
|
+
complete,
|
|
50
|
+
completePromise,
|
|
51
|
+
};
|
|
52
|
+
let tracingStarted = false;
|
|
53
|
+
try {
|
|
54
|
+
await client.send('Tracing.start', {
|
|
55
|
+
categories: kind.categories.join(','),
|
|
56
|
+
transferMode: 'ReportEvents',
|
|
57
|
+
}, 15_000);
|
|
58
|
+
tracingStarted = true;
|
|
59
|
+
const markerName = `${markerPrefix}${id}-${Date.now()}`;
|
|
60
|
+
const sync = await marker(markerName);
|
|
61
|
+
active.markerName = markerName;
|
|
62
|
+
active.markerHostEpochMs = sync.hostEpochMs;
|
|
63
|
+
active.markerUncertaintyMs = sync.uncertaintyMs;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (tracingStarted) {
|
|
67
|
+
await client.send('Tracing.end', {}, 5_000).catch(() => undefined);
|
|
68
|
+
await withTimeout(active.completePromise, 1_000, 'CDP tracing cleanup did not report tracingComplete.').catch(() => undefined);
|
|
69
|
+
}
|
|
70
|
+
active = undefined;
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
async end(id) {
|
|
75
|
+
const capture = active;
|
|
76
|
+
if (!capture || capture.id !== id) {
|
|
77
|
+
throw new Error(`Performance capture is not active: ${id}`);
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
await client.send('Tracing.end', {}, 15_000);
|
|
81
|
+
await withTimeout(capture.completePromise, 30_000, 'CDP tracing did not report tracingComplete.');
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
active = undefined;
|
|
85
|
+
}
|
|
86
|
+
return parseTraceCapture({
|
|
87
|
+
platform,
|
|
88
|
+
events: capture.events,
|
|
89
|
+
markerName: capture.markerName,
|
|
90
|
+
markerHostEpochMs: capture.markerHostEpochMs,
|
|
91
|
+
markerUncertaintyMs: capture.markerUncertaintyMs,
|
|
92
|
+
dataLossOccurred: capture.dataLossOccurred,
|
|
93
|
+
overflow: capture.overflow,
|
|
94
|
+
unavailableReasons: [],
|
|
95
|
+
coverageGapReasons: [],
|
|
96
|
+
}, kind);
|
|
97
|
+
},
|
|
98
|
+
async close() {
|
|
99
|
+
if (active) {
|
|
100
|
+
await client.send('Tracing.end', {}, 5_000).catch(() => undefined);
|
|
101
|
+
await withTimeout(active.completePromise, 1_000, 'CDP tracing cleanup did not report tracingComplete.').catch(() => undefined);
|
|
102
|
+
active = undefined;
|
|
103
|
+
}
|
|
104
|
+
offData();
|
|
105
|
+
offComplete();
|
|
106
|
+
client.close();
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export function parseTraceCapture(capture, kind) {
|
|
111
|
+
const marker = findClockMarker(capture.events, capture.markerName);
|
|
112
|
+
if (kind.rendererScoped && !finite(marker?.pid)) {
|
|
113
|
+
const reason = 'Extension trace marker did not identify a renderer process.';
|
|
114
|
+
return {
|
|
115
|
+
platform: capture.platform,
|
|
116
|
+
javascript: unavailableJavaScriptSource('cdp-js-runtime-tasks', reason),
|
|
117
|
+
nativeUi: unavailableNativeUiSource('cdp-native-frame-timings', reason),
|
|
118
|
+
trace: traceEvidence(capture, 'unresolved'),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const rendererProcessId = kind.rendererScoped ? marker?.pid : undefined;
|
|
122
|
+
const scopedEvents = rendererProcessId === undefined
|
|
123
|
+
? capture.events
|
|
124
|
+
: capture.events.filter((event) => event.pid === rendererProcessId);
|
|
125
|
+
const trace = traceEvidence({ ...capture, events: scopedEvents }, kind.scope, rendererProcessId);
|
|
126
|
+
if (!marker ||
|
|
127
|
+
!finite(marker.ts) ||
|
|
128
|
+
capture.markerHostEpochMs === undefined ||
|
|
129
|
+
capture.markerUncertaintyMs === undefined) {
|
|
130
|
+
const reason = 'CDP trace clock marker was unavailable.';
|
|
131
|
+
return {
|
|
132
|
+
platform: capture.platform,
|
|
133
|
+
javascript: unavailableJavaScriptSource('cdp-js-runtime-tasks', reason),
|
|
134
|
+
nativeUi: unavailableNativeUiSource('cdp-native-frame-timings', reason),
|
|
135
|
+
trace,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const markerTs = marker.ts;
|
|
139
|
+
const markerHostEpochMs = capture.markerHostEpochMs;
|
|
140
|
+
const traceToEpochMs = (timestampUs) => markerHostEpochMs + (timestampUs - markerTs) / 1000;
|
|
141
|
+
const gapReasons = [
|
|
142
|
+
...capture.coverageGapReasons,
|
|
143
|
+
...(capture.overflow ? ['CDP trace retention limit was reached.'] : []),
|
|
144
|
+
...(capture.dataLossOccurred ? ['CDP reported trace data loss.'] : []),
|
|
145
|
+
];
|
|
146
|
+
const nativeSamples = nativeFrameSamples(scopedEvents, kind.frameTiming, traceToEpochMs);
|
|
147
|
+
const javascriptSamples = javascriptTaskSamples(scopedEvents, traceToEpochMs);
|
|
148
|
+
const status = capture.overflow || capture.dataLossOccurred ? 'partial' : 'complete';
|
|
149
|
+
return {
|
|
150
|
+
platform: capture.platform,
|
|
151
|
+
javascript: javascriptSourceResult('cdp-js-runtime-tasks', javascriptSamples, status, gapReasons, traceEventNames(scopedEvents), capture.markerUncertaintyMs),
|
|
152
|
+
nativeUi: nativeUiSourceResult(kind.nativeSource, nativeSamples, status, gapReasons, traceEventNames(scopedEvents), capture.markerUncertaintyMs),
|
|
153
|
+
trace,
|
|
154
|
+
rawTraceEvents: normalizeTraceTimestamps(scopedEvents, traceToEpochMs),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function normalizeTraceTimestamps(events, traceToEpochMs) {
|
|
158
|
+
return events.map((event) => finite(event.ts) ? { ...event, ts: traceToEpochMs(event.ts) * 1000 } : { ...event });
|
|
159
|
+
}
|
|
160
|
+
function traceEvidence(capture, scope, rendererProcessId) {
|
|
161
|
+
const counts = new Map();
|
|
162
|
+
for (const event of capture.events) {
|
|
163
|
+
const name = String(event.name ?? '');
|
|
164
|
+
counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
beginFrameCount: counts.get('BeginFrame') ?? 0,
|
|
168
|
+
dataLossOccurred: capture.dataLossOccurred,
|
|
169
|
+
drawFrameCount: counts.get('DrawFrame') ?? 0,
|
|
170
|
+
overflow: capture.overflow,
|
|
171
|
+
profileChunkCount: counts.get('ProfileChunk') ?? 0,
|
|
172
|
+
...(rendererProcessId === undefined ? {} : { rendererProcessId }),
|
|
173
|
+
runTaskCount: counts.get('RunTask') ?? 0,
|
|
174
|
+
scope,
|
|
175
|
+
totalEventCount: capture.events.length,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function nativeFrameSamples(events, frameTiming, traceToEpochMs) {
|
|
179
|
+
const begins = new Map();
|
|
180
|
+
const frames = [];
|
|
181
|
+
for (const event of events) {
|
|
182
|
+
if (event.name !== 'BeginFrame' && event.name !== 'DrawFrame')
|
|
183
|
+
continue;
|
|
184
|
+
const sequence = frameSequence(event);
|
|
185
|
+
if (!sequence || !finite(event.ts))
|
|
186
|
+
continue;
|
|
187
|
+
if (event.name === 'BeginFrame') {
|
|
188
|
+
begins.set(sequence, event);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const begin = begins.get(sequence);
|
|
192
|
+
if (!begin || !finite(begin.ts))
|
|
193
|
+
continue;
|
|
194
|
+
frames.push({ beginUs: begin.ts, endUs: event.ts });
|
|
195
|
+
}
|
|
196
|
+
frames.sort((first, second) => first.beginUs - second.beginUs);
|
|
197
|
+
const frameBudgetMs = estimateFrameBudgetMs(frames);
|
|
198
|
+
if (frameTiming === 'cadence') {
|
|
199
|
+
const samples = [];
|
|
200
|
+
for (let index = 1; index < frames.length; index += 1) {
|
|
201
|
+
const previous = frames[index - 1];
|
|
202
|
+
const current = frames[index];
|
|
203
|
+
if (!previous || !current)
|
|
204
|
+
continue;
|
|
205
|
+
const durationMs = (current.beginUs - previous.beginUs) / 1000;
|
|
206
|
+
if (durationMs <= 0)
|
|
207
|
+
continue;
|
|
208
|
+
samples.push({
|
|
209
|
+
cadenceInterval: true,
|
|
210
|
+
completedAtEpochMs: traceToEpochMs(current.beginUs),
|
|
211
|
+
durationMs,
|
|
212
|
+
...(frameBudgetMs
|
|
213
|
+
? {
|
|
214
|
+
frameBudgetMs,
|
|
215
|
+
overBudget: durationMs > frameBudgetMs * 1.01,
|
|
216
|
+
}
|
|
217
|
+
: {}),
|
|
218
|
+
startedAtEpochMs: traceToEpochMs(previous.beginUs),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return samples;
|
|
222
|
+
}
|
|
223
|
+
return frames
|
|
224
|
+
.map((frame) => {
|
|
225
|
+
const durationMs = (frame.endUs - frame.beginUs) / 1000;
|
|
226
|
+
return {
|
|
227
|
+
completedAtEpochMs: traceToEpochMs(frame.endUs),
|
|
228
|
+
durationMs,
|
|
229
|
+
...(frameBudgetMs
|
|
230
|
+
? {
|
|
231
|
+
frameBudgetMs,
|
|
232
|
+
overBudget: durationMs > frameBudgetMs * 1.01,
|
|
233
|
+
}
|
|
234
|
+
: {}),
|
|
235
|
+
startedAtEpochMs: traceToEpochMs(frame.beginUs),
|
|
236
|
+
};
|
|
237
|
+
})
|
|
238
|
+
.filter((sample) => sample.durationMs > 0);
|
|
239
|
+
}
|
|
240
|
+
function estimateFrameBudgetMs(frames) {
|
|
241
|
+
const cadenceMs = [];
|
|
242
|
+
for (let index = 1; index < frames.length; index += 1) {
|
|
243
|
+
const previous = frames[index - 1];
|
|
244
|
+
const current = frames[index];
|
|
245
|
+
if (!previous || !current)
|
|
246
|
+
continue;
|
|
247
|
+
const intervalMs = (current.beginUs - previous.beginUs) / 1000;
|
|
248
|
+
if (intervalMs >= 3.5 && intervalMs <= 40)
|
|
249
|
+
cadenceMs.push(intervalMs);
|
|
250
|
+
}
|
|
251
|
+
if (cadenceMs.length < 5)
|
|
252
|
+
return undefined;
|
|
253
|
+
cadenceMs.sort((first, second) => first - second);
|
|
254
|
+
const observedBudgetMs = percentile(cadenceMs, 0.1);
|
|
255
|
+
const refreshRateHz = Math.round(1000 / observedBudgetMs);
|
|
256
|
+
return refreshRateHz >= 24 && refreshRateHz <= 240 ? 1000 / refreshRateHz : undefined;
|
|
257
|
+
}
|
|
258
|
+
function percentile(sorted, quantile) {
|
|
259
|
+
if (sorted.length === 1)
|
|
260
|
+
return sorted[0] ?? 0;
|
|
261
|
+
const position = (sorted.length - 1) * quantile;
|
|
262
|
+
const lower = Math.floor(position);
|
|
263
|
+
const upper = Math.ceil(position);
|
|
264
|
+
const lowerValue = sorted[lower] ?? 0;
|
|
265
|
+
const upperValue = sorted[upper] ?? lowerValue;
|
|
266
|
+
return lowerValue + (upperValue - lowerValue) * (position - lower);
|
|
267
|
+
}
|
|
268
|
+
function javascriptTaskSamples(events, traceToEpochMs) {
|
|
269
|
+
const samples = [];
|
|
270
|
+
for (const event of events) {
|
|
271
|
+
if (event.name !== 'RunTask' || event.ph !== 'X')
|
|
272
|
+
continue;
|
|
273
|
+
if (!finite(event.ts) || !finite(event.dur) || event.dur <= 0)
|
|
274
|
+
continue;
|
|
275
|
+
samples.push({
|
|
276
|
+
completedAtEpochMs: traceToEpochMs(event.ts + event.dur),
|
|
277
|
+
durationMs: event.dur / 1000,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
return samples;
|
|
281
|
+
}
|
|
282
|
+
function findClockMarker(events, markerName) {
|
|
283
|
+
if (!markerName)
|
|
284
|
+
return undefined;
|
|
285
|
+
return events.find((candidate) => candidate.name === markerName ||
|
|
286
|
+
asRecord(candidate.args).sync_id === markerName ||
|
|
287
|
+
asRecord(asRecord(candidate.args).data).sync_id === markerName);
|
|
288
|
+
}
|
|
289
|
+
function frameSequence(event) {
|
|
290
|
+
const args = asRecord(event.args);
|
|
291
|
+
const value = args.frameSeqId ?? asRecord(args.data).frameSeqId;
|
|
292
|
+
return value === undefined ? undefined : String(value);
|
|
293
|
+
}
|
|
294
|
+
function javascriptSourceResult(kind, samples, status, coverageGapReasons, observedEventNames, clockSyncUncertaintyMs) {
|
|
295
|
+
return {
|
|
296
|
+
applicability: 'applicable',
|
|
297
|
+
status: samples.length > 0 ? status : 'partial',
|
|
298
|
+
kind,
|
|
299
|
+
unavailableReasons: [],
|
|
300
|
+
coverageGapReasons: [
|
|
301
|
+
...coverageGapReasons,
|
|
302
|
+
...(samples.length > 0
|
|
303
|
+
? []
|
|
304
|
+
: [
|
|
305
|
+
`No ${kind} samples were recorded. Observed trace events: ${observedEventNames.join(', ') || 'none'}.`,
|
|
306
|
+
]),
|
|
307
|
+
],
|
|
308
|
+
samples,
|
|
309
|
+
summary: summarizeJavaScriptTasks(samples),
|
|
310
|
+
clockSyncUncertaintyMs,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
function nativeUiSourceResult(kind, samples, status, coverageGapReasons, observedEventNames, clockSyncUncertaintyMs) {
|
|
314
|
+
const summary = summarizeFrames(samples);
|
|
315
|
+
const hasUnclassifiedCadenceGap = (summary.cadenceGapCount ?? 0) > 0;
|
|
316
|
+
return {
|
|
317
|
+
status: samples.length === 0 ? 'partial' : hasUnclassifiedCadenceGap ? 'partial' : status,
|
|
318
|
+
kind,
|
|
319
|
+
unavailableReasons: [],
|
|
320
|
+
coverageGapReasons: [
|
|
321
|
+
...coverageGapReasons,
|
|
322
|
+
...(samples.length > 0
|
|
323
|
+
? []
|
|
324
|
+
: [
|
|
325
|
+
`No ${kind} samples were recorded. Observed trace events: ${observedEventNames.join(', ') || 'none'}.`,
|
|
326
|
+
]),
|
|
327
|
+
...(hasUnclassifiedCadenceGap
|
|
328
|
+
? ['Unclassified native cadence gap prevents a complete FPS result.']
|
|
329
|
+
: []),
|
|
330
|
+
],
|
|
331
|
+
samples,
|
|
332
|
+
summary,
|
|
333
|
+
clockSyncUncertaintyMs,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
function traceEventNames(events) {
|
|
337
|
+
const counts = new Map();
|
|
338
|
+
for (const event of events) {
|
|
339
|
+
const name = String(event.name ?? 'unknown');
|
|
340
|
+
counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
341
|
+
}
|
|
342
|
+
return [...counts.entries()]
|
|
343
|
+
.sort((first, second) => second[1] - first[1])
|
|
344
|
+
.slice(0, 20)
|
|
345
|
+
.map(([name, count]) => `${name}(${count})`);
|
|
346
|
+
}
|
|
347
|
+
function unavailableJavaScriptSource(kind, reason) {
|
|
348
|
+
return {
|
|
349
|
+
applicability: 'applicable',
|
|
350
|
+
status: 'unavailable',
|
|
351
|
+
kind,
|
|
352
|
+
unavailableReasons: [reason],
|
|
353
|
+
coverageGapReasons: [],
|
|
354
|
+
samples: [],
|
|
355
|
+
summary: { taskCount: 0 },
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
function unavailableNativeUiSource(kind, reason) {
|
|
359
|
+
return {
|
|
360
|
+
status: 'unavailable',
|
|
361
|
+
kind,
|
|
362
|
+
unavailableReasons: [reason],
|
|
363
|
+
coverageGapReasons: [],
|
|
364
|
+
samples: [],
|
|
365
|
+
summary: { frameCount: 0 },
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
function withTimeout(promise, timeoutMs, message) {
|
|
369
|
+
let timer;
|
|
370
|
+
return Promise.race([
|
|
371
|
+
promise,
|
|
372
|
+
new Promise((_resolve, reject) => {
|
|
373
|
+
timer = setTimeout(() => reject(new Error(message)), timeoutMs);
|
|
374
|
+
}),
|
|
375
|
+
]).finally(() => clearTimeout(timer));
|
|
376
|
+
}
|
|
377
|
+
function finite(value) {
|
|
378
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
379
|
+
}
|
|
380
|
+
function asRecord(value) {
|
|
381
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
382
|
+
? value
|
|
383
|
+
: {};
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=cdp-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-trace.js","sourceRoot":"","sources":["../../src/runtime/cdp-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface FrameSample {
|
|
2
|
+
cadenceInterval?: boolean;
|
|
3
|
+
completedAtEpochMs: number;
|
|
4
|
+
durationMs: number;
|
|
5
|
+
frameBudgetMs?: number;
|
|
6
|
+
overBudget?: boolean;
|
|
7
|
+
startedAtEpochMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface FrameMetricSummary {
|
|
10
|
+
activeFps?: number;
|
|
11
|
+
cadenceGapCount?: number;
|
|
12
|
+
fpsIntervalCount?: number;
|
|
13
|
+
fpsUnavailableReason?: 'insufficient_active_frames' | 'refresh_rate_unavailable' | 'unclassified_cadence_gap';
|
|
14
|
+
frameBudgetMs?: number;
|
|
15
|
+
frameCount: number;
|
|
16
|
+
longestCadenceGapMs?: number;
|
|
17
|
+
longestFrameMs?: number;
|
|
18
|
+
overBudgetFrameCount?: number;
|
|
19
|
+
overBudgetFramePercent?: number;
|
|
20
|
+
p50FrameMs?: number;
|
|
21
|
+
p95FrameMs?: number;
|
|
22
|
+
p99FrameMs?: number;
|
|
23
|
+
refreshRateHz?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function summarizeFrames(samples: readonly FrameSample[]): FrameMetricSummary;
|
|
26
|
+
//# sourceMappingURL=frame-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-metrics.d.ts","sourceRoot":"","sources":["../../src/runtime/frame-metrics.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EACjB,4BAA4B,GAC5B,0BAA0B,GAC1B,0BAA0B,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,kBAAkB,CAgGnF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
const MIN_ACTIVE_INTERVALS = 5;
|
|
2
|
+
export function summarizeFrames(samples) {
|
|
3
|
+
const allValidSamples = samples.filter((sample) => Number.isFinite(sample.durationMs) && sample.durationMs > 0);
|
|
4
|
+
const frameBudgetMs = commonFrameBudget(allValidSamples);
|
|
5
|
+
const cadenceSamples = allValidSamples.length > 0 &&
|
|
6
|
+
allValidSamples.every((sample) => sample.cadenceInterval === true);
|
|
7
|
+
const cadenceGaps = cadenceSamples && frameBudgetMs
|
|
8
|
+
? allValidSamples.filter((sample) => sample.durationMs > frameBudgetMs * 3.01)
|
|
9
|
+
: [];
|
|
10
|
+
const validSamples = cadenceGaps.length > 0
|
|
11
|
+
? allValidSamples.filter((sample) => sample.durationMs <= (frameBudgetMs ?? 0) * 3.01)
|
|
12
|
+
: allValidSamples;
|
|
13
|
+
const durations = validSamples
|
|
14
|
+
.map((sample) => sample.durationMs)
|
|
15
|
+
.sort((first, second) => first - second);
|
|
16
|
+
if (durations.length === 0) {
|
|
17
|
+
return {
|
|
18
|
+
fpsUnavailableReason: frameBudgetMs
|
|
19
|
+
? 'insufficient_active_frames'
|
|
20
|
+
: 'refresh_rate_unavailable',
|
|
21
|
+
...(cadenceGaps.length > 0
|
|
22
|
+
? {
|
|
23
|
+
cadenceGapCount: cadenceGaps.length,
|
|
24
|
+
longestCadenceGapMs: round(Math.max(...cadenceGaps.map((sample) => sample.durationMs))),
|
|
25
|
+
}
|
|
26
|
+
: {}),
|
|
27
|
+
...(frameBudgetMs
|
|
28
|
+
? {
|
|
29
|
+
frameBudgetMs: round(frameBudgetMs),
|
|
30
|
+
refreshRateHz: round(1000 / frameBudgetMs),
|
|
31
|
+
}
|
|
32
|
+
: {}),
|
|
33
|
+
frameCount: 0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const frameBudgetOutcomes = validSamples
|
|
37
|
+
.map((sample) => sample.overBudget)
|
|
38
|
+
.filter((value) => value !== undefined);
|
|
39
|
+
const missedFrameBudgetCount = frameBudgetOutcomes.filter(Boolean).length;
|
|
40
|
+
const activeIntervals = frameBudgetMs
|
|
41
|
+
? activeRenderingIntervals(validSamples, frameBudgetMs)
|
|
42
|
+
: [];
|
|
43
|
+
const activeElapsedMs = activeIntervals.reduce((total, interval) => total + interval, 0);
|
|
44
|
+
const hasActiveFps = cadenceGaps.length === 0 &&
|
|
45
|
+
activeIntervals.length >= MIN_ACTIVE_INTERVALS &&
|
|
46
|
+
activeElapsedMs > 0;
|
|
47
|
+
const refreshRateHz = frameBudgetMs ? 1000 / frameBudgetMs : undefined;
|
|
48
|
+
return {
|
|
49
|
+
...(hasActiveFps
|
|
50
|
+
? {
|
|
51
|
+
activeFps: round(Math.min(refreshRateHz ?? Number.POSITIVE_INFINITY, (activeIntervals.length * 1000) / activeElapsedMs)),
|
|
52
|
+
fpsIntervalCount: activeIntervals.length,
|
|
53
|
+
}
|
|
54
|
+
: {
|
|
55
|
+
fpsUnavailableReason: frameBudgetMs
|
|
56
|
+
? cadenceGaps.length > 0
|
|
57
|
+
? 'unclassified_cadence_gap'
|
|
58
|
+
: 'insufficient_active_frames'
|
|
59
|
+
: 'refresh_rate_unavailable',
|
|
60
|
+
}),
|
|
61
|
+
...(cadenceGaps.length > 0
|
|
62
|
+
? {
|
|
63
|
+
cadenceGapCount: cadenceGaps.length,
|
|
64
|
+
longestCadenceGapMs: round(Math.max(...cadenceGaps.map((sample) => sample.durationMs))),
|
|
65
|
+
}
|
|
66
|
+
: {}),
|
|
67
|
+
...(frameBudgetMs
|
|
68
|
+
? {
|
|
69
|
+
frameBudgetMs: round(frameBudgetMs),
|
|
70
|
+
refreshRateHz: round(1000 / frameBudgetMs),
|
|
71
|
+
}
|
|
72
|
+
: {}),
|
|
73
|
+
frameCount: durations.length,
|
|
74
|
+
...(frameBudgetOutcomes.length === validSamples.length
|
|
75
|
+
? {
|
|
76
|
+
overBudgetFrameCount: missedFrameBudgetCount,
|
|
77
|
+
overBudgetFramePercent: round((missedFrameBudgetCount / validSamples.length) * 100),
|
|
78
|
+
}
|
|
79
|
+
: {}),
|
|
80
|
+
longestFrameMs: round(durations.at(-1) ?? 0),
|
|
81
|
+
p50FrameMs: round(percentile(durations, 0.5)),
|
|
82
|
+
p95FrameMs: round(percentile(durations, 0.95)),
|
|
83
|
+
p99FrameMs: round(percentile(durations, 0.99)),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function commonFrameBudget(samples) {
|
|
87
|
+
const budgets = samples
|
|
88
|
+
.map((sample) => sample.frameBudgetMs)
|
|
89
|
+
.filter((value) => value !== undefined && Number.isFinite(value) && value > 0)
|
|
90
|
+
.sort((first, second) => first - second);
|
|
91
|
+
return budgets.length > 0 ? percentile(budgets, 0.5) : undefined;
|
|
92
|
+
}
|
|
93
|
+
function activeRenderingIntervals(samples, frameBudgetMs) {
|
|
94
|
+
if (samples.every((sample) => sample.cadenceInterval === true)) {
|
|
95
|
+
return samples
|
|
96
|
+
.map((sample) => sample.durationMs)
|
|
97
|
+
.filter((durationMs) => Number.isFinite(durationMs) && durationMs > 0 && durationMs <= frameBudgetMs * 3.01);
|
|
98
|
+
}
|
|
99
|
+
const ordered = [...samples]
|
|
100
|
+
.map((sample) => ({
|
|
101
|
+
...sample,
|
|
102
|
+
startedAtEpochMs: sample.startedAtEpochMs ?? sample.completedAtEpochMs - sample.durationMs,
|
|
103
|
+
}))
|
|
104
|
+
.sort((first, second) => first.startedAtEpochMs - second.startedAtEpochMs);
|
|
105
|
+
const intervals = [];
|
|
106
|
+
for (let index = 1; index < ordered.length; index += 1) {
|
|
107
|
+
const previous = ordered[index - 1];
|
|
108
|
+
const current = ordered[index];
|
|
109
|
+
if (!previous || !current)
|
|
110
|
+
continue;
|
|
111
|
+
const interval = current.startedAtEpochMs - previous.startedAtEpochMs;
|
|
112
|
+
if (!Number.isFinite(interval) || interval <= 0)
|
|
113
|
+
continue;
|
|
114
|
+
const continuous = interval <= frameBudgetMs * 3.01;
|
|
115
|
+
const explainedBySlowFrame = Math.max(previous.durationMs, current.durationMs) >= interval - frameBudgetMs * 1.01;
|
|
116
|
+
if (continuous || explainedBySlowFrame)
|
|
117
|
+
intervals.push(interval);
|
|
118
|
+
}
|
|
119
|
+
return intervals;
|
|
120
|
+
}
|
|
121
|
+
function percentile(sorted, quantile) {
|
|
122
|
+
if (sorted.length === 1)
|
|
123
|
+
return sorted[0] ?? 0;
|
|
124
|
+
const position = (sorted.length - 1) * quantile;
|
|
125
|
+
const lower = Math.floor(position);
|
|
126
|
+
const upper = Math.ceil(position);
|
|
127
|
+
const lowerValue = sorted[lower] ?? 0;
|
|
128
|
+
const upperValue = sorted[upper] ?? lowerValue;
|
|
129
|
+
return lowerValue + (upperValue - lowerValue) * (position - lower);
|
|
130
|
+
}
|
|
131
|
+
function round(value) {
|
|
132
|
+
return Math.round(value * 1000) / 1000;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=frame-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-metrics.js","sourceRoot":"","sources":["../../src/runtime/frame-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface JavaScriptTaskSample {
|
|
2
|
+
completedAtEpochMs: number;
|
|
3
|
+
durationMs: number;
|
|
4
|
+
}
|
|
5
|
+
export interface JavaScriptTaskMetricSummary {
|
|
6
|
+
longestTaskMs?: number;
|
|
7
|
+
longTaskCount?: number;
|
|
8
|
+
longTaskPercent?: number;
|
|
9
|
+
p50TaskMs?: number;
|
|
10
|
+
p95TaskMs?: number;
|
|
11
|
+
p99TaskMs?: number;
|
|
12
|
+
taskCount: number;
|
|
13
|
+
totalTaskTimeMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function summarizeJavaScriptTasks(samples: readonly JavaScriptTaskSample[]): JavaScriptTaskMetricSummary;
|
|
16
|
+
//# sourceMappingURL=js-task-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-task-metrics.d.ts","sourceRoot":"","sources":["../../src/runtime/js-task-metrics.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GACvC,2BAA2B,CAkB7B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const LONG_TASK_MS = 50;
|
|
2
|
+
export function summarizeJavaScriptTasks(samples) {
|
|
3
|
+
const durations = samples
|
|
4
|
+
.map((sample) => sample.durationMs)
|
|
5
|
+
.filter((duration) => Number.isFinite(duration) && duration > 0)
|
|
6
|
+
.sort((first, second) => first - second);
|
|
7
|
+
if (durations.length === 0)
|
|
8
|
+
return { taskCount: 0 };
|
|
9
|
+
const longTaskCount = durations.filter((duration) => duration >= LONG_TASK_MS).length;
|
|
10
|
+
return {
|
|
11
|
+
longestTaskMs: round(durations.at(-1) ?? 0),
|
|
12
|
+
longTaskCount,
|
|
13
|
+
longTaskPercent: round((longTaskCount / durations.length) * 100),
|
|
14
|
+
p50TaskMs: round(percentile(durations, 0.5)),
|
|
15
|
+
p95TaskMs: round(percentile(durations, 0.95)),
|
|
16
|
+
p99TaskMs: round(percentile(durations, 0.99)),
|
|
17
|
+
taskCount: durations.length,
|
|
18
|
+
totalTaskTimeMs: round(durations.reduce((total, duration) => total + duration, 0)),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function percentile(sorted, quantile) {
|
|
22
|
+
if (sorted.length === 1)
|
|
23
|
+
return sorted[0] ?? 0;
|
|
24
|
+
const position = (sorted.length - 1) * quantile;
|
|
25
|
+
const lower = Math.floor(position);
|
|
26
|
+
const upper = Math.ceil(position);
|
|
27
|
+
const lowerValue = sorted[lower] ?? 0;
|
|
28
|
+
const upperValue = sorted[upper] ?? lowerValue;
|
|
29
|
+
return lowerValue + (upperValue - lowerValue) * (position - lower);
|
|
30
|
+
}
|
|
31
|
+
function round(value) {
|
|
32
|
+
return Math.round(value * 1000) / 1000;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=js-task-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-task-metrics.js","sourceRoot":"","sources":["../../src/runtime/js-task-metrics.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,EAAE,CAAC;AAkBxB,MAAM,UAAU,wBAAwB,CACtC,OAAwC;IAExC,MAAM,SAAS,GAAG,OAAO;SACtB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;SAClC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;SAC/D,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAEpD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,MAAM,CAAC;IACtF,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,aAAa;QACb,eAAe,EAAE,KAAK,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QAChE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC5C,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;KACnF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAyB,EAAE,QAAgB;IAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC;IAC/C,OAAO,UAAU,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@farmslot/recipe-runner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -63,6 +63,11 @@
|
|
|
63
63
|
"import": "./dist/runtime/cdp.js",
|
|
64
64
|
"default": "./dist/runtime/cdp.js"
|
|
65
65
|
},
|
|
66
|
+
"./runtime/cdp-trace": {
|
|
67
|
+
"types": "./dist/runtime/cdp-trace.d.ts",
|
|
68
|
+
"import": "./dist/runtime/cdp-trace.js",
|
|
69
|
+
"default": "./dist/runtime/cdp-trace.js"
|
|
70
|
+
},
|
|
66
71
|
"./runtime/react-native-bridge": {
|
|
67
72
|
"types": "./dist/runtime/react-native-bridge.d.ts",
|
|
68
73
|
"import": "./dist/runtime/react-native-bridge.js",
|