@electron-stagewright/plugin-budget 0.0.0-stage → 0.1.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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -2
  3. package/dist/budget.d.ts +134 -0
  4. package/dist/budget.d.ts.map +1 -0
  5. package/dist/budget.js +129 -0
  6. package/dist/budget.js.map +1 -0
  7. package/dist/bundle.d.ts +15 -0
  8. package/dist/bundle.d.ts.map +1 -0
  9. package/dist/bundle.js +64 -0
  10. package/dist/bundle.js.map +1 -0
  11. package/dist/check.d.ts +43 -0
  12. package/dist/check.d.ts.map +1 -0
  13. package/dist/check.js +172 -0
  14. package/dist/check.js.map +1 -0
  15. package/dist/cli.d.ts +77 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +401 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/index.d.ts +24 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +17 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/measure.d.ts +47 -0
  24. package/dist/measure.d.ts.map +1 -0
  25. package/dist/measure.js +139 -0
  26. package/dist/measure.js.map +1 -0
  27. package/dist/memory.d.ts +43 -0
  28. package/dist/memory.d.ts.map +1 -0
  29. package/dist/memory.js +159 -0
  30. package/dist/memory.js.map +1 -0
  31. package/dist/plugin.d.ts +13 -0
  32. package/dist/plugin.d.ts.map +1 -0
  33. package/dist/plugin.js +456 -0
  34. package/dist/plugin.js.map +1 -0
  35. package/dist/probe.d.ts +64 -0
  36. package/dist/probe.d.ts.map +1 -0
  37. package/dist/probe.js +161 -0
  38. package/dist/probe.js.map +1 -0
  39. package/dist/render.d.ts +21 -0
  40. package/dist/render.d.ts.map +1 -0
  41. package/dist/render.js +63 -0
  42. package/dist/render.js.map +1 -0
  43. package/dist/run.d.ts +218 -0
  44. package/dist/run.d.ts.map +1 -0
  45. package/dist/run.js +218 -0
  46. package/dist/run.js.map +1 -0
  47. package/dist/session.d.ts +54 -0
  48. package/dist/session.d.ts.map +1 -0
  49. package/dist/session.js +167 -0
  50. package/dist/session.js.map +1 -0
  51. package/package.json +60 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `@electron-stagewright/plugin-budget`: performance budgets for Electron apps.
