memorydetective 1.13.0 → 1.15.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 (57) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +8 -2
  3. package/USAGE.md +29 -0
  4. package/dist/index.js +36 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/parsers/schemaDiscovery.d.ts +88 -0
  7. package/dist/parsers/schemaDiscovery.js +144 -0
  8. package/dist/parsers/schemaDiscovery.js.map +1 -0
  9. package/dist/parsers/xctraceXml.d.ts +5 -0
  10. package/dist/parsers/xctraceXml.js +3 -0
  11. package/dist/parsers/xctraceXml.js.map +1 -1
  12. package/dist/tools/analyzeAllocations.d.ts +5 -1
  13. package/dist/tools/analyzeAllocations.js +17 -1
  14. package/dist/tools/analyzeAllocations.js.map +1 -1
  15. package/dist/tools/analyzeAnimationHitches.d.ts +5 -1
  16. package/dist/tools/analyzeAnimationHitches.js +17 -1
  17. package/dist/tools/analyzeAnimationHitches.js.map +1 -1
  18. package/dist/tools/analyzeAppLaunch.d.ts +3 -0
  19. package/dist/tools/analyzeAppLaunch.js +17 -1
  20. package/dist/tools/analyzeAppLaunch.js.map +1 -1
  21. package/dist/tools/analyzeEnergyImpact.d.ts +69 -0
  22. package/dist/tools/analyzeEnergyImpact.js +239 -0
  23. package/dist/tools/analyzeEnergyImpact.js.map +1 -0
  24. package/dist/tools/analyzeHangs.d.ts +63 -3
  25. package/dist/tools/analyzeHangs.js +143 -19
  26. package/dist/tools/analyzeHangs.js.map +1 -1
  27. package/dist/tools/analyzeLeakTimeline.d.ts +75 -0
  28. package/dist/tools/analyzeLeakTimeline.js +213 -0
  29. package/dist/tools/analyzeLeakTimeline.js.map +1 -0
  30. package/dist/tools/analyzeMemoryFootprint.d.ts +72 -0
  31. package/dist/tools/analyzeMemoryFootprint.js +234 -0
  32. package/dist/tools/analyzeMemoryFootprint.js.map +1 -0
  33. package/dist/tools/analyzeNetworkActivity.d.ts +99 -0
  34. package/dist/tools/analyzeNetworkActivity.js +312 -0
  35. package/dist/tools/analyzeNetworkActivity.js.map +1 -0
  36. package/dist/tools/analyzeTimeProfile.d.ts +10 -1
  37. package/dist/tools/analyzeTimeProfile.js +63 -8
  38. package/dist/tools/analyzeTimeProfile.js.map +1 -1
  39. package/dist/tools/countAlive.d.ts +35 -1
  40. package/dist/tools/countAlive.js +124 -29
  41. package/dist/tools/countAlive.js.map +1 -1
  42. package/dist/tools/inspectTrace.js +124 -18
  43. package/dist/tools/inspectTrace.js.map +1 -1
  44. package/dist/tools/recordTimeProfile.d.ts +83 -0
  45. package/dist/tools/recordTimeProfile.js +135 -0
  46. package/dist/tools/recordTimeProfile.js.map +1 -1
  47. package/dist/tools/replayScenario.d.ts +20 -4
  48. package/dist/tools/replayScenario.js +66 -0
  49. package/dist/tools/replayScenario.js.map +1 -1
  50. package/dist/tools/summarizeTrace.d.ts +6 -3
  51. package/dist/tools/summarizeTrace.js +49 -2
  52. package/dist/tools/summarizeTrace.js.map +1 -1
  53. package/dist/tools/verifyFix.d.ts +27 -0
  54. package/dist/tools/verifyFix.js +78 -4
  55. package/dist/tools/verifyFix.js.map +1 -1
  56. package/dist/types.d.ts +28 -0
  57. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import type { DataStatus } from "../types.js";
