memorydetective 1.11.0 → 1.12.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 +21 -1
- package/README.md +4 -4
- package/dist/parsers/leaksDebugStacks.d.ts +67 -0
- package/dist/parsers/leaksDebugStacks.js +187 -0
- package/dist/parsers/leaksDebugStacks.js.map +1 -0
- package/dist/parsers/referenceTree.js +5 -0
- package/dist/parsers/referenceTree.js.map +1 -1
- package/dist/tools/analyzeHangs.d.ts +28 -0
- package/dist/tools/analyzeHangs.js +136 -9
- package/dist/tools/analyzeHangs.js.map +1 -1
- package/dist/tools/compareTracesByPattern.js +2 -0
- package/dist/tools/compareTracesByPattern.js.map +1 -1
- package/dist/tools/countAlive.d.ts +20 -4
- package/dist/tools/countAlive.js +91 -12
- package/dist/tools/countAlive.js.map +1 -1
- package/dist/tools/findRetainers.d.ts +15 -1
- package/dist/tools/findRetainers.js +51 -5
- package/dist/tools/findRetainers.js.map +1 -1
- package/dist/tools/verifyFix.d.ts +23 -0
- package/dist/tools/verifyFix.js +121 -1
- package/dist/tools/verifyFix.js.map +1 -1
- package/package.json +1 -1
|
@@ -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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"}
|
|
@@ -204,11 +204,13 @@ export async function compareTracesByPattern(input) {
|
|
|
204
204
|
tracePath: beforePath,
|
|
205
205
|
topN: 10,
|
|
206
206
|
minDurationMs: input.hangsMinDurationMs ?? 250,
|
|
207
|
+
includeStackClassification: false,
|
|
207
208
|
}),
|
|
208
209
|
analyzeHangs({
|
|
209
210
|
tracePath: afterPath,
|
|
210
211
|
topN: 10,
|
|
211
212
|
minDurationMs: input.hangsMinDurationMs ?? 250,
|
|
213
|
+
includeStackClassification: false,
|
|
212
214
|
}),
|
|
213
215
|
]);
|
|
214
216
|
const cmp = compareHangs(b, a, threshold);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compareTracesByPattern.js","sourceRoot":"","sources":["../../src/tools/compareTracesByPattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,YAAY,GAEb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,GAExB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAG/B;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,mDAAmD,CAAC;IAChE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,yCAAyC,CAAC;IACtD,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;SAClD,QAAQ,CACP,uKAAuK,CACxK;IACH,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,WAAW,EAAE;aACb,QAAQ,EAAE;aACV,QAAQ,CACP,mHAAmH,CACpH;QACH,mBAAmB,EAAE,CAAC;aACnB,MAAM,EAAE;aACR,WAAW,EAAE;aACb,QAAQ,EAAE;aACV,QAAQ,CACP,gIAAgI,CACjI;QACH,mBAAmB,EAAE,CAAC;aACnB,MAAM,EAAE;aACR,WAAW,EAAE;aACb,QAAQ,EAAE;aACV,QAAQ,CACP,uHAAuH,CACxH;KACJ,CAAC;SACD,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;IACd,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,WAAW,EAAE;SACb,OAAO,CAAC,GAAG,CAAC;SACZ,QAAQ,CACP,0HAA0H,CAC3H;IACH,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,WAAW,EAAE;SACb,OAAO,CAAC,GAAG,CAAC;SACZ,QAAQ,CACP,8HAA8H,CAC/H;CACJ,CAAC,CAAC;AAqCH,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAC1B,MAA0B,EAC1B,KAAyB,EACzB,kBAA0B;IAO1B,MAAM,WAAW,GAAuB;QACtC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;QAClC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;QAClC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe;KACvC,CAAC;IACF,MAAM,UAAU,GAAuB;QACrC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;QACzB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;QACjC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;QACjC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe;KACtC,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;QAC3C,SAAS,EAAE,UAAU,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;QACvD,SAAS,EAAE,UAAU,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;QACvD,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO;KAClD,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC;QAC5B,WAAW,EAAE,WAAW,CAAC,KAAK;QAC9B,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,cAAc,EAAE,UAAU,CAAC,SAAS;QACpC,kBAAkB;KACnB,CAAC,CAAC;IACH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,uBAAuB,CACrC,MAAqC,EACrC,KAAoC,EACpC,kBAA0B;IAO1B,4EAA4E;IAC5E,uEAAuE;IACvE,4CAA4C;IAC5C,MAAM,WAAW,GAAuB;QACtC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;QAChC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;QAClC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;QAClC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe;KACvC,CAAC;IACF,MAAM,UAAU,GAAuB;QACrC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;QACjC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;QACjC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe;KACtC,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;QAC3C,SAAS,EAAE,UAAU,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;QACvD,SAAS,EAAE,UAAU,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;QACvD,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO;KAClD,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC;QAC5B,WAAW,EAAE,WAAW,CAAC,KAAK;QAC9B,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,cAAc,EAAE,UAAU,CAAC,SAAS;QACpC,kBAAkB;KACnB,CAAC,CAAC;IACH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED;mEACmE;AACnE,MAAM,UAAU,gBAAgB,CAC9B,MAA8B,EAC9B,KAA6B,EAC7B,gBAAwB;IAOxB,MAAM,WAAW,GAAuB;QACtC,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,MAAM,CAAC,aAAa;QAC/B,SAAS,EAAE,MAAM,CAAC,aAAa;QAC/B,OAAO,EAAE,MAAM,CAAC,aAAa;KAC9B,CAAC;IACF,MAAM,UAAU,GAAuB;QACrC,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,KAAK,CAAC,aAAa;QAC9B,SAAS,EAAE,KAAK,CAAC,aAAa;QAC9B,OAAO,EAAE,KAAK,CAAC,aAAa;KAC7B,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,UAAU,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;QACvD,SAAS,EAAE,UAAU,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;QACvD,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO;KAClD,CAAC;IACF,uEAAuE;IACvE,oDAAoD;IACpD,IAAI,OAAgB,CAAC;IACrB,IAAI,UAAU,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAC3C,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,IAAI,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;QACpD,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,gDAAgD;AAChD,SAAS,aAAa,CAAC,EACrB,WAAW,EACX,UAAU,EACV,cAAc,EACd,kBAAkB,GAMnB;IACC,0CAA0C;IAC1C,IAAI,UAAU,KAAK,CAAC,IAAI,cAAc,IAAI,kBAAkB,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,kDAAkD;IAClD,IAAI,UAAU,GAAG,WAAW,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,uBAAuB;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CACrB,QAAiD,EACjD,WAA+B,EAC/B,UAA8B,EAC9B,OAAgB,EAChB,cAAsB,EACtB,cAAsB;IAEtB,MAAM,IAAI,GACR,QAAQ,KAAK,OAAO;QAClB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,aAAa,CAAC;IACtB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO,uBAAuB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,cAAc,kBAAkB,CAAC;QAC1J,CAAC;QACD,IAAI,UAAU,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,OAAO,IAAI,kBAAkB,WAAW,CAAC,KAAK,iBAAiB,CAAC;QACzE,CAAC;QACD,OAAO,GAAG,IAAI,eAAe,UAAU,CAAC,KAAK,SAAS,WAAW,CAAC,KAAK,cAAc,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,cAAc,qBAAqB,CAAC;IAC7K,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,KAAK,WAAW,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,WAAW,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,2CAA2C,cAAc,wBAAwB,CAAC;IAC5N,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,WAAW,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,WAAW,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,uFAAuF,CAAC;AAClO,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAkC;IAElC,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/B,YAAY,CAAC;gBACX,SAAS,EAAE,UAAU;gBACrB,IAAI,EAAE,EAAE;gBACR,aAAa,EAAE,KAAK,CAAC,kBAAkB,IAAI,GAAG;
|
|
1
|
+
{"version":3,"file":"compareTracesByPattern.js","sourceRoot":"","sources":["../../src/tools/compareTracesByPattern.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,26 +4,42 @@ export declare const countAliveSchema: z.ZodObject<{
|
|
|
4
4
|
path: z.ZodString;
|
|
5
5
|
className: z.ZodOptional<z.ZodString>;
|
|
6
6
|
topN: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
includeReferenceTree: z.ZodDefault<z.ZodBoolean>;
|
|
7
8
|
}, "strip", z.ZodTypeAny, {
|
|
8
9
|
path: string;
|
|
9
10
|
topN: number;
|
|
11
|
+
includeReferenceTree: boolean;
|
|
10
12
|
className?: string | undefined;
|
|
11
13
|
}, {
|
|
12
14
|
path: string;
|
|
13
15
|
className?: string | undefined;
|
|
14
16
|
topN?: number | undefined;
|
|
17
|
+
includeReferenceTree?: boolean | undefined;
|
|
15
18
|
}>;
|
|
16
19
|
export type CountAliveInput = z.infer<typeof countAliveSchema>;
|
|
20
|
+
export interface CountAliveEntry {
|
|
21
|
+
className: string;
|
|
22
|
+
instanceCount: number;
|
|
23
|
+
/** When `includeReferenceTree: true`, the cycle-side contribution (often 0 for abandoned-memory shapes). */
|
|
24
|
+
byCycle?: number;
|
|
25
|
+
/** When `includeReferenceTree: true`, the reference-tree contribution. Often the only non-zero side on `leakCount: 0` memgraphs. */
|
|
26
|
+
byReferenceTree?: number;
|
|
27
|
+
}
|
|
17
28
|
export interface CountAliveResult {
|
|
18
29
|
ok: boolean;
|
|
19
30
|
path: string;
|
|
20
31
|
/** Total nodes counted in the cycle forest (across all classes). */
|
|
21
32
|
totalNodes: number;
|
|
22
33
|
/** Per-class counts. When `className` is given, contains a single entry. */
|
|
23
|
-
counts:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
counts: CountAliveEntry[];
|
|
35
|
+
/**
|
|
36
|
+
* v1.12+. Present when `includeReferenceTree: true` and at least one
|
|
37
|
+
* reference-tree row survived the framework-noise filter. Mirrors the
|
|
38
|
+
* top-N list but with the noise classes (NSMutableDictionary, CFString,
|
|
39
|
+
* `__DATA __bss`, allocator stacks, etc.) filtered out so the actionable
|
|
40
|
+
* classes surface at the top.
|
|
41
|
+
*/
|
|
42
|
+
actionableCounts?: CountAliveEntry[];
|
|
27
43
|
}
|
|
28
44
|
/** Pure: count node occurrences by exact className across the cycle forest. */
|
|
29
45
|
export declare function countByClass(report: LeaksReport): Map<string, number>;
|
package/dist/tools/countAlive.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { runCommand } from "../runtime/exec.js";
|
|
2
3
|
import { runLeaksAndParse } from "../runtime/leaks.js";
|
|
3
4
|
import { walkCycles } from "../parsers/leaksOutput.js";
|
|
5
|
+
import { parseReferenceTreeText, isFrameworkNoise, } from "../parsers/referenceTree.js";
|
|
4
6
|
export const countAliveSchema = z.object({
|
|
5
7
|
path: z.string().min(1).describe("Absolute path to a `.memgraph` file."),
|
|
6
8
|
className: z
|
|
@@ -13,6 +15,10 @@ export const countAliveSchema = z.object({
|
|
|
13
15
|
.positive()
|
|
14
16
|
.default(20)
|
|
15
17
|
.describe("When `className` is omitted, return the top N most-leaked classes (default 20)."),
|
|
18
|
+
includeReferenceTree: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.default(false)
|
|
21
|
+
.describe("v1.12+. When true, also parse `leaks --referenceTree --groupByType --noContent` output and surface heap-wide instance counts alongside the cycle-side counts. Required to find classes on memgraphs where `leakCount: 0` and the abandoned-memory shape is what's interesting (e.g. orphaned KVO observers reachable from the global registry). Adds a second `leaks` invocation, run in parallel. Default false preserves v1.11 behavior."),
|
|
16
22
|
});
|
|
17
23
|
/** Pure: count node occurrences by exact className across the cycle forest. */
|
|
18
24
|
export function countByClass(report) {
|
|
@@ -24,27 +30,100 @@ export function countByClass(report) {
|
|
|
24
30
|
}
|
|
25
31
|
return counts;
|
|
26
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Spawn `leaks --referenceTree --groupByType --noContent` and parse the
|
|
35
|
+
* stdout. Non-fatal on failure: returns empty array so the cycle-side
|
|
36
|
+
* path still completes. Mirrors the pattern v1.11 introduced in
|
|
37
|
+
* `diffMemgraphs.captureReferenceTree`.
|
|
38
|
+
*/
|
|
39
|
+
async function captureReferenceTreeCounts(path) {
|
|
40
|
+
const result = await runCommand("leaks", ["--referenceTree", "--groupByType", "--noContent", path], { timeoutMs: 5 * 60_000 });
|
|
41
|
+
if (result.code !== 0 && result.code !== 1)
|
|
42
|
+
return new Map();
|
|
43
|
+
const entries = parseReferenceTreeText(result.stdout, 5000);
|
|
44
|
+
return new Map(entries.map((e) => [e.className, e.instanceCount]));
|
|
45
|
+
}
|
|
27
46
|
export async function countAlive(input) {
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
47
|
+
const wantReferenceTree = input.includeReferenceTree ?? false;
|
|
48
|
+
const [{ report, resolvedPath }, refTreeCounts] = await Promise.all([
|
|
49
|
+
runLeaksAndParse(input.path),
|
|
50
|
+
wantReferenceTree
|
|
51
|
+
? captureReferenceTreeCounts(input.path)
|
|
52
|
+
: Promise.resolve(new Map()),
|
|
53
|
+
]);
|
|
54
|
+
const cycleCounts = countByClass(report);
|
|
55
|
+
const totalNodes = Array.from(cycleCounts.values()).reduce((a, b) => a + b, 0);
|
|
31
56
|
if (input.className) {
|
|
32
|
-
let
|
|
33
|
-
for (const [name, n] of
|
|
57
|
+
let cycleMatched = 0;
|
|
58
|
+
for (const [name, n] of cycleCounts.entries()) {
|
|
59
|
+
if (name.includes(input.className))
|
|
60
|
+
cycleMatched += n;
|
|
61
|
+
}
|
|
62
|
+
let refTreeMatched = 0;
|
|
63
|
+
for (const [name, n] of refTreeCounts.entries()) {
|
|
34
64
|
if (name.includes(input.className))
|
|
35
|
-
|
|
65
|
+
refTreeMatched += n;
|
|
36
66
|
}
|
|
67
|
+
const entry = wantReferenceTree
|
|
68
|
+
? {
|
|
69
|
+
className: input.className,
|
|
70
|
+
instanceCount: cycleMatched + refTreeMatched,
|
|
71
|
+
byCycle: cycleMatched,
|
|
72
|
+
byReferenceTree: refTreeMatched,
|
|
73
|
+
}
|
|
74
|
+
: { className: input.className, instanceCount: cycleMatched };
|
|
37
75
|
return {
|
|
38
76
|
ok: true,
|
|
39
77
|
path: resolvedPath,
|
|
40
78
|
totalNodes,
|
|
41
|
-
counts: [
|
|
79
|
+
counts: [entry],
|
|
42
80
|
};
|
|
43
81
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
82
|
+
// topN path. Merge cycle + reference-tree counts when the flag is on,
|
|
83
|
+
// ordered by instanceCount desc.
|
|
84
|
+
const merged = new Map();
|
|
85
|
+
for (const [name, n] of cycleCounts.entries()) {
|
|
86
|
+
merged.set(name, { byCycle: n, byReferenceTree: 0 });
|
|
87
|
+
}
|
|
88
|
+
if (wantReferenceTree) {
|
|
89
|
+
for (const [name, n] of refTreeCounts.entries()) {
|
|
90
|
+
const existing = merged.get(name);
|
|
91
|
+
if (existing)
|
|
92
|
+
existing.byReferenceTree = n;
|
|
93
|
+
else
|
|
94
|
+
merged.set(name, { byCycle: 0, byReferenceTree: n });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const topN = input.topN ?? 20;
|
|
98
|
+
const allEntries = Array.from(merged.entries())
|
|
99
|
+
.map(([name, v]) => wantReferenceTree
|
|
100
|
+
? {
|
|
101
|
+
className: name,
|
|
102
|
+
instanceCount: v.byCycle + v.byReferenceTree,
|
|
103
|
+
byCycle: v.byCycle,
|
|
104
|
+
byReferenceTree: v.byReferenceTree,
|
|
105
|
+
}
|
|
106
|
+
: { className: name, instanceCount: v.byCycle })
|
|
107
|
+
.sort((a, b) => b.instanceCount - a.instanceCount);
|
|
108
|
+
const top = allEntries.slice(0, topN);
|
|
109
|
+
const result = {
|
|
110
|
+
ok: true,
|
|
111
|
+
path: resolvedPath,
|
|
112
|
+
totalNodes,
|
|
113
|
+
counts: top,
|
|
114
|
+
};
|
|
115
|
+
// Actionable view: only meaningful when the reference-tree pass ran and
|
|
116
|
+
// returned data. Same ranking, just framework-noise filtered. Surfaces
|
|
117
|
+
// AV / KVO / app-level classes that would otherwise rank below
|
|
118
|
+
// NSMutableDictionary, CFString, etc.
|
|
119
|
+
if (wantReferenceTree && refTreeCounts.size > 0) {
|
|
120
|
+
const actionable = allEntries
|
|
121
|
+
.filter((e) => !isFrameworkNoise(e.className))
|
|
122
|
+
.slice(0, topN);
|
|
123
|
+
if (actionable.length > 0) {
|
|
124
|
+
result.actionableCounts = actionable;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
49
128
|
}
|
|
50
129
|
//# sourceMappingURL=countAlive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"countAlive.js","sourceRoot":"","sources":["../../src/tools/countAlive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"countAlive.js","sourceRoot":"","sources":["../../src/tools/countAlive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { type ReferenceTreeChain } from "../parsers/leaksDebugStacks.js";
|
|
2
3
|
import type { LeaksReport, NextCallSuggestion } from "../types.js";
|
|
3
4
|
export declare const findRetainersSchema: z.ZodObject<{
|
|
4
5
|
path: z.ZodString;
|
|
5
6
|
className: z.ZodString;
|
|
6
7
|
maxResults: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
includeReferenceTree: z.ZodDefault<z.ZodBoolean>;
|
|
7
9
|
}, "strip", z.ZodTypeAny, {
|
|
8
10
|
className: string;
|
|
9
11
|
path: string;
|
|
10
12
|
maxResults: number;
|
|
13
|
+
includeReferenceTree: boolean;
|
|
11
14
|
}, {
|
|
12
15
|
className: string;
|
|
13
16
|
path: string;
|
|
14
17
|
maxResults?: number | undefined;
|
|
18
|
+
includeReferenceTree?: boolean | undefined;
|
|
15
19
|
}>;
|
|
16
20
|
export type FindRetainersInput = z.infer<typeof findRetainersSchema>;
|
|
17
21
|
export interface RetainerChainEntry {
|
|
@@ -33,7 +37,17 @@ export interface FindRetainersResult {
|
|
|
33
37
|
className: string;
|
|
34
38
|
totalMatches: number;
|
|
35
39
|
retainers: RetainerChain[];
|
|
36
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* v1.12+. Populated when `includeReferenceTree: true` and `leaks
|
|
42
|
+
* --debug=stacks` returned data. Each chain aggregates instances that
|
|
43
|
+
* share the same allocation call stack (the 342 notelet AVPlayerItem
|
|
44
|
+
* instances collapse to 1 chain with `instanceCount: 342`). The
|
|
45
|
+
* `userFrame` field surfaces the deepest non-system frame, which is
|
|
46
|
+
* the line a developer would inspect (e.g. `MediaNoteItemVideoView.prepareVideo`
|
|
47
|
+
* for the notelet case).
|
|
48
|
+
*/
|
|
49
|
+
referenceTreeChains?: ReferenceTreeChain[];
|
|
50
|
+
/** Pipeline hint: once you know who retains the class, locate it in source. */
|
|
37
51
|
suggestedNextCalls?: NextCallSuggestion[];
|
|
38
52
|
}
|
|
39
53
|
/**
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { runCommand } from "../runtime/exec.js";
|
|
2
3
|
import { runLeaksAndParse } from "../runtime/leaks.js";
|
|
4
|
+
import { parseLeaksDebugStacks, } from "../parsers/leaksDebugStacks.js";
|
|
3
5
|
import { suggestionGetDefinition } from "../runtime/suggestions.js";
|
|
4
6
|
export const findRetainersSchema = z.object({
|
|
5
7
|
path: z.string().min(1).describe("Absolute path to a `.memgraph` file."),
|
|
@@ -13,6 +15,10 @@ export const findRetainersSchema = z.object({
|
|
|
13
15
|
.positive()
|
|
14
16
|
.default(10)
|
|
15
17
|
.describe("Cap on how many retain chains to return (default 10)."),
|
|
18
|
+
includeReferenceTree: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.default(false)
|
|
21
|
+
.describe("v1.12+. When true, also run `leaks --debug=stacks --debug='<className>$'` to surface per-instance allocation stacks aggregated by call-stack fingerprint. Required on memgraphs where `leakCount: 0` and the class is reachable from KVO/NotificationCenter/caches (abandoned-memory shape). Each chain returns the allocation call stack + the unique retainer classes + a representative instance address. **Note:** `leaks --debug=stacks` only emits blocks for instances whose allocation stack was recorded, which requires the target was launched with `MallocStackLogging=1`. Xcode's Memory Graph Debugger export does NOT enable MSL by default, so memgraphs captured that way may surface fewer chains than the total instance count from `analyzeMemgraph.abandonedMemorySuspects[]`. Default false preserves v1.11 behavior."),
|
|
16
22
|
});
|
|
17
23
|
/**
|
|
18
24
|
* Walk the cycle forest and collect every parent-path that ends in a node whose
|
|
@@ -46,19 +52,59 @@ export function findRetainersIn(report, needle, maxResults = 10) {
|
|
|
46
52
|
visit(root, []);
|
|
47
53
|
return { totalMatches: total, retainers: matches };
|
|
48
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Spawn `leaks --debug=stacks --debug='<ClassName>$'` and parse the stdout
|
|
57
|
+
* into per-stack-fingerprint aggregated chains. Failure is non-fatal:
|
|
58
|
+
* returns an empty array so the cycle-side path still completes.
|
|
59
|
+
*
|
|
60
|
+
* leaks(1) `--debug=` predicate rejects `^` (`cannot match the start of
|
|
61
|
+
* a class name`); only the `$` trailing anchor is supported. The
|
|
62
|
+
* resulting semantic is "ends with X", which matches AVPlayerItem
|
|
63
|
+
* exactly but also things like MyAVPlayerItem (rare; intentionally
|
|
64
|
+
* permissive over over-restrictive). Class-name regex metacharacters
|
|
65
|
+
* are escaped so substrings like "Player.Item" stay literal.
|
|
66
|
+
*/
|
|
67
|
+
async function captureReferenceTreeChains(path, className, maxResults) {
|
|
68
|
+
// Escape regex metacharacters in the user-supplied class name so a
|
|
69
|
+
// substring like "AVPlayerItem" stays literal under leaks's regex
|
|
70
|
+
// predicate. `^` and `$` aren't escaped (leaks treats them specially).
|
|
71
|
+
const escaped = className.replace(/[.*+?{}()|[\]\\]/g, "\\$&");
|
|
72
|
+
const predicate = `${escaped}$`;
|
|
73
|
+
const result = await runCommand("leaks", ["--debug=stacks", `--debug=${predicate}`, path], { timeoutMs: 5 * 60_000 });
|
|
74
|
+
if (result.code !== 0 && result.code !== 1)
|
|
75
|
+
return [];
|
|
76
|
+
const all = parseLeaksDebugStacks(result.stdout);
|
|
77
|
+
return all.slice(0, maxResults);
|
|
78
|
+
}
|
|
49
79
|
export async function findRetainers(input) {
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const
|
|
80
|
+
const wantReferenceTree = input.includeReferenceTree ?? false;
|
|
81
|
+
const maxResults = input.maxResults ?? 10;
|
|
82
|
+
const [{ report, resolvedPath }, referenceTreeChains,] = await Promise.all([
|
|
83
|
+
runLeaksAndParse(input.path),
|
|
84
|
+
wantReferenceTree
|
|
85
|
+
? captureReferenceTreeChains(input.path, input.className, maxResults)
|
|
86
|
+
: Promise.resolve([]),
|
|
87
|
+
]);
|
|
88
|
+
const { totalMatches, retainers } = findRetainersIn(report, input.className, maxResults);
|
|
89
|
+
// Update totalMatches to include reference-tree side if it found instances
|
|
90
|
+
// the cycle path missed. Instance counts aggregate across the per-stack
|
|
91
|
+
// chains; cycle matches count each path separately, so we don't double-add.
|
|
92
|
+
const referenceTreeInstanceTotal = referenceTreeChains.reduce((s, c) => s + c.instanceCount, 0);
|
|
93
|
+
const effectiveTotal = totalMatches > 0 ? totalMatches : referenceTreeInstanceTotal;
|
|
94
|
+
const suggestedNextCalls = effectiveTotal > 0
|
|
53
95
|
? [suggestionGetDefinition({ symbolName: input.className })]
|
|
54
96
|
: [];
|
|
55
|
-
|
|
97
|
+
const result = {
|
|
56
98
|
ok: true,
|
|
57
99
|
path: resolvedPath,
|
|
58
100
|
className: input.className,
|
|
59
|
-
totalMatches,
|
|
101
|
+
totalMatches: effectiveTotal,
|
|
60
102
|
retainers,
|
|
61
103
|
...(suggestedNextCalls.length > 0 ? { suggestedNextCalls } : {}),
|
|
62
104
|
};
|
|
105
|
+
if (referenceTreeChains.length > 0) {
|
|
106
|
+
result.referenceTreeChains = referenceTreeChains;
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
63
109
|
}
|
|
64
110
|
//# sourceMappingURL=findRetainers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findRetainers.js","sourceRoot":"","sources":["../../src/tools/findRetainers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxE,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,4EAA4E,CAC7E;IACH,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,uDAAuD,CAAC;
|
|
1
|
+
{"version":3,"file":"findRetainers.js","sourceRoot":"","sources":["../../src/tools/findRetainers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { type AbandonedMemoryEntry } from "./analyzeAbandonedMemory.js";
|
|
2
3
|
import type { LeaksReport, NextCallSuggestion } from "../types.js";
|
|
3
4
|
/**
|
|
4
5
|
* Cycle-semantic diff. Answers: "did the antipattern I targeted actually
|
|
@@ -70,6 +71,28 @@ export interface VerifyFixResult {
|
|
|
70
71
|
expectedPatternVerdict?: PatternResolution["verdict"];
|
|
71
72
|
diagnosis: string;
|
|
72
73
|
suggestedNextCalls?: NextCallSuggestion[];
|
|
74
|
+
/**
|
|
75
|
+
* v1.12+. Where the overall verdict came from. `cycle-pattern` is the
|
|
76
|
+
* v1.11 behavior (classified cycles). `abandoned-memory` is the new
|
|
77
|
+
* fallback path: when zero cycle patterns fire on either side,
|
|
78
|
+
* verifyFix internally chains into `analyzeAbandonedMemory` and bases
|
|
79
|
+
* the verdict on `actionableShrinkage` / `actionableGrowth` instead.
|
|
80
|
+
* Branch on this field if you need to know which signal the verdict
|
|
81
|
+
* is based on.
|
|
82
|
+
*/
|
|
83
|
+
verdictSource?: "cycle-pattern" | "abandoned-memory";
|
|
84
|
+
/**
|
|
85
|
+
* v1.12+. Populated when `verdictSource` is `abandoned-memory` and the
|
|
86
|
+
* fix freed at least one actionable class. The top-N entries (by
|
|
87
|
+
* absolute delta) of `analyzeAbandonedMemory.actionableShrinkage[]`.
|
|
88
|
+
*/
|
|
89
|
+
freedClasses?: AbandonedMemoryEntry[];
|
|
90
|
+
/**
|
|
91
|
+
* v1.12+. Populated when `verdictSource` is `abandoned-memory` and
|
|
92
|
+
* something grew between the snapshots (regression or unrelated). Top-N
|
|
93
|
+
* entries of `analyzeAbandonedMemory.actionableGrowth[]`.
|
|
94
|
+
*/
|
|
95
|
+
regressionClasses?: AbandonedMemoryEntry[];
|
|
73
96
|
}
|
|
74
97
|
/** Pure function: compute verifyFix result from two parsed reports. */
|
|
75
98
|
export declare function verifyFromReports(beforeReport: LeaksReport, afterReport: LeaksReport, beforePath: string, afterPath: string, input: VerifyFixInput): VerifyFixResult;
|
package/dist/tools/verifyFix.js
CHANGED
|
@@ -3,6 +3,7 @@ import { runLeaksAndParse } from "../runtime/leaks.js";
|
|
|
3
3
|
import { rootCyclesOnly, walkCycles } from "../parsers/leaksOutput.js";
|
|
4
4
|
import { shortenForVerbosity, } from "../parsers/shortenClassName.js";
|
|
5
5
|
import { classifyReport } from "./classifyCycle.js";
|
|
6
|
+
import { analyzeAbandonedMemory, } from "./analyzeAbandonedMemory.js";
|
|
6
7
|
/**
|
|
7
8
|
* Cycle-semantic diff. Answers: "did the antipattern I targeted actually
|
|
8
9
|
* resolve, and how many instances/bytes were freed?"
|
|
@@ -196,11 +197,130 @@ function buildDiagnosis(resolutions, expectedVerdict, expectedId) {
|
|
|
196
197
|
}
|
|
197
198
|
return parts.join(" ");
|
|
198
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Threshold below which a class-count change is treated as cosmetic
|
|
202
|
+
* noise and excluded from the abandoned-memory verdict. Mirrors the
|
|
203
|
+
* threshold used by the `verify-fix-table` markdown renderer in
|
|
204
|
+
* `responseFormatter.renderVerifyFixTable`.
|
|
205
|
+
*/
|
|
206
|
+
const ACTIONABLE_DELTA_THRESHOLD = 10;
|
|
207
|
+
/** Cap on freedClasses[] / regressionClasses[] length on the response.
|
|
208
|
+
* 100 is large enough that the magnitude check below sees a representative
|
|
209
|
+
* slice of the deltas, not just the top-25 outliers. The response is
|
|
210
|
+
* capped further by callers if they pass through `formatMcpResponse`. */
|
|
211
|
+
const ABANDONED_MEMORY_TOPN = 100;
|
|
212
|
+
/**
|
|
213
|
+
* v1.12 fallback path: when classified-cycle data is absent from BOTH
|
|
214
|
+
* snapshots, the v1.11 verifyFix returned `overallVerdict: "PASS"` with
|
|
215
|
+
* no patterns. Useless for the user. Now we chain into
|
|
216
|
+
* `analyzeAbandonedMemory` and emit a verdict based on heap-wide class
|
|
217
|
+
* deltas:
|
|
218
|
+
*
|
|
219
|
+
* - At least one actionableShrinkage entry with |delta| >= 10 AND
|
|
220
|
+
* actionableGrowth empty (or below threshold): PASS with freedClasses.
|
|
221
|
+
* - actionableGrowth non-empty AND actionableShrinkage below threshold:
|
|
222
|
+
* FAIL with regressionClasses.
|
|
223
|
+
* - Both non-empty above threshold: PARTIAL with both.
|
|
224
|
+
* - Both empty / below threshold: PASS with empty freedClasses (clean
|
|
225
|
+
* state, no measurable change).
|
|
226
|
+
*
|
|
227
|
+
* Returns null when even the abandoned-memory path can't run (paths
|
|
228
|
+
* inaccessible, etc.); the caller falls back to the cycle-pattern result.
|
|
229
|
+
*/
|
|
230
|
+
async function buildAbandonedMemoryFallback(beforePath, afterPath) {
|
|
231
|
+
let amResult;
|
|
232
|
+
try {
|
|
233
|
+
amResult = await analyzeAbandonedMemory({
|
|
234
|
+
beforePath,
|
|
235
|
+
afterPath,
|
|
236
|
+
topN: ABANDONED_MEMORY_TOPN,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
const freedClasses = (amResult.actionableShrinkage ?? []).filter((e) => Math.abs(e.delta) >= ACTIONABLE_DELTA_THRESHOLD);
|
|
243
|
+
const regressionClasses = (amResult.actionableGrowth ?? []).filter((e) => Math.abs(e.delta) >= ACTIONABLE_DELTA_THRESHOLD);
|
|
244
|
+
// Magnitude check: a fix that frees thousands of instances and incidentally
|
|
245
|
+
// grows a hundred Swift Metadata / pthread_mutex_t / ObjC class table
|
|
246
|
+
// entries (these scale with app activity, not user code) should be PASS,
|
|
247
|
+
// not PARTIAL. The magnitude ratio decides:
|
|
248
|
+
//
|
|
249
|
+
// - freed magnitude >= 3x growth magnitude: PASS with a residual-growth note
|
|
250
|
+
// - growth magnitude >= 3x freed magnitude: FAIL
|
|
251
|
+
// - otherwise: PARTIAL
|
|
252
|
+
//
|
|
253
|
+
// Threshold of 2x is moderate; the notelet case has ratios above 2x
|
|
254
|
+
// because the fix freed ~8k actionable instances while the residual
|
|
255
|
+
// growth (Swift runtime + font cache + ObjC class table that scale
|
|
256
|
+
// with app activity, not user code) is ~3-4k. Tighter than 2x would
|
|
257
|
+
// demand near-perfect cleanups; looser would call ambiguous mixed
|
|
258
|
+
// results as PASS.
|
|
259
|
+
const freedMagnitude = freedClasses.reduce((s, e) => s + Math.abs(e.delta), 0);
|
|
260
|
+
const growthMagnitude = regressionClasses.reduce((s, e) => s + Math.abs(e.delta), 0);
|
|
261
|
+
const MAGNITUDE_DOMINANCE_RATIO = 2;
|
|
262
|
+
let verdict;
|
|
263
|
+
let diagnosis;
|
|
264
|
+
if (freedClasses.length > 0 && regressionClasses.length === 0) {
|
|
265
|
+
verdict = "PASS";
|
|
266
|
+
const topFreed = freedClasses[0];
|
|
267
|
+
diagnosis = `Fix verified via abandoned-memory shrinkage: ${freedClasses.length} class${freedClasses.length === 1 ? "" : "es"} freed, leading with \`${topFreed.className}\` (${topFreed.delta}).`;
|
|
268
|
+
}
|
|
269
|
+
else if (freedClasses.length === 0 && regressionClasses.length > 0) {
|
|
270
|
+
verdict = "FAIL";
|
|
271
|
+
const topGrew = regressionClasses[0];
|
|
272
|
+
diagnosis = `Regression detected: ${regressionClasses.length} class${regressionClasses.length === 1 ? "" : "es"} grew, leading with \`${topGrew.className}\` (+${topGrew.delta}). No actionable shrinkage to balance it.`;
|
|
273
|
+
}
|
|
274
|
+
else if (freedClasses.length > 0 && regressionClasses.length > 0) {
|
|
275
|
+
if (freedMagnitude >= growthMagnitude * MAGNITUDE_DOMINANCE_RATIO) {
|
|
276
|
+
verdict = "PASS";
|
|
277
|
+
const topFreed = freedClasses[0];
|
|
278
|
+
diagnosis = `Fix verified via abandoned-memory shrinkage: ${freedMagnitude.toLocaleString()} instances freed dominates the residual ${growthMagnitude.toLocaleString()}-instance growth (typically Swift runtime / font cache / ObjC class table that scales with app activity). Top freed: \`${topFreed.className}\` (${topFreed.delta}). The \`regressionClasses\` field carries the residual growth for inspection.`;
|
|
279
|
+
}
|
|
280
|
+
else if (growthMagnitude >= freedMagnitude * MAGNITUDE_DOMINANCE_RATIO) {
|
|
281
|
+
verdict = "FAIL";
|
|
282
|
+
const topGrew = regressionClasses[0];
|
|
283
|
+
diagnosis = `Regression: ${growthMagnitude.toLocaleString()}-instance growth dominates the ${freedMagnitude.toLocaleString()}-instance shrinkage. Top grew: \`${topGrew.className}\` (+${topGrew.delta}).`;
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
verdict = "PARTIAL";
|
|
287
|
+
diagnosis = `Mixed result: ${freedClasses.length} class${freedClasses.length === 1 ? "" : "es"} freed (${freedMagnitude.toLocaleString()} instances) AND ${regressionClasses.length} grew (${growthMagnitude.toLocaleString()} instances). Neither side dominates; the fix may have addressed one path while introducing another, or the workflow exercised different code in the two snapshots.`;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
verdict = "PASS";
|
|
292
|
+
diagnosis =
|
|
293
|
+
"No actionable class-count changes between snapshots (|delta| < 10). Either both snapshots are clean or the workflow did not exercise the targeted code.";
|
|
294
|
+
}
|
|
295
|
+
return { verdict, freedClasses, regressionClasses, diagnosis };
|
|
296
|
+
}
|
|
199
297
|
export async function verifyFix(input) {
|
|
200
298
|
const [{ report: beforeReport, resolvedPath: bp }, { report: afterReport, resolvedPath: ap },] = await Promise.all([
|
|
201
299
|
runLeaksAndParse(input.before),
|
|
202
300
|
runLeaksAndParse(input.after),
|
|
203
301
|
]);
|
|
204
|
-
|
|
302
|
+
const result = verifyFromReports(beforeReport, afterReport, bp, ap, input);
|
|
303
|
+
// v1.12 fallback: when the cycle-pattern path found zero patterns in
|
|
304
|
+
// either snapshot, the result is informationally empty. Chain into
|
|
305
|
+
// analyzeAbandonedMemory to produce a useful verdict instead. The
|
|
306
|
+
// cycle-pattern path takes precedence when patterns DO fire, so this
|
|
307
|
+
// is a strict fallback.
|
|
308
|
+
if (result.patternResolution.length === 0) {
|
|
309
|
+
const fallback = await buildAbandonedMemoryFallback(input.before, input.after);
|
|
310
|
+
if (fallback) {
|
|
311
|
+
result.verdictSource = "abandoned-memory";
|
|
312
|
+
result.freedClasses = fallback.freedClasses;
|
|
313
|
+
result.regressionClasses = fallback.regressionClasses;
|
|
314
|
+
result.overallVerdict = fallback.verdict;
|
|
315
|
+
result.diagnosis = fallback.diagnosis;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
result.verdictSource = "cycle-pattern";
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
result.verdictSource = "cycle-pattern";
|
|
323
|
+
}
|
|
324
|
+
return result;
|
|
205
325
|
}
|
|
206
326
|
//# sourceMappingURL=verifyFix.js.map
|