3
+ *
4
+ * @module
5
+ */
6
+ import { budgetPlugin } from './plugin.js';
7
+ export default budgetPlugin;
8
+ export { budgetPlugin, createBudgetPlugin } from './plugin.js';
9
+ export { BUDGET_PLATFORMS, BudgetFileError, MEMORY_METRICS, PHASES, PROCESS_TYPES, budgetSchema, loadBudget, parseBudget, } from './budget.js';
10
+ export type { Budget, BudgetPlatform, BundleEntryBudget, MemoryMetric, MemoryPlatformBudget, Phase, ProcessType, } from './budget.js';
11
+ export { measureBundle } from './bundle.js';
12
+ export { checkRun } from './check.js';
13
+ export type { CheckOptions, CheckReport, CheckResult, CheckStatus } from './check.js';
14
+ export { compareRuns, renderCheckReport, renderComparison } from './render.js';
15
+ export type { ComparisonRow } from './render.js';
16
+ export { RUN_FORMAT, RUN_SCHEMA_VERSION, RunFileError, createRun, loadRun, memoryByType, runSchema, summarizeLatencies, summarizeRun, } from './run.js';
17
+ export type { BudgetRun, BundleEntryMeasurement, LatencySummary, Measurement, MemoryMeasurement, ProcessMemory, StallSummary, SummaryRow, } from './run.js';
18
+ export { classifyProcess, measureMemory, platformMetric } from './memory.js';
19
+ export type { AppProcessMetric, OsMemoryReader } from './memory.js';
20
+ export { measureSession, startWindow } from './session.js';
21
+ export type { EvaluatingSession, IpcProbe, MeasureOptions, SessionMeasurement } from './session.js';
22
+ export { measureApp } from './measure.js';
23
+ export type { LaunchPhase, MeasureAppOptions, Workload, WorkloadContext } from './measure.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAe,YAAY,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,MAAM,EACN,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9E,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,YAAY,GACb,MAAM,UAAU,CAAA;AACjB,YAAY,EACV,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5E,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1D,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `@electron-stagewright/plugin-budget`: performance budgets for Electron apps.
3
+ *
4
+ * @module
5
+ */
6
+ import { budgetPlugin } from './plugin.js';
7
+ export default budgetPlugin;
8
+ export { budgetPlugin, createBudgetPlugin } from './plugin.js';
9
+ export { BUDGET_PLATFORMS, BudgetFileError, MEMORY_METRICS, PHASES, PROCESS_TYPES, budgetSchema, loadBudget, parseBudget, } from './budget.js';
10
+ export { measureBundle } from './bundle.js';
11
+ export { checkRun } from './check.js';
12
+ export { compareRuns, renderCheckReport, renderComparison } from './render.js';
13
+ export { RUN_FORMAT, RUN_SCHEMA_VERSION, RunFileError, createRun, loadRun, memoryByType, runSchema, summarizeLatencies, summarizeRun, } from './run.js';
14
+ export { classifyProcess, measureMemory, platformMetric } from './memory.js';
15
+ export { measureSession, startWindow } from './session.js';
16
+ export { measureApp } from './measure.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAe,YAAY,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,MAAM,EACN,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AAUpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9E,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,YAAY,GACb,MAAM,UAAU,CAAA;AAWjB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Launch an app and measure it over cold and warm rounds on a throwaway profile.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Budget } from './budget.js';
7
+ import { type BudgetRun } from './run.js';
8
+ export type LaunchPhase = 'cold' | 'warm';
9
+ /** What a workload script receives: the tool dispatcher of the server driving the app. */
10
+ export interface WorkloadContext {
11
+ readonly sessionId: string;
12
+ readonly phase: LaunchPhase;
13
+ dispatch(tool: string, args?: Record<string, unknown>): Promise<Record<string, unknown>>;
14
+ }
15
+ export type Workload = (context: WorkloadContext) => Promise<void>;
16
+ export interface MeasureAppOptions {
17
+ /** `electron_launch` arguments: `main` and/or `executablePath`, plus `args`, `env`, `cwd`. */
18
+ readonly launch: {
19
+ readonly main?: string;
20
+ readonly executablePath?: string;
21
+ readonly args?: readonly string[];
22
+ readonly env?: Readonly<Record<string, string>>;
23
+ readonly cwd?: string;
24
+ };
25
+ readonly rounds?: number;
26
+ readonly phases?: readonly LaunchPhase[];
27
+ /** Wait after the window loads before the measurement window opens. */
28
+ readonly settleMs?: number;
29
+ readonly windowMs?: number;
30
+ /** Supplies the IPC probe and the default window length. */
31
+ readonly budget?: Budget;
32
+ /** Runs inside the measurement window instead of idling for `windowMs`. */
33
+ readonly workload?: Workload;
34
+ /** A workload still running after this fails the measurement. */
35
+ readonly workloadTimeoutMs?: number;
36
+ readonly label?: string;
37
+ readonly onProgress?: (message: string) => void;
38
+ }
39
+ export declare const DEFAULT_ROUNDS = 3;
40
+ export declare const DEFAULT_SETTLE_MS = 3000;
41
+ export declare const DEFAULT_WORKLOAD_TIMEOUT_MS = 120000;
42
+ /**
43
+ * Measure `rounds` rounds. Each round gets an empty profile: the first launch on it is `cold`,
44
+ * the relaunch `warm`. Asking only for `warm` still does the cold launch, unmeasured.
45
+ */
46
+ export declare function measureApp(options: MeasureAppOptions): Promise<BudgetRun>;
47
+ //# sourceMappingURL=measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAA;AAEzC,0FAA0F;AAC1F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACzF;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAElE,MAAM,WAAW,iBAAiB;IAChC,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;QAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IACxC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChD;AAED,eAAO,MAAM,cAAc,IAAI,CAAA;AAC/B,eAAO,MAAM,iBAAiB,OAAQ,CAAA;AACtC,eAAO,MAAM,2BAA2B,SAAU,CAAA;AAuGlD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgC/E"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Launch an app and measure it over cold and warm rounds on a throwaway profile.
3
+ *
4
+ * @module
5
+ */
6
+ import { mkdtemp, rm } from 'node:fs/promises';
7
+ import { tmpdir } from 'node:os';
8
+ import path from 'node:path';
9
+ import { NOOP_LOGGER, createServer } from '@electron-stagewright/core';
10
+ import { DEFAULT_WINDOW_MS } from './probe.js';
11
+ import { createRun } from './run.js';
12
+ import { measureSession, startWindow } from './session.js';
13
+ export const DEFAULT_ROUNDS = 3;
14
+ export const DEFAULT_SETTLE_MS = 3_000;
15
+ export const DEFAULT_WORKLOAD_TIMEOUT_MS = 120_000;
16
+ const LOAD_TIMEOUT_MS = 30_000;
17
+ // loadEventEnd is only set once the load event has finished.
18
+ const LOADED_BODY = `
19
+ await new Promise((resolve) => {
20
+ if (document.readyState === 'complete') resolve();
21
+ else addEventListener('load', resolve, { once: true });
22
+ });
23
+ await new Promise((resolve) => setTimeout(resolve, 0));
24
+ return true;
25
+ `;
26
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
27
+ async function withTimeout(work, ms, what) {
28
+ let timer;
29
+ try {
30
+ return await Promise.race([
31
+ work,
32
+ new Promise((_, reject) => {
33
+ timer = setTimeout(() => reject(new Error(`${what} timed out after ${ms} ms`)), ms);
34
+ }),
35
+ ]);
36
+ }
37
+ finally {
38
+ clearTimeout(timer);
39
+ }
40
+ }
41
+ /** Launch once on `profile` and, when `measure` is set, take one measurement. */
42
+ async function launchOnce(options, profile, phase, measure) {
43
+ const server = await createServer({ allowEval: true, logger: NOOP_LOGGER });
44
+ const dispatch = (tool, args = {}) => server.dispatcher.dispatch(tool, args);
45
+ try {
46
+ const launched = await dispatch('electron_launch', {
47
+ ...options.launch,
48
+ args: [...(options.launch.args ?? []), `--user-data-dir=${profile}`],
49
+ });
50
+ if (launched['ok'] !== true) {
51
+ throw new Error(`could not launch the app: ${String(launched['error'] ?? launched['code'])}`);
52
+ }
53
+ const managed = server.sessions.resolve();
54
+ try {
55
+ const session = managed.session;
56
+ await withTimeout(session.evaluate('renderer', LOADED_BODY), LOAD_TIMEOUT_MS, 'window load');
57
+ await sleep(options.settleMs ?? DEFAULT_SETTLE_MS);
58
+ // A priming launch still loads and settles, so it leaves the profile a measured cold one would.
59
+ if (!measure)
60
+ return {};
61
+ const probe = options.budget?.ipc;
62
+ const ipc = probe === undefined
63
+ ? undefined
64
+ : {
65
+ probe: probe.probe,
66
+ ...(probe.intervalMs === undefined ? {} : { intervalMs: probe.intervalMs }),
67
+ };
68
+ const open = await startWindow(session, {
69
+ allowRenderer: true,
70
+ ...(ipc === undefined ? {} : { ipc }),
71
+ });
72
+ const windowMs = options.windowMs ?? options.budget?.mainThread?.windowMs ?? DEFAULT_WINDOW_MS;
73
+ if (options.workload === undefined)
74
+ await sleep(windowMs);
75
+ else {
76
+ // A timed-out workload keeps running; once the window closes its dispatch rejects, so a
77
+ // polling loop ends instead of keeping the process alive.
78
+ let ended = false;
79
+ const workloadDispatch = (tool, args) => ended
80
+ ? Promise.reject(new Error('the measurement window has closed'))
81
+ : dispatch(tool, args);
82
+ try {
83
+ await withTimeout(options.workload({ sessionId: managed.id, phase, dispatch: workloadDispatch }), options.workloadTimeoutMs ?? DEFAULT_WORKLOAD_TIMEOUT_MS, 'workload');
84
+ }
85
+ finally {
86
+ ended = true;
87
+ }
88
+ }
89
+ const measured = await measureSession(session, { allowRenderer: true, open, windowMs });
90
+ return {
91
+ measurement: measured.measurement,
92
+ ...(measured.electronVersion === undefined
93
+ ? {}
94
+ : { electronVersion: measured.electronVersion }),
95
+ };
96
+ }
97
+ finally {
98
+ await dispatch('electron_stop', { sessionId: managed.id }).catch(() => undefined);
99
+ }
100
+ }
101
+ finally {
102
+ await server.close().catch(() => undefined);
103
+ }
104
+ }
105
+ /**
106
+ * Measure `rounds` rounds. Each round gets an empty profile: the first launch on it is `cold`,
107
+ * the relaunch `warm`. Asking only for `warm` still does the cold launch, unmeasured.
108
+ */
109
+ export async function measureApp(options) {
110
+ const phases = options.phases ?? ['cold', 'warm'];
111
+ const rounds = [];
112
+ let electronVersion;
113
+ for (let round = 1; round <= (options.rounds ?? DEFAULT_ROUNDS); round += 1) {
114
+ const profile = await mkdtemp(path.join(tmpdir(), 'sw-budget-profile-'));
115
+ try {
116
+ for (const phase of ['cold', 'warm']) {
117
+ const measure = phases.includes(phase);
118
+ if (!measure && !(phase === 'cold' && phases.includes('warm')))
119
+ continue;
120
+ options.onProgress?.(`round ${round}: ${phase}${measure ? '' : ' (priming, unmeasured)'}`);
121
+ const result = await launchOnce(options, profile, phase, measure);
122
+ electronVersion ??= result.electronVersion;
123
+ if (result.measurement !== undefined) {
124
+ rounds.push({ round, phase, measurement: result.measurement });
125
+ }
126
+ }
127
+ }
128
+ finally {
129
+ // A process that outlives the app can hold the profile; that must not discard the rounds.
130
+ await rm(profile, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }).catch((error) => options.onProgress?.(`could not remove ${profile}: ${error instanceof Error ? error.message : String(error)}`));
131
+ }
132
+ }
133
+ return createRun({
134
+ rounds,
135
+ ...(electronVersion === undefined ? {} : { electronVersion }),
136
+ ...(options.label === undefined ? {} : { label: options.label }),
137
+ });
138
+ }
139
+ //# sourceMappingURL=measure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.js","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,YAAY,EAA0B,MAAM,4BAA4B,CAAA;AAG9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,cAAc,CAAA;AAqCzE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAA;AACtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAA;AAClD,MAAM,eAAe,GAAG,MAAM,CAAA;AAE9B,6DAA6D;AAC7D,MAAM,WAAW,GAAG;;;;;;;CAOnB,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAE9F,KAAK,UAAU,WAAW,CAAI,IAAgB,EAAE,EAAU,EAAE,IAAY;IACtE,IAAI,KAAiC,CAAA;IACrC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,IAAI;YACJ,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACrF,CAAC,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,UAAU,CACvB,OAA0B,EAC1B,OAAe,EACf,KAAkB,EAClB,OAAgB;IAEhB,MAAM,MAAM,GAAsB,MAAM,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;IAC9F,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAAgC,EAAE,EAAE,EAAE,CACpE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAgD,CAAA;IACvF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE;YACjD,GAAG,OAAO,CAAC,MAAM;YACjB,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,mBAAmB,OAAO,EAAE,CAAC;SACrE,CAAC,CAAA;QACF,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;QAC/F,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;YAC/B,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,aAAa,CAAC,CAAA;YAC5F,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAA;YAClD,gGAAgG;YAChG,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAA;YAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAA;YACjC,MAAM,GAAG,GACP,KAAK,KAAK,SAAS;gBACjB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC;oBACE,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;iBAC5E,CAAA;YACP,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE;gBACtC,aAAa,EAAE,IAAI;gBACnB,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;aACtC,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,IAAI,iBAAiB,CAAA;YAC9F,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;gBAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAA;iBACpD,CAAC;gBACJ,wFAAwF;gBACxF,0DAA0D;gBAC1D,IAAI,KAAK,GAAG,KAAK,CAAA;gBACjB,MAAM,gBAAgB,GAAgC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CACnE,KAAK;oBACH,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;oBAChE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBAC1B,IAAI,CAAC;oBACH,MAAM,WAAW,CACf,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,EAC9E,OAAO,CAAC,iBAAiB,IAAI,2BAA2B,EACxD,UAAU,CACX,CAAA;gBACH,CAAC;wBAAS,CAAC;oBACT,KAAK,GAAG,IAAI,CAAA;gBACd,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YACvF,OAAO;gBACL,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,GAAG,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC;aACnD,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,QAAQ,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACnF,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,MAAM,MAAM,GAAkC,EAAE,CAAA;IAChD,IAAI,eAAmC,CAAA;IACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAA;QACxE,IAAI,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAU,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;gBACtC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAAE,SAAQ;gBACxE,OAAO,CAAC,UAAU,EAAE,CAAC,SAAS,KAAK,KAAK,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAA;gBAC1F,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;gBACjE,eAAe,KAAK,MAAM,CAAC,eAAe,CAAA;gBAC1C,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACrC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,0FAA0F;YAC1F,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CACvF,CAAC,KAAc,EAAE,EAAE,CACjB,OAAO,CAAC,UAAU,EAAE,CAClB,oBAAoB,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzF,CACJ,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;QACf,MAAM;QACN,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;QAC7D,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;KACjE,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Per-process memory in the platform's own metric, read from the host by pid.
3
+ *
4
+ * `app.getAppMetrics()` supplies the pids, their types, and working set; the OS supplies the
5
+ * number a user sees: footprint on macOS, Pss on Linux, private bytes on Windows.
6
+ *
7
+ * @module
8
+ */
9
+ import type { MemoryMetric, ProcessType } from './budget.js';
10
+ import type { MemoryMeasurement } from './run.js';
11
+ /** One entry of `app.getAppMetrics()`, reduced to what the budget reads. */
12
+ export interface AppProcessMetric {
13
+ readonly pid: number;
14
+ readonly type: string;
15
+ readonly name?: string | null;
16
+ readonly workingSetKb: number;
17
+ /** Windows only. */
18
+ readonly privateKb?: number | null;
19
+ }
20
+ /** Map Electron's process type (`Browser`, `Tab`, `GPU`, `Utility`, ...) to a budget bucket. */
21
+ export declare function classifyProcess(type: string): ProcessType;
22
+ export declare function platformMetric(platform: string): MemoryMetric;
23
+ /** Bytes per pid from `footprint -j` output. Pids that already exited are simply absent. */
24
+ export declare function parseFootprintJson(text: string): Map<number, number>;
25
+ /** Pss in bytes from `/proc/<pid>/smaps_rollup`, or undefined when the line is missing. */
26
+ export declare function parseSmapsRollup(text: string): number | undefined;
27
+ /** Reads the OS metric for a set of pids. Injected so tests never touch the host. */
28
+ export type OsMemoryReader = (pids: readonly number[]) => Promise<Map<number, number>>;
29
+ /** Epoch ms a host pid started, `missing` when no such pid exists, undefined when unknown. */
30
+ export type HostStartTimeReader = (pid: number) => Promise<number | 'missing' | undefined>;
31
+ /** Boot time plus the pid's start ticks: how Chromium computes `process.getCreationTime()`. */
32
+ export declare function readProcStartTime(pid: number, read?: (file: string) => Promise<string>): Promise<number | 'missing' | undefined>;
33
+ export declare function hostStartTimeReader(platform: string): HostStartTimeReader | undefined;
34
+ export declare function osMemoryReader(platform: string): OsMemoryReader | undefined;
35
+ /**
36
+ * Build the memory sample for one moment. `error` explains an OS reader that failed; the sample
37
+ * then still carries working set, and its `metric` values are absent rather than guessed.
38
+ */
39
+ export declare function measureMemory(processes: readonly AppProcessMetric[], platform: string, reader?: OsMemoryReader | undefined): Promise<{
40
+ memory: MemoryMeasurement;
41
+ error?: string;
42
+ }>;
43
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjD,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,oBAAoB;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC;AAKD,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAazD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAK7D;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAapE;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED,qFAAqF;AACrF,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAmCtF,8FAA8F;AAC9F,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,CAAA;AAK1F,+FAA+F;AAC/F,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAoC,GACzE,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,CASzC;AAqBD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAIrF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAI3E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,SAAS,gBAAgB,EAAE,EACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,cAAc,GAAG,SAAoC,GAC5D,OAAO,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BxD"}
package/dist/memory.js ADDED
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Per-process memory in the platform's own metric, read from the host by pid.
3
+ *
4
+ * `app.getAppMetrics()` supplies the pids, their types, and working set; the OS supplies the
5
+ * number a user sees: footprint on macOS, Pss on Linux, private bytes on Windows.
6
+ *
7
+ * @module
8
+ */
9
+ import { execFile } from 'node:child_process';
10
+ import { mkdtemp, readFile, rm } from 'node:fs/promises';
11
+ import { tmpdir } from 'node:os';
12
+ import path from 'node:path';
13
+ const MB = 1024 * 1024;
14
+ const round1 = (value) => Math.round(value * 10) / 10;
15
+ /** Map Electron's process type (`Browser`, `Tab`, `GPU`, `Utility`, ...) to a budget bucket. */
16
+ export function classifyProcess(type) {
17
+ switch (type) {
18
+ case 'Browser':
19
+ return 'main';
20
+ case 'Tab':
21
+ return 'renderer';
22
+ case 'GPU':
23
+ return 'gpu';
24
+ case 'Utility':
25
+ return 'utility';
26
+ default:
27
+ return 'other';
28
+ }
29
+ }
30
+ export function platformMetric(platform) {
31
+ if (platform === 'darwin')
32
+ return 'footprint';
33
+ if (platform === 'linux')
34
+ return 'pss';
35
+ if (platform === 'win32')
36
+ return 'privateBytes';
37
+ return 'workingSet';
38
+ }
39
+ /** Bytes per pid from `footprint -j` output. Pids that already exited are simply absent. */
40
+ export function parseFootprintJson(text) {
41
+ const parsed = JSON.parse(text);
42
+ const unit = parsed['bytes per unit'] ?? 1;
43
+ const bytes = new Map();
44
+ for (const entry of parsed.processes ?? []) {
45
+ if (typeof entry.pid === 'number' && typeof entry.footprint === 'number') {
46
+ bytes.set(entry.pid, entry.footprint * unit);
47
+ }
48
+ }
49
+ return bytes;
50
+ }
51
+ /** Pss in bytes from `/proc/<pid>/smaps_rollup`, or undefined when the line is missing. */
52
+ export function parseSmapsRollup(text) {
53
+ const match = /^Pss:\s+(\d+)\s+kB/m.exec(text);
54
+ return match?.[1] === undefined ? undefined : Number(match[1]) * 1024;
55
+ }
56
+ const FOOTPRINT_TIMEOUT_MS = 15_000;
57
+ async function readFootprint(pids) {
58
+ // footprint only writes JSON to a regular file.
59
+ const dir = await mkdtemp(path.join(tmpdir(), 'sw-budget-fp-'));
60
+ const file = path.join(dir, 'footprint.json');
61
+ try {
62
+ await new Promise((resolve, reject) => {
63
+ execFile('/usr/bin/footprint', ['-j', file, ...pids.map(String)], { timeout: FOOTPRINT_TIMEOUT_MS, maxBuffer: 16 * MB }, (error) => (error === null ? resolve() : reject(error)));
64
+ });
65
+ return parseFootprintJson(await readFile(file, 'utf8'));
66
+ }
67
+ finally {
68
+ await rm(dir, { recursive: true, force: true });
69
+ }
70
+ }
71
+ async function readPss(pids) {
72
+ const bytes = new Map();
73
+ await Promise.all(pids.map(async (pid) => {
74
+ const text = await readFile(`/proc/${pid}/smaps_rollup`, 'utf8').catch(() => undefined);
75
+ const pss = text === undefined ? undefined : parseSmapsRollup(text);
76
+ if (pss !== undefined)
77
+ bytes.set(pid, pss);
78
+ }));
79
+ return bytes;
80
+ }
81
+ /** Linux exposes start times in clock ticks; USER_HZ is 100 on every supported architecture. */
82
+ const CLOCK_TICKS_PER_SECOND = 100;
83
+ /** Boot time plus the pid's start ticks: how Chromium computes `process.getCreationTime()`. */
84
+ export async function readProcStartTime(pid, read = (file) => readFile(file, 'utf8')) {
85
+ const stat = await read(`/proc/${pid}/stat`).catch(() => undefined);
86
+ if (stat === undefined)
87
+ return 'missing';
88
+ const procStat = await read('/proc/stat').catch(() => '');
89
+ // The command name may hold spaces and parentheses; fields resume after the last ')'.
90
+ const ticks = Number(stat.slice(stat.lastIndexOf(')') + 2).split(' ')[19]);
91
+ const bootSeconds = Number(/^btime (\d+)$/m.exec(procStat)?.[1]);
92
+ if (!Number.isFinite(ticks) || !Number.isFinite(bootSeconds))
93
+ return undefined;
94
+ return bootSeconds * 1000 + (ticks / CLOCK_TICKS_PER_SECOND) * 1000;
95
+ }
96
+ function readPsStartTime(pid) {
97
+ return new Promise((resolve) => {
98
+ execFile('ps', ['-o', 'lstart=', '-p', String(pid)],
99
+ // lstart follows the locale; only the C locale is one Date.parse reads.
100
+ { timeout: 5_000, env: { ...process.env, LC_ALL: 'C' } }, (error, stdout, stderr) => {
101
+ // ps exits 1 silently for an unknown pid; a ps that rejects the flags says why on stderr.
102
+ if (error !== null) {
103
+ return resolve(error.code === 1 && stderr.trim() === '' ? 'missing' : undefined);
104
+ }
105
+ const started = Date.parse(stdout.trim());
106
+ resolve(Number.isNaN(started) ? undefined : started);
107
+ });
108
+ });
109
+ }
110
+ export function hostStartTimeReader(platform) {
111
+ if (platform === 'linux')
112
+ return (pid) => readProcStartTime(pid);
113
+ if (platform === 'darwin')
114
+ return readPsStartTime;
115
+ return undefined;
116
+ }
117
+ export function osMemoryReader(platform) {
118
+ if (platform === 'darwin')
119
+ return readFootprint;
120
+ if (platform === 'linux')
121
+ return readPss;
122
+ return undefined;
123
+ }
124
+ /**
125
+ * Build the memory sample for one moment. `error` explains an OS reader that failed; the sample
126
+ * then still carries working set, and its `metric` values are absent rather than guessed.
127
+ */
128
+ export async function measureMemory(processes, platform, reader = osMemoryReader(platform)) {
129
+ const metric = platformMetric(platform);
130
+ let osBytes = new Map();
131
+ let error;
132
+ if (reader !== undefined) {
133
+ try {
134
+ osBytes = await reader(processes.map((entry) => entry.pid));
135
+ }
136
+ catch (cause) {
137
+ error = `could not read ${metric}: ${cause instanceof Error ? cause.message : String(cause)}`;
138
+ }
139
+ }
140
+ const memory = {
141
+ metric,
142
+ processes: processes.map((entry) => {
143
+ const bytes = metric === 'privateBytes'
144
+ ? typeof entry.privateKb === 'number'
145
+ ? entry.privateKb * 1024
146
+ : undefined
147
+ : osBytes.get(entry.pid);
148
+ return {
149
+ pid: entry.pid,
150
+ type: classifyProcess(entry.type),
151
+ ...(typeof entry.name === 'string' && entry.name.length > 0 ? { name: entry.name } : {}),
152
+ ...(bytes === undefined ? {} : { mb: round1(bytes / MB) }),
153
+ workingSetMb: round1(entry.workingSetKb / 1024),
154
+ };
155
+ }),
156
+ };
157
+ return { memory, ...(error === undefined ? {} : { error }) };
158
+ }
159
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The MCP face of the budget: `budget_start`, `budget_measure`, `budget_check`.
3
+ *
4
+ * Runtime metrics run fixed bodies in the app's main process, so they need the main eval grant;
5
+ * the IPC probe and startup timing also need the renderer. Bundle size needs neither, nor a session.
6
+ *
7
+ * @module
8
+ */
9
+ import { type StagewrightPlugin } from '@electron-stagewright/core';
10
+ export declare function createBudgetPlugin(): StagewrightPlugin;
11
+ /** Load with `--plugin budget` or `createServer({ plugins: [budgetPlugin] })`. */
12
+ export declare const budgetPlugin: StagewrightPlugin;
13
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAQL,KAAK,iBAAiB,EAIvB,MAAM,4BAA4B,CAAA;AA2EnC,wBAAgB,kBAAkB,IAAI,iBAAiB,CAubtD;AAED,kFAAkF;AAClF,eAAO,MAAM,YAAY,EAAE,iBAe1B,CAAA"}