2
+ import type { DataStatus, SupportStatus } from "../types.js";
3
3
  export declare const analyzeHangsSchema: z.ZodObject<{
4
4
  tracePath: z.ZodString;
5
5
  topN: z.ZodDefault<z.ZodNumber>;
@@ -92,6 +92,25 @@ export interface HangEntry {
92
92
  * undefined when no frame was provided for this hang at all. */
93
93
  mainThreadViolations?: MainThreadViolation[];
94
94
  }
95
+ /**
96
+ * Entry from the `hang-risks` schema. v1.14.
97
+ *
98
+ * Different shape from `HangEntry`: `hang-risks` reports point-in-time RISK
99
+ * annotations emitted by the iOS runtime (e.g. "Hang Risk", "Severe Hang
100
+ * Risk" narrative events) rather than measured durations. No `durationNs`
101
+ * field exists because risks have no duration. The Severity column buckets
102
+ * the annotation; `backtrace` is a stringified stack at the moment the
103
+ * risk was annotated.
104
+ */
105
+ export interface HangRiskEntry {
106
+ timestampNs: number;
107
+ timestampFmt: string;
108
+ severity: string;
109
+ eventType: string;
110
+ message: string;
111
+ threadName?: string;
112
+ backtrace?: string;
113
+ }
95
114
  export interface AnalyzeHangsResult {
96
115
  ok: boolean;
97
116
  tracePath: string;
@@ -105,18 +124,59 @@ export interface AnalyzeHangsResult {
105
124
  };
106
125
  /** Filtered + sorted hangs, capped to topN. */
107
126
  top: HangEntry[];
127
+ /**
128
+ * v1.14: hang-risks schema events. Apple-runtime risk annotations
129
+ * complementary to the measured potential-hangs above. Absent when
130
+ * the schema was not present in the trace OR when xctrace failed to
131
+ * export it; present (possibly empty array) when the schema was
132
+ * exported successfully.
133
+ */
134
+ risks?: HangRiskEntry[];
135
+ /** v1.14: hang-risks aggregates. Mirrors `totals` for `top[]`. Absent when the schema was not exported. */
136
+ risksTotals?: {
137
+ rows: number;
138
+ bySeverity: Record<string, number>;
139
+ };
108
140
  diagnosis: string;
109
141
  /**
110
142
  * Disambiguates empty arrays into "no data in the trace" vs "trace could
111
143
  * not be exported" vs "data was exported partially". See {@link DataStatus}.
144
+ *
145
+ * @deprecated v1.14 item I. Use `supportStatus[]` instead. Kept for
146
+ * backwards compatibility with v1.13 callers.
112
147
  */
113
148
  status: DataStatus;
149
+ /**
150
+ * v1.14+. Unified per-area status surface. For analyzeHangs this
151
+ * contains one entry for the `potential-hangs` schema and a second
152
+ * for `hang-risks` when that schema was discovered. See {@link
153
+ * SupportStatus}.
154
+ */
155
+ supportStatus: SupportStatus[];
114
156
  }
115
- /** Pure: turn parsed XML rows into our analyzed result. */
157
+ /** Pure: turn parsed XML rows into our analyzed result. The optional
158
+ * `hangRisksXml` (v1.14) is parsed via {@link analyzeHangRisksFromXml}
159
+ * and surfaced on `result.risks[]` + `result.risksTotals`. */
116
160
  export declare function analyzeHangsFromXml(xml: string, tracePath: string, topN?: number, minDurationMs?: number, timeRangeMs?: {
117
161
  startMs: number;
118
162
  endMs: number;
119
- }, topFramesByHangStartNs?: Readonly<Record<string, string>>): AnalyzeHangsResult;
163
+ }, topFramesByHangStartNs?: Readonly<Record<string, string>>, hangRisksXml?: string): AnalyzeHangsResult;
164
+ /**
165
+ * Pure: parse `hang-risks` schema XML into structured risk entries.
166
+ *
167
+ * v1.14. The hang-risks schema is complementary to potential-hangs: it
168
+ * carries runtime-emitted "Hang Risk" / "Severe Hang Risk" annotations
169
+ * with a backtrace at the moment of risk detection but NO measured
170
+ * duration. Output is sorted by timestamp ascending so callers can see
171
+ * the chronological order of risks during the recording.
172
+ *
173
+ * Returns `{ rows: [], bySeverity: {} }` when the schema is absent.
174
+ */
175
+ export declare function analyzeHangRisksFromXml(xml: string, topN?: number): {
176
+ rows: HangRiskEntry[];
177
+ total: number;
178
+ bySeverity: Record<string, number>;
179
+ };
120
180
  /**
121
181
  * Pure: walk parsed time-profile rows + hang entries, correlate samples
122
182
  * to hang windows by timestamp, return a `startNs -> topFrame` map.
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { existsSync } from "node:fs";
3
3
  import { resolve as resolvePath } from "node:path";
4
4
  import { runCommand } from "../runtime/exec.js";
5
+ import { fetchDiscoveredSchemas } from "../parsers/schemaDiscovery.js";
5
6
  import { parseXctraceXml, asNumber, asFormatted, } from "../parsers/xctraceXml.js";
6
7
  import { outputFormatField } from "../runtime/responseFormatter.js";
7
8
  export const analyzeHangsSchema = z.object({
@@ -112,8 +113,10 @@ export function classifyHangFrame(topFrame, samples = 1) {
112
113
  export function hangFrameMapKey(startNs) {
113
114
  return String(startNs);
114
115
  }
115
- /** Pure: turn parsed XML rows into our analyzed result. */
116
- export function analyzeHangsFromXml(xml, tracePath, topN = 10, minDurationMs = 0, timeRangeMs, topFramesByHangStartNs) {
116
+ /** Pure: turn parsed XML rows into our analyzed result. The optional
117
+ * `hangRisksXml` (v1.14) is parsed via {@link analyzeHangRisksFromXml}
118
+ * and surfaced on `result.risks[]` + `result.risksTotals`. */
119
+ export function analyzeHangsFromXml(xml, tracePath, topN = 10, minDurationMs = 0, timeRangeMs, topFramesByHangStartNs, hangRisksXml) {
117
120
  const tables = parseXctraceXml(xml);
118
121
  const hangsTable = tables.find((t) => t.schema === "potential-hangs");
119
122
  if (!hangsTable) {
@@ -131,6 +134,13 @@ export function analyzeHangsFromXml(xml, tracePath, topN = 10, minDurationMs = 0
131
134
  top: [],
132
135
  diagnosis: "No potential-hangs table found in the trace.",
133
136
  status: "not_present",
137
+ supportStatus: [
138
+ {
139
+ kind: "potential-hangs",
140
+ status: "not_present",
141
+ reason: "Schema absent from the trace TOC.",
142
+ },
143
+ ],
134
144
  };
135
145
  }
136
146
  const allEntries = [];
@@ -178,7 +188,15 @@ export function analyzeHangsFromXml(xml, tracePath, topN = 10, minDurationMs = 0
178
188
  entry.mainThreadViolations = violation ? [violation] : [];
179
189
  }
180
190
  }
181
- const diagnosis = buildHangDiagnosis(filtered.length, hangs.length, microhangs.length, longestMs, averageMs);
191
+ const risksAnalysis = hangRisksXml
192
+ ? analyzeHangRisksFromXml(hangRisksXml, topN)
193
+ : null;
194
+ const severeRisksCount = risksAnalysis
195
+ ? Object.entries(risksAnalysis.bySeverity)
196
+ .filter(([sev]) => /severe/i.test(sev))
197
+ .reduce((sum, [, n]) => sum + n, 0)
198
+ : undefined;
199
+ const diagnosis = buildHangDiagnosis(filtered.length, hangs.length, microhangs.length, longestMs, averageMs, risksAnalysis?.total, severeRisksCount);
182
200
  return {
183
201
  ok: true,
184
202
  tracePath,
@@ -191,25 +209,106 @@ export function analyzeHangsFromXml(xml, tracePath, topN = 10, minDurationMs = 0
191
209
  totalDurationMs,
192
210
  },
193
211
  top,
212
+ ...(risksAnalysis
213
+ ? {
214
+ risks: risksAnalysis.rows,
215
+ risksTotals: {
216
+ rows: risksAnalysis.total,
217
+ bySeverity: risksAnalysis.bySeverity,
218
+ },
219
+ }
220
+ : {}),
194
221
  diagnosis,
195
222
  status: "available",
223
+ supportStatus: [
224
+ {
225
+ kind: "potential-hangs",
226
+ status: "available",
227
+ sourceSchemas: ["potential-hangs"],
228
+ },
229
+ ...(risksAnalysis
230
+ ? [
231
+ {
232
+ kind: "hang-risks",
233
+ status: risksAnalysis.total > 0 ? "available" : "not_present",
234
+ sourceSchemas: ["hang-risks"],
235
+ ...(risksAnalysis.total === 0
236
+ ? { reason: "Schema exported but no rows present." }
237
+ : {}),
238
+ },
239
+ ]
240
+ : []),
241
+ ],
196
242
  };
197
243
  }
