@memlab/core 1.1.22 → 1.1.24
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/dist/__tests__/lib/TestUtils.d.ts +13 -0
- package/dist/__tests__/lib/TestUtils.d.ts.map +1 -0
- package/dist/__tests__/lib/TestUtils.js +39 -0
- package/dist/__tests__/parser/HeapParser.test.d.ts.map +1 -0
- package/dist/__tests__/parser/NodeHeap.test.d.ts.map +1 -0
- package/dist/__tests__/parser/StringNode.test.d.ts.map +1 -0
- package/dist/__tests__/parser/traverse/HeapNodeTraverse.test.d.ts.map +1 -0
- package/dist/__tests__/utils/utils.test.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -1
- package/dist/lib/BaseOption.d.ts.map +1 -0
- package/dist/lib/BrowserInfo.d.ts +1 -1
- package/dist/lib/BrowserInfo.d.ts.map +1 -0
- package/dist/lib/Config.d.ts +2 -2
- package/dist/lib/Config.d.ts.map +1 -0
- package/dist/lib/Config.js +4 -1
- package/dist/lib/Console.d.ts.map +1 -0
- package/dist/lib/Constant.d.ts +1 -1
- package/dist/lib/Constant.d.ts.map +1 -0
- package/dist/lib/FileManager.d.ts +6 -1
- package/dist/lib/FileManager.d.ts.map +1 -0
- package/dist/lib/FileManager.js +24 -1
- package/dist/lib/HeapAnalyzer.d.ts +3 -3
- package/dist/lib/HeapAnalyzer.d.ts.map +1 -0
- package/dist/lib/HeapAnalyzer.js +26 -14
- package/dist/lib/HeapParser.d.ts.map +1 -0
- package/dist/lib/InternalValueSetter.d.ts.map +1 -0
- package/dist/lib/NodeHeap.d.ts.map +1 -0
- package/dist/lib/PackageInfoLoader.d.ts.map +1 -0
- package/dist/lib/ProcessManager.d.ts +1 -1
- package/dist/lib/ProcessManager.d.ts.map +1 -0
- package/dist/lib/RunInfoUtils.d.ts +1 -0
- package/dist/lib/RunInfoUtils.d.ts.map +1 -0
- package/dist/lib/RunInfoUtils.js +8 -4
- package/dist/lib/SerializationHelper.d.ts +18 -0
- package/dist/lib/SerializationHelper.d.ts.map +1 -0
- package/dist/lib/SerializationHelper.js +36 -0
- package/dist/lib/Serializer.d.ts +4 -8
- package/dist/lib/Serializer.d.ts.map +1 -0
- package/dist/lib/Serializer.js +12 -3
- package/dist/lib/StringLoader.d.ts +2 -2
- package/dist/lib/StringLoader.d.ts.map +1 -0
- package/dist/lib/TraceSampler.d.ts +1 -1
- package/dist/lib/TraceSampler.d.ts.map +1 -0
- package/dist/lib/Types.d.ts +81 -63
- package/dist/lib/Types.d.ts.map +1 -0
- package/dist/lib/Utils.d.ts +6 -2
- package/dist/lib/Utils.d.ts.map +1 -0
- package/dist/lib/Utils.js +45 -4
- package/dist/lib/charts/MemoryBarChart.d.ts.map +1 -0
- package/dist/lib/charts/MemoryBarChart.js +2 -2
- package/dist/lib/heap-data/HeapEdge.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapLocation.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapNode.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapSnapshot.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapStringNode.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapUtils.d.ts.map +1 -0
- package/dist/lib/heap-data/MemLabTagStore.d.ts +1 -1
- package/dist/lib/heap-data/MemLabTagStore.d.ts.map +1 -0
- package/dist/lib/leak-filters/BaseLeakFilter.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/LeakFilterRuleList.d.ts.map +1 -0
- package/dist/lib/leak-filters/LeakFilterRuleList.js +2 -0
- package/dist/lib/leak-filters/LeakObjectFilter.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterByExternalFilter.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterDetachedDOMElement.rule.d.ts +0 -1
- package/dist/lib/leak-filters/rules/FilterDetachedDOMElement.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterDetachedDOMElement.rule.js +22 -9
- package/dist/lib/leak-filters/rules/FilterHermesNode.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterOverSizedNodeAsLeak.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterStackTraceFrame.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterTrivialNode.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterUnmountedFiberNode.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterUnmountedFiberNode.rule.js +4 -3
- package/dist/lib/leak-filters/rules/FilterXMLHTTPRequest.rule.d.ts +20 -0
- package/dist/lib/leak-filters/rules/FilterXMLHTTPRequest.rule.d.ts.map +1 -0
- package/dist/lib/leak-filters/rules/FilterXMLHTTPRequest.rule.js +30 -0
- package/dist/lib/trace-filters/BaseTraceFilter.rule.d.ts +1 -1
- package/dist/lib/trace-filters/BaseTraceFilter.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/LeakTraceFilter.d.ts.map +1 -0
- package/dist/lib/trace-filters/TraceFilterRuleList.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterAttachedDOMToDetachedDOMTrace.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterCppRootsToDetachedDOMTrace.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterDOMNodeChainTrace.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterHermesTrace.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterInternalNodeTrace.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterPendingActivitiesTrace.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterShadowRootTrace.rule.d.ts.map +1 -0
- package/dist/lib/trace-filters/rules/FilterStyleEngineTrace.rule.d.ts.map +1 -0
- package/dist/logger/LeakClusterLogger.d.ts.map +1 -0
- package/dist/logger/LeakTraceDetailsLogger.d.ts.map +1 -0
- package/dist/modes/BaseMode.d.ts.map +1 -0
- package/dist/modes/InteractionTestMode.d.ts.map +1 -0
- package/dist/modes/MeasureMode.d.ts.map +1 -0
- package/dist/modes/RunningModes.d.ts.map +1 -0
- package/dist/paths/TraceFinder.d.ts.map +1 -0
- package/dist/trace-cluster/ClusterUtils.d.ts.map +1 -0
- package/dist/trace-cluster/ClusterUtilsHelper.d.ts +2 -2
- package/dist/trace-cluster/ClusterUtilsHelper.d.ts.map +1 -0
- package/dist/trace-cluster/ClusteringHeuristics.d.ts.map +1 -0
- package/dist/trace-cluster/EvalutationMetric.d.ts +1 -1
- package/dist/trace-cluster/EvalutationMetric.d.ts.map +1 -0
- package/dist/trace-cluster/MultiIterationSeqClustering.d.ts +1 -1
- package/dist/trace-cluster/MultiIterationSeqClustering.d.ts.map +1 -0
- package/dist/trace-cluster/SequentialClustering.d.ts.map +1 -0
- package/dist/trace-cluster/TraceBucket.d.ts +2 -2
- package/dist/trace-cluster/TraceBucket.d.ts.map +1 -0
- package/dist/trace-cluster/TraceBucket.js +41 -11
- package/dist/trace-cluster/TraceElement.d.ts +1 -1
- package/dist/trace-cluster/TraceElement.d.ts.map +1 -0
- package/dist/trace-cluster/TraceElement.js +15 -15
- package/dist/trace-cluster/strategies/MLTraceSimilarityStrategy.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/TraceAsClusterStrategy.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/TraceSimilarityStrategy.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/machine-learning/DistanceMatrix.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/machine-learning/HAC.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/machine-learning/Ngram.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/machine-learning/TfidfVectorizer.d.ts.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeapUtils.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/HeapUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAK9C"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @oncall web_perf_infra
|
|
9
9
|
*/
|
|
10
10
|
import type { AnyValue, IHeapSnapshot } from '../Types';
|
|
11
|
-
|
|
11
|
+
type AnyObject = Record<AnyValue, AnyValue>;
|
|
12
12
|
/** @internal */
|
|
13
13
|
export default class MemLabTaggedStore {
|
|
14
14
|
taggedObjects: Record<string, WeakSet<AnyObject>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemLabTagStore.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/MemLabTagStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EACV,QAAQ,EAGR,aAAa,EAGd,MAAM,UAAU,CAAC;AAElB,KAAK,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAQ5C,gBAAgB;AAChB,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAC7B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAEzD,OAAO;IAIP,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IACrD,SAAgB,EAAE,SAAiB;WAGrB,WAAW,IAAI,iBAAiB;WAQhC,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;WAUpD,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;CAgF1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseLeakFilter.rule.d.ts","sourceRoot":"","sources":["../../../src/lib/leak-filters/BaseLeakFilter.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,UAAU,CAAC;AAEtE;;;GAGG;AACH,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CACJ,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,aAAa,GAC3B,YAAY,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeakFilterRuleList.d.ts","sourceRoot":"","sources":["../../../src/lib/leak-filters/LeakFilterRuleList.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAC,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;;AAqB5D,wBAAwE"}
|
|
@@ -21,6 +21,7 @@ const FilterOverSizedNodeAsLeak_rule_1 = require("./rules/FilterOverSizedNodeAsL
|
|
|
21
21
|
const FilterStackTraceFrame_rule_1 = require("./rules/FilterStackTraceFrame.rule");
|
|
22
22
|
const FilterTrivialNode_rule_1 = require("./rules/FilterTrivialNode.rule");
|
|
23
23
|
const FilterUnmountedFiberNode_rule_1 = require("./rules/FilterUnmountedFiberNode.rule");
|
|
24
|
+
const FilterXMLHTTPRequest_rule_1 = require("./rules/FilterXMLHTTPRequest.rule");
|
|
24
25
|
const list = [
|
|
25
26
|
new FilterByExternalFilter_rule_1.FilterByExternalFilterRule(),
|
|
26
27
|
new FilterTrivialNode_rule_1.FilterTrivialNodeRule(),
|
|
@@ -29,5 +30,6 @@ const list = [
|
|
|
29
30
|
new FilterUnmountedFiberNode_rule_1.FilterUnmountedFiberNodeRule(),
|
|
30
31
|
new FilterDetachedDOMElement_rule_1.FilterDetachedDOMElementRule(),
|
|
31
32
|
new FilterStackTraceFrame_rule_1.FilterStackTraceFrameRule(),
|
|
33
|
+
new FilterXMLHTTPRequest_rule_1.FilterXMLHTTPRequestRule(),
|
|
32
34
|
];
|
|
33
35
|
exports.default = (0, InternalValueSetter_1.setInternalValue)(list, __filename, Constant_1.default.internalDir);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeakObjectFilter.d.ts","sourceRoot":"","sources":["../../../src/lib/leak-filters/LeakObjectFilter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,UAAU,CAAC;AAItE;;;GAGG;AACH,qBAAa,gBAAgB;IACpB,MAAM,CACX,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,aAAa,GAC3B,OAAO;CAYX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterByExternalFilter.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterByExternalFilter.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAE3E;;GAEG;AACH,qBAAa,0BAA2B,YAAW,qBAAqB;IACtE,MAAM,CACJ,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,aAAa,GAC3B,YAAY;CAQhB"}
|
|
@@ -15,6 +15,5 @@ import { ILeakObjectFilterRule, LeakDecision } from '../BaseLeakFilter.rule';
|
|
|
15
15
|
*/
|
|
16
16
|
export declare class FilterDetachedDOMElementRule implements ILeakObjectFilterRule {
|
|
17
17
|
filter(_config: MemLabConfig, node: IHeapNode): LeakDecision;
|
|
18
|
-
protected checkDetachedFiberNode(config: MemLabConfig, node: IHeapNode): boolean;
|
|
19
18
|
}
|
|
20
19
|
//# sourceMappingURL=FilterDetachedDOMElement.rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterDetachedDOMElement.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterDetachedDOMElement.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAG3E;;GAEG;AACH,qBAAa,4BAA6B,YAAW,qBAAqB;IACxE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY;CAa7D"}
|
|
@@ -23,18 +23,31 @@ class FilterDetachedDOMElementRule {
|
|
|
23
23
|
const isDetached = Utils_1.default.isDetachedDOMNode(node, {
|
|
24
24
|
ignoreInternalNode: true,
|
|
25
25
|
});
|
|
26
|
-
if (isDetached
|
|
26
|
+
if (isDetached &&
|
|
27
|
+
!isDominatedByEdgeName(node, 'stateNode') &&
|
|
28
|
+
!isDetachedDOMNodeDominatedByDehydratedMemoizedState(node)) {
|
|
27
29
|
return BaseLeakFilter_rule_1.LeakDecision.LEAK;
|
|
28
30
|
}
|
|
29
31
|
return BaseLeakFilter_rule_1.LeakDecision.MAYBE_LEAK;
|
|
30
32
|
}
|
|
31
|
-
checkDetachedFiberNode(config, node) {
|
|
32
|
-
if (!config.detectFiberNodeLeak ||
|
|
33
|
-
!Utils_1.default.isFiberNode(node) ||
|
|
34
|
-
Utils_1.default.hasHostRoot(node)) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
return !Utils_1.default.isNodeDominatedByDeletionsArray(node);
|
|
38
|
-
}
|
|
39
33
|
}
|
|
40
34
|
exports.FilterDetachedDOMElementRule = FilterDetachedDOMElementRule;
|
|
35
|
+
function isDominatedByEdgeName(node, edgeNameOrIndex) {
|
|
36
|
+
var _a;
|
|
37
|
+
const referrerNode = node.getAnyReferrerNode(edgeNameOrIndex);
|
|
38
|
+
if (referrerNode == null) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return referrerNode.id === ((_a = node.dominatorNode) === null || _a === void 0 ? void 0 : _a.id);
|
|
42
|
+
}
|
|
43
|
+
// check if the input is a detached DOM node dominated by a 'dehydrated'
|
|
44
|
+
// edge from a memoizedState. In this case, the node is not a memory leak
|
|
45
|
+
function isDetachedDOMNodeDominatedByDehydratedMemoizedState(node) {
|
|
46
|
+
var _a;
|
|
47
|
+
const referrerNode = node.getAnyReferrerNode('dehydrated', 'property');
|
|
48
|
+
if (referrerNode == null) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
return (referrerNode.id === ((_a = node.dominatorNode) === null || _a === void 0 ? void 0 : _a.id) &&
|
|
52
|
+
isDominatedByEdgeName(referrerNode, 'memoizedState'));
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterHermesNode.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterHermesNode.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAG3E,qBAAa,oBAAqB,YAAW,qBAAqB;IACzD,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY;CAOnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterOverSizedNodeAsLeak.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterOverSizedNodeAsLeak.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAE3E;;GAEG;AACH,qBAAa,6BAA8B,YAAW,qBAAqB;IACzE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY;CAY5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterStackTraceFrame.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterStackTraceFrame.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAG3E;;GAEG;AACH,qBAAa,yBAA0B,YAAW,qBAAqB;IACrE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY;CAK7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterTrivialNode.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterTrivialNode.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAG3E;;GAEG;AACH,qBAAa,qBAAsB,YAAW,qBAAqB;IACjE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY;IAM3D,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;CAOlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterUnmountedFiberNode.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterUnmountedFiberNode.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAG3E;;GAEG;AACH,qBAAa,4BAA6B,YAAW,qBAAqB;IACxE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY;IAO3D,SAAS,CAAC,sBAAsB,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,GACd,OAAO;CASX"}
|
|
@@ -26,9 +26,10 @@ class FilterUnmountedFiberNodeRule {
|
|
|
26
26
|
return BaseLeakFilter_rule_1.LeakDecision.MAYBE_LEAK;
|
|
27
27
|
}
|
|
28
28
|
checkDetachedFiberNode(config, node) {
|
|
29
|
-
if (!config.detectFiberNodeLeak ||
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
if (!config.detectFiberNodeLeak || !Utils_1.default.isFiberNode(node)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (!Utils_1.default.isDetachedFiberNode(node)) {
|
|
32
33
|
return false;
|
|
33
34
|
}
|
|
34
35
|
return !Utils_1.default.isNodeDominatedByDeletionsArray(node);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall web_perf_infra
|
|
9
|
+
*/
|
|
10
|
+
import type { MemLabConfig } from '../../Config';
|
|
11
|
+
import type { IHeapNode } from '../../Types';
|
|
12
|
+
import { ILeakObjectFilterRule, LeakDecision } from '../BaseLeakFilter.rule';
|
|
13
|
+
/**
|
|
14
|
+
* mark XMLHTTPRequest with status ok as memory leaks
|
|
15
|
+
*/
|
|
16
|
+
export declare class FilterXMLHTTPRequestRule implements ILeakObjectFilterRule {
|
|
17
|
+
filter(_config: MemLabConfig, node: IHeapNode): LeakDecision;
|
|
18
|
+
protected checkFinishedXMLHTTPRequest(node: IHeapNode): boolean;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=FilterXMLHTTPRequest.rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterXMLHTTPRequest.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/leak-filters/rules/FilterXMLHTTPRequest.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAY,SAAS,EAAC,MAAM,aAAa,CAAC;AACtD,OAAO,EAAC,qBAAqB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAE3E;;GAEG;AACH,qBAAa,wBAAyB,YAAW,qBAAqB;IACpE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY;IAM5D,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;CAUhE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall web_perf_infra
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.FilterXMLHTTPRequestRule = void 0;
|
|
13
|
+
const BaseLeakFilter_rule_1 = require("../BaseLeakFilter.rule");
|
|
14
|
+
/**
|
|
15
|
+
* mark XMLHTTPRequest with status ok as memory leaks
|
|
16
|
+
*/
|
|
17
|
+
class FilterXMLHTTPRequestRule {
|
|
18
|
+
filter(_config, node) {
|
|
19
|
+
return this.checkFinishedXMLHTTPRequest(node)
|
|
20
|
+
? BaseLeakFilter_rule_1.LeakDecision.LEAK
|
|
21
|
+
: BaseLeakFilter_rule_1.LeakDecision.MAYBE_LEAK;
|
|
22
|
+
}
|
|
23
|
+
checkFinishedXMLHTTPRequest(node) {
|
|
24
|
+
if (node.name !== 'XMLHttpRequest' || node.type !== 'native') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return (node.findAnyReference((edge) => edge.toNode.name === '{"status":"ok"}') != null);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.FilterXMLHTTPRequestRule = FilterXMLHTTPRequestRule;
|
|
@@ -18,7 +18,7 @@ export declare enum TraceDecision {
|
|
|
18
18
|
MAYBE_INSIGHTFUL = "maybe-insightful",
|
|
19
19
|
NOT_INSIGHTFUL = "not-insightful"
|
|
20
20
|
}
|
|
21
|
-
export
|
|
21
|
+
export type LeakTraceFilterOptions = {
|
|
22
22
|
config?: MemLabConfig;
|
|
23
23
|
snapshot?: IHeapSnapshot;
|
|
24
24
|
leakedNodeIds?: HeapNodeIdSet;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTraceFilter.rule.d.ts","sourceRoot":"","sources":["../../../src/lib/trace-filters/BaseTraceFilter.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAE9E;;;GAGG;AACH,oBAAY,aAAa;IACvB,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;CAClC;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAAC;CAC9E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeakTraceFilter.d.ts","sourceRoot":"","sources":["../../../src/lib/trace-filters/LeakTraceFilter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAInE;;;;GAIG;AACH,qBAAa,eAAe;IACnB,MAAM,CACX,CAAC,EAAE,iBAAiB,EACpB,OAAO,EAAE,sBAAsB,GAC9B,OAAO;CAYX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceFilterRuleList.d.ts","sourceRoot":"","sources":["../../../src/lib/trace-filters/TraceFilterRuleList.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;;AAqB5D,wBAAwE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterAttachedDOMToDetachedDOMTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterAttachedDOMToDetachedDOMTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAK7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,uCACX,YAAW,oBAAoB;IAE/B,MAAM,CACJ,CAAC,EAAE,iBAAiB,EACpB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CASjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterCppRootsToDetachedDOMTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterCppRootsToDetachedDOMTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAK7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,oCACX,YAAW,oBAAoB;IAE/B,MAAM,CACJ,CAAC,EAAE,iBAAiB,EACpB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CASjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterDOMNodeChainTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterDOMNodeChainTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAK7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,2BAA4B,YAAW,oBAAoB;IACtE,MAAM,CACJ,CAAC,EAAE,iBAAiB,EACpB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CASjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterHermesTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterHermesTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAInD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,MAAM,CACJ,EAAE,EAAE,iBAAiB,EACrB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CAQjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterInternalNodeTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterInternalNodeTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAK7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,2BAA4B,YAAW,oBAAoB;IACtE,MAAM,CACJ,CAAC,EAAE,iBAAiB,EACpB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CASjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterPendingActivitiesTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterPendingActivitiesTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAK7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,gCAAiC,YAAW,oBAAoB;IAC3E,MAAM,CACJ,CAAC,EAAE,iBAAiB,EACpB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CAYjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterShadowRootTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterShadowRootTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAK7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,yBAA0B,YAAW,oBAAoB;IACpE,MAAM,CACJ,CAAC,EAAE,iBAAiB,EACpB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CASjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterStyleEngineTrace.rule.d.ts","sourceRoot":"","sources":["../../../../src/lib/trace-filters/rules/FilterStyleEngineTrace.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAK7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,0BAA2B,YAAW,oBAAoB;IACrE,MAAM,CACJ,CAAC,EAAE,iBAAiB,EACpB,OAAO,GAAE,sBAA2B,GACnC,aAAa;CASjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeakClusterLogger.d.ts","sourceRoot":"","sources":["../../src/logger/LeakClusterLogger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAItB,cAAM,iBAAiB;IACrB,QAAQ,EAAE,MAAM,CAAC;;IAKX,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAW/D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAalD,mBAAmB,CAAC,OAAO,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKlE,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAcvD,WAAW,CACT,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,GAAE;QAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;KAAM,GAC7C,IAAI;IAoBP,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,GAAG,IAAI;IAqBhD,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAYnD,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAW7C,gBAAgB,CAAC,OAAO,EAAE,YAAY;IAWtC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE;IAyB5C,WAAW,CACT,SAAS,EAAE,WAAW,EAAE,EACxB,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAM;IAwBnC,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAKhD,6BAA6B,CAC3B,SAAS,EAAE,WAAW,EAAE,EACxB,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAM;IAwBnC,6BAA6B,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;CAI7D;;AAED,wBAAuC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeakTraceDetailsLogger.d.ts","sourceRoot":"","sources":["../../src/logger/LeakTraceDetailsLogger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACT,MAAM,cAAc,CAAC;AAOtB,cAAM,sBAAsB;IAC1B,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOzC,QAAQ,CACN,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,aAAa,EACvB,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACtC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,MAAM,GACf,QAAQ,CAAC,eAAe,CAAC;IAW5B,SAAS,CACP,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,aAAa,EACvB,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACtC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,MAAM,EAAE,MAAM,GACb,KAAK,CAAC,eAAe,CAAC;CAkB1B;;AAED,wBAA4C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseMode.d.ts","sourceRoot":"","sources":["../../src/modes/BaseMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,qBAAqB,EACrB,QAAQ,EACT,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAIpC,cAAM,QAAQ;IACZ,SAAS,CAAC,MAAM,EAAE,MAAM,CAAiB;IACzC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACrD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,aAAa,CAAC,SAAS,EAAE,qBAAqB,GAAG,IAAI;IAKrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAKzC,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAK7C,gBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAKjD,uBAAuB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAKxD,oBAAoB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAKrD,sBAAsB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAKvD,wBAAwB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAQzD,uBAAuB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAQxD,8BAA8B,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO;IAOzD,oBAAoB,CAExB,KAAK,EAAE,IAAI,EAEX,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAKlC,eAAe,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI;CAGzD;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractionTestMode.d.ts","sourceRoot":"","sources":["../../src/modes/InteractionTestMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,YAAY,CAAC;AAGlC,cAAM,mBAAoB,SAAQ,QAAQ;IACxC,QAAQ,IAAI,OAAO;IAInB,YAAY,IAAI,OAAO;IAIvB,gBAAgB,IAAI,OAAO;IAI3B,uBAAuB,IAAI,OAAO;IAIlC,oBAAoB,IAAI,OAAO;IAI/B,sBAAsB,IAAI,OAAO;IAIjC,wBAAwB,IAAI,OAAO;IAInC,uBAAuB,IAAI,OAAO;IAIlC,8BAA8B,IAAI,OAAO;CAG1C;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeasureMode.d.ts","sourceRoot":"","sources":["../../src/modes/MeasureMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,YAAY,CAAC;AAIlC,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAC,WAAW,EAAE,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAGrE,cAAM,WAAY,SAAQ,QAAQ;IAChC,oBAAoB,IAAI,OAAO;IAI/B,sBAAsB,IAAI,OAAO;IAIjC,wBAAwB,IAAI,OAAO;IAInC,uBAAuB,IAAI,OAAO;IAIlC,8BAA8B,IAAI,OAAO;IAInC,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAQvE,eAAe,CAAC,SAAS,EAAE,qBAAqB,GAAG,IAAI;CAMxD;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunningModes.d.ts","sourceRoot":"","sources":["../../src/modes/RunningModes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;;cAQ3C,MAAM,WAAW,MAAM,GAAG,YAAY;;AADlD,wBAqBE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceFinder.d.ts","sourceRoot":"","sources":["../../src/paths/TraceFinder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,SAAS,EAET,SAAS,EAET,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,cAAc,CAAC;AActB,cAAM,WAAW;IACf,eAAe,CACb,QAAQ,EAAE,aAAa,EACvB,GAAG,GAAE;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAM,GAC/B,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC;IA0B7B,wBAAwB,CACtB,QAAQ,EAAE,aAAa,EACvB,WAAW,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAC7C,WAAW,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAC5C,IAAI;IA6CP,4BAA4B,CAC1B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GACX,IAAI;IA6CP,OAAO,CAAC,mBAAmB;IAuJ3B,OAAO,CAAC,oCAAoC;IA2J5C,OAAO,CAAC,wCAAwC;IA4BhD,8BAA8B,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAqBxD,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO;IAQtE,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAsB3C,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IA6B9C,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAK9C,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAMnC,8BAA8B,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAgC7D,qBAAqB,CACnB,QAAQ,EAAE,aAAa,EACvB,aAAa,CAAC,EAAE,aAAa,GAC5B,IAAI;IA6EP,gBAAgB,CACd,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GACxB,QAAQ,CAAC,iBAAiB,CAAC;CAY/B;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClusterUtils.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/ClusterUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;;;;AAI5C,wBAA6D;AAE7D;;;;GAIG;AACH,eAAO,MAAM,YAAY,qBAAsB,MAAM,UAepD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,MAAM,qBAAsB,MAAM,UAU9C,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,iBAAiB,+DAAgD,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @oncall web_perf_infra
|
|
9
9
|
*/
|
|
10
10
|
import type { AnyValue, LeakTraceElement, LeakTrace } from '../lib/Types';
|
|
11
|
-
|
|
11
|
+
type NameWeightMapType = Map<string | RegExp | number, number>;
|
|
12
12
|
interface ClusteringHeuristic {
|
|
13
13
|
edgeNameStopWords: NameWeightMapType;
|
|
14
14
|
nodeNameStopWords: NameWeightMapType;
|
|
@@ -28,7 +28,7 @@ interface DebugElementSimilarityStatsParams {
|
|
|
28
28
|
totalSum: number;
|
|
29
29
|
}
|
|
30
30
|
export declare const debugTraceElementSimilarityStats: ({ elementA, elementB, matchedSum, totalSum, }: DebugElementSimilarityStatsParams) => void;
|
|
31
|
-
|
|
31
|
+
type ClusteringUtilReturnType = {
|
|
32
32
|
isSimilarTrace: (t1: LeakTrace, t2: LeakTrace) => boolean;
|
|
33
33
|
};
|
|
34
34
|
declare const _default: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClusterUtilsHelper.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/ClusterUtilsHelper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,KAAK,EAAC,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AASxE,KAAK,iBAAiB,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;AAK/D,UAAU,mBAAmB;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,qBAAqB,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACrE,8BAA8B,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACrD;AAED,wBAAgB,QAAQ,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAQlD;AAED,UAAU,iCAAiC;IACzC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,gCAAgC,kDAK1C,iCAAiC,KAAG,IAatC,CAAC;AAMF,KAAK,wBAAwB,GAAG;IAC9B,cAAc,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC;CAC3D,CAAC;;;;AAqcF,wBAEE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClusteringHeuristics.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/ClusteringHeuristics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;;;;;;cAUqC,MAAM;cAAQ,MAAM;eAAS,MAAM;;;;AAL3E,wBAUE"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @format
|
|
8
8
|
* @oncall web_perf_infra
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
type ClusteredLeakTraces = Record<string, string>;
|
|
11
11
|
declare const _default: {
|
|
12
12
|
evaluateAdjustRandScore: (trueTraceIdLabelMap: ClusteredLeakTraces, predictedTraceIdLabelMap: ClusteredLeakTraces) => number;
|
|
13
13
|
vMeasure: (trueLabels: number[], predictedLabels: number[], beta?: number) => number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EvalutationMetric.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/EvalutationMetric.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqHH,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;;;;;;;;AA+ElD,wBAME"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiIterationSeqClustering.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/MultiIterationSeqClustering.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAA6B,SAAS,EAAC,MAAM,cAAc,CAAC;AASxE,KAAK,aAAa,GAAG;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC9C,OAAO,CAAC,eAAe,CAAmB;;IAQnC,OAAO,CACZ,aAAa,EAAE,SAAS,EAAE,EAC1B,OAAO,GAAE,aAAkB,GAC1B,SAAS,EAAE,EAAE;CAoEjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SequentialClustering.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/SequentialClustering.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAmB,SAAS,EAAC,MAAM,cAAc,CAAC;AAO9D,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAAC,4BAA4B,CAAmB;IACvD,OAAO,CAAC,eAAe,CAAmB;;IAQnC,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE;CAwB1D"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { IHeapNode, IHeapSnapshot, LeakTrace, LeakTracePathItem, Optional, TraceCluster, TraceClusterDiff, IClusterStrategy, ControlTreatmentClusterResult } from '../lib/Types';
|
|
11
11
|
import type { NormalizedTraceElement } from './TraceElement';
|
|
12
|
-
|
|
12
|
+
type AggregateNodeCb = (ids: Set<number>, snapshot: IHeapSnapshot, checkCb: (node: IHeapNode) => boolean, calculateCb: (node: IHeapNode) => number) => number;
|
|
13
13
|
export default class NormalizedTrace {
|
|
14
14
|
private trace;
|
|
15
15
|
private traceSummary;
|
|
@@ -37,7 +37,7 @@ export default class NormalizedTrace {
|
|
|
37
37
|
private static buildTraceToPathMap;
|
|
38
38
|
private static pushLeakPathToCluster;
|
|
39
39
|
private static initEmptyCluster;
|
|
40
|
-
static clusterControlTreatmentPaths(leakPathsFromControlRuns: LeakTracePathItem[][], controlSnapshots: IHeapSnapshot[],
|
|
40
|
+
static clusterControlTreatmentPaths(leakPathsFromControlRuns: LeakTracePathItem[][], controlSnapshots: IHeapSnapshot[], leakPathsFromTreatmentRuns: LeakTracePathItem[][], treatmentSnapshots: IHeapSnapshot[], aggregateDominatorMetrics: AggregateNodeCb, option?: {
|
|
41
41
|
strategy?: IClusterStrategy;
|
|
42
42
|
}): ControlTreatmentClusterResult;
|
|
43
43
|
static generateUnClassifiedClusters(paths: LeakTracePathItem[], snapshot: IHeapSnapshot, aggregateDominatorMetrics: AggregateNodeCb): TraceCluster[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceBucket.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/TraceBucket.ts"],"names":[],"mappings":"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"}
|
|
@@ -310,43 +310,64 @@ class NormalizedTrace {
|
|
|
310
310
|
leakedNodeIds: new Set(),
|
|
311
311
|
};
|
|
312
312
|
}
|
|
313
|
-
static clusterControlTreatmentPaths(leakPathsFromControlRuns, controlSnapshots,
|
|
313
|
+
static clusterControlTreatmentPaths(leakPathsFromControlRuns, controlSnapshots, leakPathsFromTreatmentRuns, treatmentSnapshots, aggregateDominatorMetrics, option = {}) {
|
|
314
314
|
const result = {
|
|
315
|
-
|
|
315
|
+
controlLikelyOrOnlyClusters: [],
|
|
316
316
|
treatmentOnlyClusters: [],
|
|
317
|
+
treatmentLikelyClusters: [],
|
|
317
318
|
hybridClusters: [],
|
|
318
319
|
};
|
|
319
320
|
Console_1.default.overwrite('Clustering leak traces');
|
|
320
321
|
const totalControlPaths = leakPathsFromControlRuns.reduce((count, leakPaths) => count + leakPaths.length, 0);
|
|
321
|
-
|
|
322
|
+
const totalTreatmentPaths = leakPathsFromTreatmentRuns.reduce((count, leakPaths) => count + leakPaths.length, 0);
|
|
323
|
+
if (totalControlPaths === 0 && totalTreatmentPaths === 0) {
|
|
322
324
|
Console_1.default.midLevel('No leaks found');
|
|
323
325
|
return result;
|
|
324
326
|
}
|
|
325
327
|
// sample paths if there are too many
|
|
326
328
|
const flattenedLeakPathsFromControlRuns = leakPathsFromControlRuns.reduce((arr, leakPaths) => [...arr, ...leakPaths], []);
|
|
327
329
|
const controlPaths = this.samplePaths(flattenedLeakPathsFromControlRuns);
|
|
328
|
-
|
|
330
|
+
const pathsForEachTreatmentGroup = leakPathsFromTreatmentRuns.map((treatmentPaths) => this.samplePaths(treatmentPaths));
|
|
329
331
|
// build control trace to control path map
|
|
330
332
|
const controlTraceToPathMap = NormalizedTrace.buildTraceToPathMap(controlPaths);
|
|
331
333
|
const controlTraces = Array.from(controlTraceToPathMap.keys());
|
|
332
|
-
// build treatment trace to treatment path
|
|
333
|
-
|
|
334
|
-
|
|
334
|
+
// build treatment trace to treatment path maps
|
|
335
|
+
// we need to know the mapping to each treatment group
|
|
336
|
+
// to figure out if a trace cluster contains traces from all treatment groups
|
|
337
|
+
const treatmentTraceToPathMaps = pathsForEachTreatmentGroup.map(treatmentPaths => NormalizedTrace.buildTraceToPathMap(treatmentPaths));
|
|
338
|
+
const treatmentTraceToPathMap = new Map();
|
|
339
|
+
const treatmentTraces = [];
|
|
340
|
+
for (const map of treatmentTraceToPathMaps) {
|
|
341
|
+
for (const [key, value] of map.entries()) {
|
|
342
|
+
treatmentTraceToPathMap.set(key, value);
|
|
343
|
+
treatmentTraces.push(key);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
335
346
|
// cluster traces from both the control group and the treatment group
|
|
336
347
|
const { allClusters } = NormalizedTrace.diffTraces([...controlTraces, ...treatmentTraces], [], option);
|
|
337
|
-
// pick one of the control heap snapshots
|
|
348
|
+
// pick one of the control and treatment heap snapshots
|
|
338
349
|
const controlSnapshot = controlSnapshots[0];
|
|
350
|
+
const treatmentSnapshot = treatmentSnapshots[0];
|
|
339
351
|
// construct TraceCluster from clustering result
|
|
340
352
|
allClusters.forEach((traces) => {
|
|
341
353
|
var _a, _b;
|
|
342
354
|
const controlCluster = NormalizedTrace.initEmptyCluster(controlSnapshot);
|
|
343
355
|
const treatmentCluster = NormalizedTrace.initEmptyCluster(treatmentSnapshot);
|
|
356
|
+
// a set containing each the treatment group that
|
|
357
|
+
// has at least one trace in this cluster
|
|
358
|
+
const treatmentSetWithClusterTrace = new Set();
|
|
344
359
|
for (const trace of traces) {
|
|
345
360
|
const normalizedTrace = trace;
|
|
346
361
|
if (controlTraceToPathMap.has(normalizedTrace)) {
|
|
347
362
|
NormalizedTrace.pushLeakPathToCluster(controlTraceToPathMap, normalizedTrace, controlCluster);
|
|
348
363
|
}
|
|
349
364
|
else {
|
|
365
|
+
for (let i = 0; i < treatmentTraceToPathMaps.length; ++i) {
|
|
366
|
+
if (treatmentTraceToPathMaps[i].has(normalizedTrace)) {
|
|
367
|
+
treatmentSetWithClusterTrace.add(i);
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
350
371
|
NormalizedTrace.pushLeakPathToCluster(treatmentTraceToPathMap, normalizedTrace, treatmentCluster);
|
|
351
372
|
}
|
|
352
373
|
}
|
|
@@ -360,11 +381,19 @@ class NormalizedTrace {
|
|
|
360
381
|
if (treatmentClusterSize > 0) {
|
|
361
382
|
this.calculateClusterRetainedSize(treatmentCluster, treatmentSnapshot, aggregateDominatorMetrics);
|
|
362
383
|
}
|
|
363
|
-
if (controlClusterSize === 0
|
|
384
|
+
if (controlClusterSize === 0 &&
|
|
385
|
+
treatmentSetWithClusterTrace.size === leakPathsFromTreatmentRuns.length) {
|
|
386
|
+
// only when the leak cluster consists of traces from all treatment groups
|
|
364
387
|
result.treatmentOnlyClusters.push(treatmentCluster);
|
|
365
388
|
}
|
|
389
|
+
else if (controlClusterSize === 0) {
|
|
390
|
+
// when the leak cluster consists of traces from
|
|
391
|
+
// some but not all of treatment groups
|
|
392
|
+
result.treatmentLikelyClusters.push(treatmentCluster);
|
|
393
|
+
}
|
|
366
394
|
else if (treatmentClusterSize === 0) {
|
|
367
|
-
|
|
395
|
+
// when the leak cluster consists of traces from any of the control groups
|
|
396
|
+
result.controlLikelyOrOnlyClusters.push(controlCluster);
|
|
368
397
|
}
|
|
369
398
|
else {
|
|
370
399
|
result.hybridClusters.push({
|
|
@@ -374,7 +403,8 @@ class NormalizedTrace {
|
|
|
374
403
|
}
|
|
375
404
|
});
|
|
376
405
|
result.treatmentOnlyClusters.sort((c1, c2) => { var _a, _b; return ((_a = c2.retainedSize) !== null && _a !== void 0 ? _a : 0) - ((_b = c1.retainedSize) !== null && _b !== void 0 ? _b : 0); });
|
|
377
|
-
result.
|
|
406
|
+
result.treatmentLikelyClusters.sort((c1, c2) => { var _a, _b; return ((_a = c2.retainedSize) !== null && _a !== void 0 ? _a : 0) - ((_b = c1.retainedSize) !== null && _b !== void 0 ? _b : 0); });
|
|
407
|
+
result.controlLikelyOrOnlyClusters.sort((c1, c2) => { var _a, _b; return ((_a = c2.retainedSize) !== null && _a !== void 0 ? _a : 0) - ((_b = c1.retainedSize) !== null && _b !== void 0 ? _b : 0); });
|
|
378
408
|
result.hybridClusters.sort((g1, g2) => {
|
|
379
409
|
var _a, _b, _c, _d;
|
|
380
410
|
return ((_a = g2.control.retainedSize) !== null && _a !== void 0 ? _a : 0) +
|
|
@@ -74,5 +74,5 @@ export declare class EdgeRecord implements IHeapEdge {
|
|
|
74
74
|
set fromNode(s: IHeapNode);
|
|
75
75
|
get fromNode(): IHeapNode;
|
|
76
76
|
}
|
|
77
|
-
export
|
|
77
|
+
export type NormalizedTraceElement = NodeRecord | EdgeRecord;
|
|
78
78
|
//# sourceMappingURL=TraceElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceElement.d.ts","sourceRoot":"","sources":["../../src/trace-cluster/TraceElement.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,21 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.EdgeRecord = exports.NodeRecord = void 0;
|
|
16
16
|
const Utils_1 = __importDefault(require("../lib/Utils"));
|
|
17
17
|
class NodeRecord {
|
|
18
|
-
constructor(node) {
|
|
19
|
-
this.kind = 'node';
|
|
20
|
-
this.name = this.extraceNodeName(node);
|
|
21
|
-
this.type = node.type;
|
|
22
|
-
this.id = node.id;
|
|
23
|
-
this.is_detached = node.is_detached;
|
|
24
|
-
this.detachState = node.detachState;
|
|
25
|
-
this.attributes = node.attributes;
|
|
26
|
-
this.self_size = node.self_size;
|
|
27
|
-
this.edge_count = node.edge_count;
|
|
28
|
-
this.trace_node_id = node.trace_node_id;
|
|
29
|
-
this.nodeIndex = node.nodeIndex;
|
|
30
|
-
this.retainedSize = node.retainedSize;
|
|
31
|
-
this.highlight = node.highlight;
|
|
32
|
-
}
|
|
33
18
|
markAsDetached() {
|
|
34
19
|
throw new Error('NodeRecord.markAsDetached not callable.');
|
|
35
20
|
}
|
|
@@ -168,6 +153,21 @@ class NodeRecord {
|
|
|
168
153
|
};
|
|
169
154
|
return JSON.stringify(rep, ...args);
|
|
170
155
|
}
|
|
156
|
+
constructor(node) {
|
|
157
|
+
this.kind = 'node';
|
|
158
|
+
this.name = this.extraceNodeName(node);
|
|
159
|
+
this.type = node.type;
|
|
160
|
+
this.id = node.id;
|
|
161
|
+
this.is_detached = node.is_detached;
|
|
162
|
+
this.detachState = node.detachState;
|
|
163
|
+
this.attributes = node.attributes;
|
|
164
|
+
this.self_size = node.self_size;
|
|
165
|
+
this.edge_count = node.edge_count;
|
|
166
|
+
this.trace_node_id = node.trace_node_id;
|
|
167
|
+
this.nodeIndex = node.nodeIndex;
|
|
168
|
+
this.retainedSize = node.retainedSize;
|
|
169
|
+
this.highlight = node.highlight;
|
|
170
|
+
}
|
|
171
171
|
extraceNodeName(node) {
|
|
172
172
|
// deserialized node may not have snapshot info
|
|
173
173
|
if (!node.snapshot || !Utils_1.default.isFiberNode(node)) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MLTraceSimilarityStrategy.d.ts","sourceRoot":"","sources":["../../../src/trace-cluster/strategies/MLTraceSimilarityStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAK5E,MAAM,CAAC,OAAO,OAAO,yBAA0B,YAAW,gBAAgB;IACjE,UAAU,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,SAAS;IA6BxD,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;CAkBrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceAsClusterStrategy.d.ts","sourceRoot":"","sources":["../../../src/trace-cluster/strategies/TraceAsClusterStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAI5E,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,gBAAgB;IAC9D,UAAU,CACf,SAAS,EAAE,SAAS,EAAE,EACtB,cAAc,EAAE,SAAS,EAAE,GAC1B,SAAS;IAkBZ,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO;CAG7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceSimilarityStrategy.d.ts","sourceRoot":"","sources":["../../../src/trace-cluster/strategies/TraceSimilarityStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAM5E,MAAM,CAAC,OAAO,OAAO,uBAAwB,YAAW,gBAAgB;IAC/D,UAAU,CACf,SAAS,EAAE,SAAS,EAAE,EACtB,cAAc,EAAE,SAAS,EAAE,GAC1B,SAAS;IAkDZ,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO;CAG7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DistanceMatrix.d.ts","sourceRoot":"","sources":["../../../../src/trace-cluster/strategies/machine-learning/DistanceMatrix.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2BH,eAAO,MAAM,QAAQ,WAAY,OAAO,MAAM,EAAE,MAAM,CAAC,EAAE,iBA6BxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HAC.d.ts","sourceRoot":"","sources":["../../../../src/trace-cluster/strategies/machine-learning/HAC.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH;;;;;GAKG;AACH,eAAO,MAAM,OAAO,UACX,MAAM,2BACY,YAAY,wBACf,MAAM,2BA4G7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ngram.d.ts","sourceRoot":"","sources":["../../../../src/trace-cluster/strategies/machine-learning/Ngram.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAS/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TfidfVectorizer.d.ts","sourceRoot":"","sources":["../../../../src/trace-cluster/strategies/machine-learning/TfidfVectorizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,UAAU,oBAAoB;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAuB;IACzD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAuB;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBAErB,EAAC,YAAY,EAAE,KAAK,EAAC,EAAE,oBAAoB;IAKvD,aAAa;IAUb,QAAQ,CAAC,IAAI,EAAE,MAAM;IAKrB,eAAe,CAAC,kBAAkB,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAcvE,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,EAAE,EAAE;IAoB/C,KAAK;IAiBL;;;;SAIK;IACL,MAAM;IAUN,WAAW;IAwCX,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAI9D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAK9B"}
|