hiperf_txt_parser 1.0.3 → 1.0.5
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/backtrace.d.ts +1 -1
- package/dist/backtrace.js +18 -1
- package/dist/parser.js +6 -3
- package/package.json +1 -1
package/dist/backtrace.d.ts
CHANGED
|
@@ -10,4 +10,4 @@ export declare function toBackTraceStack(sample: RecordSample): string;
|
|
|
10
10
|
* 批量将 PerfData 中所有 RecordSample 转为 hstack 可解析栈。
|
|
11
11
|
* 返回数组长度与 recordSamples 一致,元素顺序一一对应。
|
|
12
12
|
*/
|
|
13
|
-
export declare function toBackTraceStacks(data: PerfData):
|
|
13
|
+
export declare function toBackTraceStacks(data: PerfData): PerfData;
|
package/dist/backtrace.js
CHANGED
|
@@ -18,6 +18,7 @@ export function toBackTraceStack(sample) {
|
|
|
18
18
|
const urlInfo = m[3].trim();
|
|
19
19
|
out.push(`#${index} at ${funcName} (${urlInfo})`);
|
|
20
20
|
}
|
|
21
|
+
console.info(`[hiperf_txt_parser] toBackTraceStack user stacks: ${out.length}/${frames.length}`);
|
|
21
22
|
return out.join("\n");
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
@@ -25,5 +26,21 @@ export function toBackTraceStack(sample) {
|
|
|
25
26
|
* 返回数组长度与 recordSamples 一致,元素顺序一一对应。
|
|
26
27
|
*/
|
|
27
28
|
export function toBackTraceStacks(data) {
|
|
28
|
-
|
|
29
|
+
const recordSamples = data.recordSamples.map((sample) => {
|
|
30
|
+
const backtrace = toBackTraceStack(sample);
|
|
31
|
+
if (!sample.callchainFrames) {
|
|
32
|
+
return sample;
|
|
33
|
+
}
|
|
34
|
+
const frameLines = backtrace ? backtrace.split("\n") : [];
|
|
35
|
+
return {
|
|
36
|
+
...sample,
|
|
37
|
+
callchainFrames: {
|
|
38
|
+
...sample.callchainFrames,
|
|
39
|
+
frames: frameLines,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
const nonEmpty = recordSamples.filter((sample) => (sample.callchainFrames?.frames.length ?? 0) > 0).length;
|
|
44
|
+
console.info(`[hiperf_txt_parser] toBackTraceStacks processed recordSamples: ${data.recordSamples.length}, non-empty user stacks: ${nonEmpty}`);
|
|
45
|
+
return { recordSamples };
|
|
29
46
|
}
|
package/dist/parser.js
CHANGED
|
@@ -255,13 +255,16 @@ export function parsePerfData(text) {
|
|
|
255
255
|
// 跳过无法解析的块
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
|
+
console.info(`[hiperf_txt_parser] parsePerfData parsed recordSamples: ${recordSamples.length}`);
|
|
258
259
|
return { recordSamples };
|
|
259
260
|
}
|
|
260
261
|
/**
|
|
261
262
|
* 按 tgid 过滤 RecordSample(当前以 pid 字段作为 tgid)
|
|
262
263
|
*/
|
|
263
264
|
export function filterByTgid(data, tgid) {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
265
|
+
const before = data.recordSamples.length;
|
|
266
|
+
const afterSamples = data.recordSamples.filter((sample) => sample.pid === tgid);
|
|
267
|
+
const after = afterSamples.length;
|
|
268
|
+
console.info(`[hiperf_txt_parser] filterByTgid tgid=${tgid}, recordSamples: ${before} -> ${after}`);
|
|
269
|
+
return { recordSamples: afterSamples };
|
|
267
270
|
}
|