198
- function buildHangDiagnosis(rows, hangs, microhangs, longestMs, averageMs) {
244
+ function buildHangDiagnosis(rows, hangs, microhangs, longestMs, averageMs, risksCount, severeRisksCount) {
245
+ const parts = [];
199
246
  if (rows === 0) {
200
- return "No hangs detected (or all were filtered out by minDurationMs).";
247
+ parts.push("No hangs detected (or all were filtered out by minDurationMs).");
201
248
  }
202
- const parts = [];
203
- parts.push(`${rows} hangs total (${hangs} Hang, ${microhangs} Microhang).`);
204
- parts.push(`Longest: ${longestMs.toFixed(0)}ms, average: ${averageMs.toFixed(0)}ms.`);
205
- if (hangs >= 10) {
206
- parts.push("Severe hang load investigate main-thread work on the slow path.");
249
+ else {
250
+ parts.push(`${rows} hangs total (${hangs} Hang, ${microhangs} Microhang).`);
251
+ parts.push(`Longest: ${longestMs.toFixed(0)}ms, average: ${averageMs.toFixed(0)}ms.`);
252
+ if (hangs >= 10) {
253
+ parts.push("Severe hang load: investigate main-thread work on the slow path.");
254
+ }
255
+ else if (hangs > 0 && longestMs > 1000) {
256
+ parts.push("At least one hang over 1s. Likely user-visible freeze.");
257
+ }
207
258
  }
208
- else if (hangs > 0 && longestMs > 1000) {
209
- parts.push("At least one hang over 1s likely user-visible freeze.");
259
+ if (risksCount != null && risksCount > 0) {
260
+ const severeNote = severeRisksCount != null && severeRisksCount > 0
261
+ ? `, ${severeRisksCount} severe`
262
+ : "";
263
+ parts.push(`${risksCount} hang risk annotations${severeNote} from the iOS runtime.`);
210
264
  }
211
265
  return parts.join(" ");
212
266
  }
267
+ /**
268
+ * Pure: parse `hang-risks` schema XML into structured risk entries.
269
+ *
270
+ * v1.14. The hang-risks schema is complementary to potential-hangs: it
271
+ * carries runtime-emitted "Hang Risk" / "Severe Hang Risk" annotations
272
+ * with a backtrace at the moment of risk detection but NO measured
273
+ * duration. Output is sorted by timestamp ascending so callers can see
274
+ * the chronological order of risks during the recording.
275
+ *
276
+ * Returns `{ rows: [], bySeverity: {} }` when the schema is absent.
277
+ */
278
+ export function analyzeHangRisksFromXml(xml, topN = 10) {
279
+ const tables = parseXctraceXml(xml);
280
+ const table = tables.find((t) => t.schema === "hang-risks");
281
+ if (!table)
282
+ return { rows: [], total: 0, bySeverity: {} };
283
+ const entries = [];
284
+ const bySeverity = {};
285
+ for (const row of table.rows) {
286
+ const timestampNs = asNumber(row.time) ?? 0;
287
+ const severity = asFormatted(row.severity) ?? "";
288
+ const eventType = asFormatted(row["event-type"]) ?? "";
289
+ const message = asFormatted(row.message) ?? "";
290
+ const threadName = asFormatted(row.thread) ?? undefined;
291
+ const backtrace = asFormatted(row.backtrace) ?? undefined;
292
+ entries.push({
293
+ timestampNs,
294
+ timestampFmt: asFormatted(row.time) ?? "",
295
+ severity,
296
+ eventType,
297
+ message,
298
+ ...(threadName ? { threadName } : {}),
299
+ ...(backtrace ? { backtrace } : {}),
300
+ });
301
+ if (severity) {
302
+ bySeverity[severity] = (bySeverity[severity] ?? 0) + 1;
303
+ }
304
+ }
305
+ entries.sort((a, b) => a.timestampNs - b.timestampNs);
306
+ return {
307
+ rows: entries.slice(0, topN),
308
+ total: entries.length,
309
+ bySeverity,
310
+ };
311
+ }
213
312
  /**
214
313
  * Pure: walk parsed time-profile rows + hang entries, correlate samples
215
314
  * to hang windows by timestamp, return a `startNs -> topFrame` map.
@@ -267,20 +366,20 @@ export function correlateTimeProfileToHangs(hangs, timeProfileRows) {
267
366
  * failure: returns an empty array so the caller can degrade gracefully.
268
367
  * Returns parsed rows with at minimum `startNs` + a `topFrame` string.
269
368
  */
270
- async function captureTimeProfileRows(tracePath) {
369
+ async function captureTimeProfileRows(tracePath, schemaName) {
271
370
  const result = await runCommand("xcrun", [
272
371
  "xctrace",
273
372
  "export",
274
373
  "--input",
275
374
  tracePath,
276
375
  "--xpath",
277
- '/trace-toc/run/data/table[@schema="time-profile"]',
376
+ `/trace-toc/run/data/table[@schema="${schemaName}"]`,
278
377
  ], { timeoutMs: 5 * 60_000 });
279
378
  if (result.code !== 0)
280
379
  return [];
281
380
  try {
282
381
  const tables = parseXctraceXml(result.stdout);
283
- const tp = tables.find((t) => t.schema === "time-profile");
382
+ const tp = tables.find((t) => t.schema === schemaName);
284
383
  if (!tp)
285
384
  return [];
286
385
  const rows = [];
@@ -312,22 +411,47 @@ export async function analyzeHangs(input) {
312
411
  throw new Error(`Trace bundle not found: ${tracePath}`);
313
412
  }
314
413
  const wantStackClassification = input.includeStackClassification ?? false;
315
- const [hangsResult, timeProfileRows] = await Promise.all([
414
+ // v1.14 item B. Resolve the three schema names from the trace's TOC
415
+ // in one pass so a renamed schema does not break the analyzer. Falls
416
+ // back to canonical pre-v1.14 names when the TOC fetch or pattern
417
+ // match fails. Cost: one extra xctrace --toc invocation (~100-500ms
418
+ // on real traces). Cached per analyze call.
419
+ const discovered = await fetchDiscoveredSchemas(runCommand, tracePath, [
420
+ "hangs",
421
+ "hang-risks",
422
+ "time-profile",
423
+ ]);
424
+ const [hangsResult, hangRisksResult, timeProfileRows] = await Promise.all([
425
+ runCommand("xcrun", [
426
+ "xctrace",
427
+ "export",
428
+ "--input",
429
+ tracePath,
430
+ "--xpath",
431
+ `/trace-toc/run/data/table[@schema="${discovered.hangs}"]`,
432
+ ], { timeoutMs: 5 * 60_000 }),
433
+ // v1.14: fetch the complementary hang-risks schema in parallel. The
434
+ // schema is optional (some templates omit it). Failure here is non-
435
+ // fatal: the result is rolled into `risks?` only when xctrace returned
436
+ // a parseable export.
316
437
  runCommand("xcrun", [
317
438
  "xctrace",
318
439
  "export",
319
440
  "--input",
320
441
  tracePath,
321
442
  "--xpath",
322
- '/trace-toc/run/data/table[@schema="potential-hangs"]',
443
+ `/trace-toc/run/data/table[@schema="${discovered["hang-risks"]}"]`,
323
444
  ], { timeoutMs: 5 * 60_000 }),
324
445
  wantStackClassification
325
- ? captureTimeProfileRows(tracePath)
446
+ ? captureTimeProfileRows(tracePath, discovered["time-profile"])
326
447
  : Promise.resolve([]),
327
448
  ]);
328
449
  if (hangsResult.code !== 0) {
329
450
  throw new Error(`xctrace export failed (code ${hangsResult.code}): ${hangsResult.stderr || hangsResult.stdout}`);
330
451
  }
452
+ // hang-risks: only surface when the export succeeded. Anything else
453
+ // (xctrace error, parse failure, empty schema) -> drop without error.
454
+ const hangRisksXml = hangRisksResult.code === 0 && hangRisksResult.stdout ? hangRisksResult.stdout : undefined;
331
455
  // Build the supplemental top-frames map. Caller-supplied map takes
332
456
  // precedence over the v1.12 auto-correlation so users who pre-built a
333
457
  // map can override the heuristic. The auto path runs only when the
@@ -349,6 +473,6 @@ export async function analyzeHangs(input) {
349
473
  topFramesMap = correlateTimeProfileToHangs(hangsForCorrelation, timeProfileRows);
350
474
  }
351
475
  }
352
- return analyzeHangsFromXml(hangsResult.stdout, tracePath, input.topN ?? 10, input.minDurationMs ?? 0, input.timeRangeMs, topFramesMap);
476
+ return analyzeHangsFromXml(hangsResult.stdout, tracePath, input.topN ?? 10, input.minDurationMs ?? 0, input.timeRangeMs, topFramesMap, hangRisksXml);
353
477
  }
354
478
  //# sourceMappingURL=analyzeHangs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzeHangs.js","sourceRoot":"","sources":["../../src/tools/analyzeHangs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzeHangs.js","sourceRoot":"","sources":["../../src/tools/analyzeHangs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * `analyzeLeakTimeline`: parses xctrace's leaks schema (the time-series
3
+ * instrument), distinct from `leaks(1)` CLI which is a snapshot. v1.15
4
+ * item E.
5
+ *
6
+ * The xctrace `leaks` instrument samples the heap periodically during
7
+ * recording and emits one row per leak event. Unlike leaks(1) (which
8
+ * gives you "what is leaked NOW") this gives you "when did the leak
9
+ * first appear, how did it grow, when did it peak?" Useful for fixing
10
+ * leaks that only fire under certain user flows.
11
+ *
12
+ * Output:
13
+ * - per-class first-seen-at timestamp
14
+ * - growth rate (instances over time)
15
+ * - peak instance count
16
+ * - aggregate event count
17
+ */
18
+ import { z } from "zod";
19
+ import type { DataStatus, SupportStatus } from "../types.js";
20
+ export declare const analyzeLeakTimelineSchema: z.ZodObject<{
21
+ tracePath: z.ZodString;
22
+ topN: z.ZodDefault<z.ZodNumber>;
23
+ outputFormat: z.ZodOptional<z.ZodEnum<["markdown", "json", "both", "verify-fix-table"]>>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ tracePath: string;
26
+ topN: number;
27
+ outputFormat?: "markdown" | "json" | "both" | "verify-fix-table" | undefined;
28
+ }, {
29
+ tracePath: string;
30
+ outputFormat?: "markdown" | "json" | "both" | "verify-fix-table" | undefined;
31
+ topN?: number | undefined;
32
+ }>;
33
+ export type AnalyzeLeakTimelineInput = z.infer<typeof analyzeLeakTimelineSchema>;
34
+ export interface LeakEvent {
35
+ startNs: number;
36
+ startFmt?: string;
37
+ className: string;
38
+ /** Cumulative count of this class at this point in the recording. */
39
+ cumulativeCount?: number;
40
+ /** Bytes leaked at this point when xctrace exposes a size column. */
41
+ totalBytes?: number;
42
+ }
43
+ export interface LeakClassSummary {
44
+ className: string;
45
+ /** Timestamp the class first appeared as a leak. */
46
+ firstSeenAtNs: number;
47
+ firstSeenAtFmt?: string;
48
+ /** Highest cumulativeCount observed across all events. */
49
+ peakCount: number;
50
+ /** Highest totalBytes observed across all events. */
51
+ peakBytes: number;
52
+ /** Total events emitted for this class. */
53
+ eventCount: number;
54
+ }
55
+ export interface AnalyzeLeakTimelineResult {
56
+ ok: boolean;
57
+ tracePath: string;
58
+ totals: {
59
+ rows: number;
60
+ /** Distinct class count across the timeline. */
61
+ classes: number;
62
+ /** Latest timestamp seen, useful as a "leaks were still growing" check. */
63
+ lastEventNs?: number;
64
+ };
65
+ /** Top N classes ranked by peakCount desc. */
66
+ topClasses: LeakClassSummary[];
67
+ diagnosis: string;
68
+ /** @deprecated v1.14 item I. Use `supportStatus[]`. */
69
+ status: DataStatus;
70
+ /** v1.14+. Unified per-area status. */
71
+ supportStatus: SupportStatus[];
72
+ }
73
+ /** Pure: turn the leaks XML into the timeline analysis. */
74
+ export declare function analyzeLeakTimelineFromXml(xml: string, tracePath: string, topN?: number): AnalyzeLeakTimelineResult;
75
+ export declare function analyzeLeakTimeline(input: AnalyzeLeakTimelineInput): Promise<AnalyzeLeakTimelineResult>;