snapshot-checker 0.6.3 → 0.7.3
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/README.md +209 -15
- package/dist/commands/forkall.d.ts.map +1 -1
- package/dist/commands/forkall.js +23 -16
- package/dist/commands/forkall.js.map +1 -1
- package/dist/commands/report-user.d.ts +25 -0
- package/dist/commands/report-user.d.ts.map +1 -0
- package/dist/commands/report-user.js +17 -0
- package/dist/commands/report-user.js.map +1 -0
- package/dist/commands/report.d.ts +1 -26
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +6 -425
- package/dist/commands/report.js.map +1 -1
- package/dist/demos/timeout-demo.d.ts.map +1 -1
- package/dist/demos/timeout-demo.js +1 -1
- package/dist/demos/timeout-demo.js.map +1 -1
- package/dist/src/bin.d.ts +3 -0
- package/dist/src/bin.d.ts.map +1 -0
- package/dist/src/bin.js +57 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/cli.js +33 -55
- package/dist/src/cli.js.map +1 -1
- package/dist/src/executor.d.ts +5 -5
- package/dist/src/executor.d.ts.map +1 -1
- package/dist/src/executor.js +3 -3
- package/dist/src/executor.js.map +1 -1
- package/dist/src/{groupSpecs.d.ts → group_specs.d.ts} +2 -2
- package/dist/src/group_specs.d.ts.map +1 -0
- package/dist/src/{groupSpecs.js → group_specs.js} +1 -1
- package/dist/src/group_specs.js.map +1 -0
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/format.d.ts +30 -0
- package/dist/src/lib/format.d.ts.map +1 -0
- package/dist/src/lib/format.js +76 -0
- package/dist/src/lib/format.js.map +1 -0
- package/dist/src/lib/{hostCommands.d.ts → host_commands.d.ts} +6 -1
- package/dist/src/lib/host_commands.d.ts.map +1 -0
- package/dist/src/lib/{hostCommands.js → host_commands.js} +9 -1
- package/dist/src/lib/host_commands.js.map +1 -0
- package/dist/src/lib/perf_decode.d.ts +25 -0
- package/dist/src/lib/perf_decode.d.ts.map +1 -0
- package/dist/src/lib/perf_decode.js +90 -0
- package/dist/src/lib/perf_decode.js.map +1 -0
- package/dist/src/lib/pipeline.d.ts +108 -0
- package/dist/src/lib/pipeline.d.ts.map +1 -0
- package/dist/src/lib/pipeline.js +294 -0
- package/dist/src/lib/pipeline.js.map +1 -0
- package/dist/src/lib/preflight.d.ts +2 -0
- package/dist/src/lib/preflight.d.ts.map +1 -0
- package/dist/src/lib/preflight.js +45 -0
- package/dist/src/lib/preflight.js.map +1 -0
- package/dist/src/lib/presets.d.ts +46 -27
- package/dist/src/lib/presets.d.ts.map +1 -1
- package/dist/src/lib/presets.js +187 -216
- package/dist/src/lib/presets.js.map +1 -1
- package/dist/src/lib/programmatic.d.ts +30 -0
- package/dist/src/lib/programmatic.d.ts.map +1 -0
- package/dist/src/lib/programmatic.js +40 -0
- package/dist/src/lib/programmatic.js.map +1 -0
- package/dist/src/lib/report_scenario.d.ts +50 -0
- package/dist/src/lib/report_scenario.d.ts.map +1 -0
- package/dist/src/lib/report_scenario.js +497 -0
- package/dist/src/lib/report_scenario.js.map +1 -0
- package/dist/src/lib/scenario.d.ts +17 -3
- package/dist/src/lib/scenario.d.ts.map +1 -1
- package/dist/src/lib/scenario.js +34 -8
- package/dist/src/lib/scenario.js.map +1 -1
- package/dist/src/lib/version.d.ts +12 -0
- package/dist/src/lib/version.d.ts.map +1 -0
- package/dist/src/lib/version.js +51 -0
- package/dist/src/lib/version.js.map +1 -0
- package/dist/src/logger.d.ts +31 -1
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +182 -16
- package/dist/src/logger.js.map +1 -1
- package/dist/src/{runCommand.d.ts → run_command.d.ts} +1 -1
- package/dist/src/run_command.d.ts.map +1 -0
- package/dist/src/{runCommand.js → run_command.js} +5 -6
- package/dist/src/run_command.js.map +1 -0
- package/dist/src/{runGroups.d.ts → run_groups.d.ts} +12 -3
- package/dist/src/run_groups.d.ts.map +1 -0
- package/dist/src/{runGroups.js → run_groups.js} +28 -13
- package/dist/src/run_groups.js.map +1 -0
- package/dist/src/runners/{backgroundExecutor.d.ts → background_executor.d.ts} +3 -3
- package/dist/src/runners/background_executor.d.ts.map +1 -0
- package/dist/src/runners/{backgroundExecutor.js → background_executor.js} +3 -3
- package/dist/src/runners/background_executor.js.map +1 -0
- package/dist/src/runners/{builtinRunner.d.ts → builtin_runner.d.ts} +1 -1
- package/dist/src/runners/builtin_runner.d.ts.map +1 -0
- package/dist/src/runners/{builtinRunner.js → builtin_runner.js} +1 -1
- package/dist/src/runners/builtin_runner.js.map +1 -0
- package/dist/src/runners/{embedRunner.d.ts → embed_runner.d.ts} +1 -1
- package/dist/src/runners/embed_runner.d.ts.map +1 -0
- package/dist/src/runners/{embedRunner.js → embed_runner.js} +2 -2
- package/dist/src/runners/{embedRunner.js.map → embed_runner.js.map} +1 -1
- package/dist/src/runners/index.d.ts +5 -5
- package/dist/src/runners/index.d.ts.map +1 -1
- package/dist/src/runners/index.js +4 -4
- package/dist/src/runners/index.js.map +1 -1
- package/dist/src/runners/{platformShellExecutor.d.ts → platform_shell_executor.d.ts} +1 -1
- package/dist/src/runners/platform_shell_executor.d.ts.map +1 -0
- package/dist/src/runners/{platformShellExecutor.js → platform_shell_executor.js} +2 -2
- package/dist/src/runners/platform_shell_executor.js.map +1 -0
- package/dist/src/runners/{shellRunner.d.ts → shell_runner.d.ts} +1 -1
- package/dist/src/runners/shell_runner.d.ts.map +1 -0
- package/dist/src/runners/{shellRunner.js → shell_runner.js} +11 -16
- package/dist/src/runners/shell_runner.js.map +1 -0
- package/dist/src/runners/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +2 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +13 -4
- package/dist/src/groupSpecs.d.ts.map +0 -1
- package/dist/src/groupSpecs.js.map +0 -1
- package/dist/src/lib/hostCommands.d.ts.map +0 -1
- package/dist/src/lib/hostCommands.js.map +0 -1
- package/dist/src/runCommand.d.ts.map +0 -1
- package/dist/src/runCommand.js.map +0 -1
- package/dist/src/runGroups.d.ts.map +0 -1
- package/dist/src/runGroups.js.map +0 -1
- package/dist/src/runners/backgroundExecutor.d.ts.map +0 -1
- package/dist/src/runners/backgroundExecutor.js.map +0 -1
- package/dist/src/runners/builtinRunner.d.ts.map +0 -1
- package/dist/src/runners/builtinRunner.js.map +0 -1
- package/dist/src/runners/embedRunner.d.ts.map +0 -1
- package/dist/src/runners/platformShellExecutor.d.ts.map +0 -1
- package/dist/src/runners/platformShellExecutor.js.map +0 -1
- package/dist/src/runners/shellRunner.d.ts.map +0 -1
- package/dist/src/runners/shellRunner.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perf_decode.js","sourceRoot":"","sources":["../../../src/lib/perf_decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { PerfData } from "hiperf_txt_parser";
|
|
2
|
+
import { type TraceEventFormat } from "hmtrace-parser";
|
|
3
|
+
import { type TraceFromSource, type TraceTimeThresholdOpt } from "./perf_decode.js";
|
|
4
|
+
import { type TraceFormatAutoConfig } from "./format.js";
|
|
5
|
+
export type PipelineStageResult = {
|
|
6
|
+
status: "continue";
|
|
7
|
+
} | {
|
|
8
|
+
status: "error";
|
|
9
|
+
message: string;
|
|
10
|
+
} | {
|
|
11
|
+
status: "shortCircuit";
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
/** 单个 pipeline 阶段:读写在 {@link TCtx} 上,通过返回值控制是否继续 */
|
|
15
|
+
export type PipelineStage<TCtx> = {
|
|
16
|
+
name: string;
|
|
17
|
+
run: (ctx: TCtx) => Promise<PipelineStageResult> | PipelineStageResult;
|
|
18
|
+
};
|
|
19
|
+
/** {@link runPipeline} 的最终结果;`shortCircuit` 表示中性中止(非错误) */
|
|
20
|
+
export type PipelineRunResult = {
|
|
21
|
+
ok: true;
|
|
22
|
+
} | {
|
|
23
|
+
ok: false;
|
|
24
|
+
error: true;
|
|
25
|
+
message?: string;
|
|
26
|
+
} | {
|
|
27
|
+
ok: false;
|
|
28
|
+
shortCircuit: true;
|
|
29
|
+
message: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* 按序执行阶段;遇 `error` 或 `shortCircuit` 时立即返回。
|
|
33
|
+
* stage 流转用 debug 而非 consola trace,避免 trace 级别自动附带 `at file:line` 调用栈。
|
|
34
|
+
*/
|
|
35
|
+
export declare function runPipeline<TCtx>(ctx: TCtx, stages: PipelineStage<TCtx>[], options?: {
|
|
36
|
+
logPrefix?: string;
|
|
37
|
+
}): Promise<PipelineRunResult>;
|
|
38
|
+
/** 解码 pipeline 上下文;输入项由调用方传入,中间态由各 stage 依次填充 */
|
|
39
|
+
export type HiperfDecodePipelineContext = {
|
|
40
|
+
inputFilePath: string;
|
|
41
|
+
dumpStackTxt: string;
|
|
42
|
+
dumpStackJson: string;
|
|
43
|
+
dumpStackXlsx: string;
|
|
44
|
+
traceFormatProfile: string;
|
|
45
|
+
stageName: string;
|
|
46
|
+
parseConcurrency: number;
|
|
47
|
+
skipDedupePerfData: boolean;
|
|
48
|
+
runBacktrackFS: boolean;
|
|
49
|
+
skipNonBacktrack: boolean;
|
|
50
|
+
dropFailedSamples: boolean;
|
|
51
|
+
traceFormatAuto?: TraceFormatAutoConfig;
|
|
52
|
+
workspaceDir: string;
|
|
53
|
+
traceFrom: TraceFromSource;
|
|
54
|
+
/** report `--trace-from-threshold`;未配置或 `traceFrom=hiperf` 时不校验对齐时间差 */
|
|
55
|
+
traceThresholdMs?: number;
|
|
56
|
+
/** report `--trace-from-threshold-opt`,默认 drop */
|
|
57
|
+
traceThresholdOpt?: TraceTimeThresholdOpt;
|
|
58
|
+
useParallel: boolean;
|
|
59
|
+
selectedProfile: string;
|
|
60
|
+
isAutoProfile: boolean;
|
|
61
|
+
autoFormats?: TraceEventFormat[];
|
|
62
|
+
perfData?: PerfData;
|
|
63
|
+
outputPaths?: string[];
|
|
64
|
+
};
|
|
65
|
+
/** 根据调用参数构造解码 pipeline 初始上下文 */
|
|
66
|
+
export declare function createHiperfDecodePipelineContext(input: {
|
|
67
|
+
inputFilePath: string;
|
|
68
|
+
dumpStackTxt: string;
|
|
69
|
+
dumpStackJson: string;
|
|
70
|
+
dumpStackXlsx: string;
|
|
71
|
+
traceFormatProfile: string;
|
|
72
|
+
stageName: string;
|
|
73
|
+
workspaceDir: string;
|
|
74
|
+
parseConcurrency?: number;
|
|
75
|
+
skipDedupePerfData?: boolean;
|
|
76
|
+
runBacktrackFS?: boolean;
|
|
77
|
+
skipNonBacktrack?: boolean;
|
|
78
|
+
dropFailedSamples?: boolean;
|
|
79
|
+
traceFormatAuto?: TraceFormatAutoConfig;
|
|
80
|
+
traceFrom?: TraceFromSource;
|
|
81
|
+
traceThresholdMs?: number;
|
|
82
|
+
traceThresholdOpt?: TraceTimeThresholdOpt;
|
|
83
|
+
}): HiperfDecodePipelineContext;
|
|
84
|
+
/** 解码 pipeline 阶段列表(顺序固定,见文件顶部流程说明) */
|
|
85
|
+
export declare const HIPERF_DECODE_PIPELINE_STAGES: PipelineStage<HiperfDecodePipelineContext>[];
|
|
86
|
+
/** 执行完整解码 pipeline;成功返回 true,失败或 stage error 返回 false */
|
|
87
|
+
export declare function runHiperfDecodePipeline(input: Parameters<typeof createHiperfDecodePipelineContext>[0]): Promise<boolean>;
|
|
88
|
+
/** 过滤 pipeline 上下文 */
|
|
89
|
+
export type HiperfFilterPipelineContext = {
|
|
90
|
+
snapshotPerfFile: string;
|
|
91
|
+
targetTgid: number;
|
|
92
|
+
writeBacktraceStacks: boolean;
|
|
93
|
+
perfData?: PerfData;
|
|
94
|
+
};
|
|
95
|
+
/** 根据调用参数构造过滤 pipeline 初始上下文 */
|
|
96
|
+
export declare function createHiperfFilterPipelineContext(input: {
|
|
97
|
+
snapshotPerfFile: string;
|
|
98
|
+
targetTgid: number;
|
|
99
|
+
writeBacktraceStacks: boolean;
|
|
100
|
+
}): HiperfFilterPipelineContext;
|
|
101
|
+
/** 过滤 pipeline 阶段列表(顺序固定,见文件顶部流程说明) */
|
|
102
|
+
export declare const HIPERF_FILTER_PIPELINE_STAGES: PipelineStage<HiperfFilterPipelineContext>[];
|
|
103
|
+
/**
|
|
104
|
+
* 执行完整过滤 pipeline。
|
|
105
|
+
* 返回 {@link PipelineRunResult}:`shortCircuit` 供上层转为 BuiltinShortCircuitResult。
|
|
106
|
+
*/
|
|
107
|
+
export declare function runHiperfFilterPipeline(input: Parameters<typeof createHiperfFilterPipelineContext>[0]): Promise<PipelineRunResult>;
|
|
108
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/lib/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/** hiperf 文本 perf 数据的 pipeline 式处理(加载 → 解码/过滤 → 去重 → 写回) */
|
|
2
|
+
import { dedupePerfData, filterByTgid, loadPerfData, savePerfDataToExcel, savePerfDataToJson, savePerfDataToText, toBackTraceStacks, } from "hiperf_txt_parser";
|
|
3
|
+
import { backtrackFS, backtrackStrategyRls, resolveBacktrackStrategy, } from "hmtrace-parser";
|
|
4
|
+
import { decodePerfDataWithProfile } from "./perf_decode.js";
|
|
5
|
+
import { createModuleLogger } from "../logger.js";
|
|
6
|
+
const logger = createModuleLogger(import.meta.url);
|
|
7
|
+
import { AUTO_TRACE_FORMAT_PROFILE, fetchTraceEventFormatsFromDevice, resolveTraceFormatProfile, } from "./format.js";
|
|
8
|
+
/**
|
|
9
|
+
* 按序执行阶段;遇 `error` 或 `shortCircuit` 时立即返回。
|
|
10
|
+
* stage 流转用 debug 而非 consola trace,避免 trace 级别自动附带 `at file:line` 调用栈。
|
|
11
|
+
*/
|
|
12
|
+
export async function runPipeline(ctx, stages, options) {
|
|
13
|
+
const prefix = options?.logPrefix ?? "";
|
|
14
|
+
for (const stage of stages) {
|
|
15
|
+
logger.debug(`${prefix}pipeline → ${stage.name}`);
|
|
16
|
+
const result = await stage.run(ctx);
|
|
17
|
+
if (result.status === "continue") {
|
|
18
|
+
logger.debug(`${prefix}pipeline ← ${stage.name}`);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (result.status === "shortCircuit") {
|
|
22
|
+
logger.debug(`${prefix}pipeline ← ${stage.name} (shortCircuit)`);
|
|
23
|
+
return { ok: false, shortCircuit: true, message: result.message };
|
|
24
|
+
}
|
|
25
|
+
logger.debug(`${prefix}pipeline ← ${stage.name} (error)`);
|
|
26
|
+
return { ok: false, error: true, message: result.message };
|
|
27
|
+
}
|
|
28
|
+
return { ok: true };
|
|
29
|
+
}
|
|
30
|
+
function shouldUseParallelParse(workerCount) {
|
|
31
|
+
return workerCount > 1;
|
|
32
|
+
}
|
|
33
|
+
/** 根据调用参数构造解码 pipeline 初始上下文 */
|
|
34
|
+
export function createHiperfDecodePipelineContext(input) {
|
|
35
|
+
const parseConcurrency = input.parseConcurrency ?? 1;
|
|
36
|
+
return {
|
|
37
|
+
...input,
|
|
38
|
+
parseConcurrency,
|
|
39
|
+
skipDedupePerfData: input.skipDedupePerfData ?? false,
|
|
40
|
+
runBacktrackFS: input.runBacktrackFS ?? false,
|
|
41
|
+
skipNonBacktrack: input.skipNonBacktrack ?? false,
|
|
42
|
+
dropFailedSamples: input.dropFailedSamples ?? false,
|
|
43
|
+
traceFrom: input.traceFrom ?? "mix",
|
|
44
|
+
useParallel: shouldUseParallelParse(parseConcurrency),
|
|
45
|
+
selectedProfile: "",
|
|
46
|
+
isAutoProfile: false,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** 解析 `--trace-format-profile`,写入 `selectedProfile` / `isAutoProfile` */
|
|
50
|
+
const resolveProfileStage = {
|
|
51
|
+
name: "resolveProfile",
|
|
52
|
+
run(ctx) {
|
|
53
|
+
ctx.selectedProfile = resolveTraceFormatProfile(ctx.traceFormatProfile, {
|
|
54
|
+
stageName: ctx.stageName,
|
|
55
|
+
});
|
|
56
|
+
ctx.isAutoProfile = ctx.selectedProfile === AUTO_TRACE_FORMAT_PROFILE;
|
|
57
|
+
return { status: "continue" };
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
/** `auto` profile 时经 hdc 从设备 cat ftrace format,供 decodeTrace 传入 */
|
|
61
|
+
const prepareAutoFormatsStage = {
|
|
62
|
+
name: "prepareAutoFormats",
|
|
63
|
+
async run(ctx) {
|
|
64
|
+
if (!ctx.isAutoProfile) {
|
|
65
|
+
return { status: "continue" };
|
|
66
|
+
}
|
|
67
|
+
if (ctx.traceFormatAuto == null || ctx.traceFormatAuto.formatEntries.length === 0) {
|
|
68
|
+
return { status: "error", message: "profile=auto 需要 formatEntries" };
|
|
69
|
+
}
|
|
70
|
+
ctx.autoFormats = await fetchTraceEventFormatsFromDevice(ctx.traceFormatAuto);
|
|
71
|
+
logger.info(`[${ctx.stageName}] auto 已从设备读取 format: ${[
|
|
72
|
+
...new Set(ctx.traceFormatAuto.formatEntries.map((e) => e.formatPath)),
|
|
73
|
+
].join(", ")}`);
|
|
74
|
+
return { status: "continue" };
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
/** 从磁盘加载 hiperf 文本 perf,写入 `perfData`(`parseConcurrency>1` 时走 Worker) */
|
|
78
|
+
const loadPerfDataStage = {
|
|
79
|
+
name: "loadPerfData",
|
|
80
|
+
async run(ctx) {
|
|
81
|
+
ctx.perfData = ctx.useParallel
|
|
82
|
+
? await loadPerfData(ctx.inputFilePath, {
|
|
83
|
+
workerCount: ctx.parseConcurrency,
|
|
84
|
+
})
|
|
85
|
+
: await loadPerfData(ctx.inputFilePath);
|
|
86
|
+
return { status: "continue" };
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
/** 按 profile 解码 raw trace;hitrace/mix 时先预处理索引,再走 hiperf 并行 decode */
|
|
90
|
+
const decodeTraceStage = {
|
|
91
|
+
name: "decodeTrace",
|
|
92
|
+
async run(ctx) {
|
|
93
|
+
ctx.perfData = await decodePerfDataWithProfile({
|
|
94
|
+
perfData: ctx.perfData,
|
|
95
|
+
selectedProfile: ctx.selectedProfile,
|
|
96
|
+
formats: ctx.isAutoProfile ? ctx.autoFormats : undefined,
|
|
97
|
+
traceFrom: ctx.traceFrom,
|
|
98
|
+
workspaceDir: ctx.workspaceDir,
|
|
99
|
+
parseConcurrency: ctx.parseConcurrency,
|
|
100
|
+
dropFailedSamples: ctx.dropFailedSamples,
|
|
101
|
+
traceThresholdMs: ctx.traceThresholdMs,
|
|
102
|
+
traceThresholdOpt: ctx.traceThresholdOpt,
|
|
103
|
+
});
|
|
104
|
+
return { status: "continue" };
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* 可选:将 revoked 样本与 FS dump 样本配对回溯(`runBacktrackFS` 为 false 时跳过)。
|
|
109
|
+
* 输出 0 条时以 error 中止。
|
|
110
|
+
*/
|
|
111
|
+
const backtrackFSStage = {
|
|
112
|
+
name: "backtrackFS",
|
|
113
|
+
run(ctx) {
|
|
114
|
+
if (!ctx.runBacktrackFS) {
|
|
115
|
+
return { status: "continue" };
|
|
116
|
+
}
|
|
117
|
+
const parsed = ctx.perfData;
|
|
118
|
+
const [backtrackSamples] = backtrackFS(parsed, {
|
|
119
|
+
keepNonFsRevoked: !ctx.skipNonBacktrack,
|
|
120
|
+
backtrackStrategy: ctx.isAutoProfile
|
|
121
|
+
? backtrackStrategyRls
|
|
122
|
+
: resolveBacktrackStrategy(ctx.selectedProfile),
|
|
123
|
+
});
|
|
124
|
+
if (backtrackSamples.length === 0) {
|
|
125
|
+
return { status: "error", message: "backtrackFS 输出 0 条,中止" };
|
|
126
|
+
}
|
|
127
|
+
ctx.perfData = {
|
|
128
|
+
...parsed,
|
|
129
|
+
recordSamples: [...backtrackSamples],
|
|
130
|
+
};
|
|
131
|
+
return { status: "continue" };
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
/** 可选:按调用栈去重(`skipDedupePerfData` 为 true 时跳过) */
|
|
135
|
+
const dedupeStage = {
|
|
136
|
+
name: "dedupe",
|
|
137
|
+
run(ctx) {
|
|
138
|
+
if (ctx.skipDedupePerfData) {
|
|
139
|
+
return { status: "continue" };
|
|
140
|
+
}
|
|
141
|
+
ctx.perfData = dedupePerfData(ctx.perfData, {
|
|
142
|
+
onEnd: (s) => {
|
|
143
|
+
logger.info(`[${ctx.stageName}] dedupe in=${s.input} rem=${s.removed} out=${s.remaining}`);
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
return { status: "continue" };
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
/** 写 dump_stack json/txt/xlsx,结果路径写入 `outputPaths` */
|
|
150
|
+
const writeDecodeOutputsStage = {
|
|
151
|
+
name: "writeOutputs",
|
|
152
|
+
async run(ctx) {
|
|
153
|
+
const dedupedPerfData = ctx.perfData;
|
|
154
|
+
if (ctx.useParallel) {
|
|
155
|
+
await savePerfDataToJson(dedupedPerfData, {
|
|
156
|
+
outputPath: ctx.dumpStackJson,
|
|
157
|
+
workerCount: ctx.parseConcurrency,
|
|
158
|
+
});
|
|
159
|
+
await savePerfDataToText(dedupedPerfData, {
|
|
160
|
+
outputPath: ctx.dumpStackTxt,
|
|
161
|
+
workerCount: ctx.parseConcurrency,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
await savePerfDataToJson(dedupedPerfData, {
|
|
166
|
+
outputPath: ctx.dumpStackJson,
|
|
167
|
+
});
|
|
168
|
+
await savePerfDataToText(dedupedPerfData, {
|
|
169
|
+
outputPath: ctx.dumpStackTxt,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
const outputPaths = [ctx.dumpStackJson, ctx.dumpStackTxt];
|
|
173
|
+
if (dedupedPerfData.recordSamples.length === 0) {
|
|
174
|
+
logger.info(`[${ctx.stageName}] 无样本,跳过 xlsx`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
try {
|
|
178
|
+
await savePerfDataToExcel(dedupedPerfData, {
|
|
179
|
+
outputPath: ctx.dumpStackXlsx,
|
|
180
|
+
});
|
|
181
|
+
outputPaths.push(ctx.dumpStackXlsx);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
185
|
+
logger.warn(`[${ctx.stageName}] xlsx 跳过: ${message}`, error);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
ctx.outputPaths = outputPaths;
|
|
189
|
+
logger.info(`[${ctx.stageName}] 完成 profile=${ctx.selectedProfile} concurrency=${ctx.parseConcurrency} 输出=${outputPaths.join(",")}`);
|
|
190
|
+
return { status: "continue" };
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
/** 解码 pipeline 阶段列表(顺序固定,见文件顶部流程说明) */
|
|
194
|
+
export const HIPERF_DECODE_PIPELINE_STAGES = [
|
|
195
|
+
resolveProfileStage,
|
|
196
|
+
prepareAutoFormatsStage,
|
|
197
|
+
loadPerfDataStage,
|
|
198
|
+
decodeTraceStage,
|
|
199
|
+
backtrackFSStage,
|
|
200
|
+
dedupeStage,
|
|
201
|
+
writeDecodeOutputsStage,
|
|
202
|
+
];
|
|
203
|
+
/** 执行完整解码 pipeline;成功返回 true,失败或 stage error 返回 false */
|
|
204
|
+
export async function runHiperfDecodePipeline(input) {
|
|
205
|
+
const ctx = createHiperfDecodePipelineContext(input);
|
|
206
|
+
try {
|
|
207
|
+
const result = await runPipeline(ctx, HIPERF_DECODE_PIPELINE_STAGES, {
|
|
208
|
+
logPrefix: `[${ctx.stageName}] `,
|
|
209
|
+
});
|
|
210
|
+
if (!result.ok) {
|
|
211
|
+
if ("error" in result && result.error) {
|
|
212
|
+
logger.error(`[${ctx.stageName}] ${result.message ?? "处理失败"}`);
|
|
213
|
+
}
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
logger.error(`[${ctx.stageName}] 处理失败`, error);
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/** 根据调用参数构造过滤 pipeline 初始上下文 */
|
|
224
|
+
export function createHiperfFilterPipelineContext(input) {
|
|
225
|
+
return { ...input };
|
|
226
|
+
}
|
|
227
|
+
/** 从 `snapshotPerfFile` 加载 perf 文本 */
|
|
228
|
+
const loadFilterInputStage = {
|
|
229
|
+
name: "loadPerfData",
|
|
230
|
+
async run(ctx) {
|
|
231
|
+
ctx.perfData = await loadPerfData(ctx.snapshotPerfFile);
|
|
232
|
+
return { status: "continue" };
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
/** 仅保留 `targetTgid` 对应样本;无样本时 shortCircuit(无风险,跳过后续 analysis) */
|
|
236
|
+
const filterByTgidStage = {
|
|
237
|
+
name: "filterByTgid",
|
|
238
|
+
run(ctx) {
|
|
239
|
+
const filtered = filterByTgid(ctx.perfData, ctx.targetTgid);
|
|
240
|
+
if (filtered.recordSamples.length === 0) {
|
|
241
|
+
return {
|
|
242
|
+
status: "shortCircuit",
|
|
243
|
+
message: `[过滤] tgid=${ctx.targetTgid} 无样本,无风险,跳过后续`,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
ctx.perfData = filtered;
|
|
247
|
+
return { status: "continue" };
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
/** 可选:将样本转为仅含回溯栈的文本格式(`writeBacktraceStacks` 为 true 时) */
|
|
251
|
+
const optionalBacktraceStacksStage = {
|
|
252
|
+
name: "toBackTraceStacks",
|
|
253
|
+
run(ctx) {
|
|
254
|
+
if (ctx.writeBacktraceStacks) {
|
|
255
|
+
ctx.perfData = toBackTraceStacks(ctx.perfData);
|
|
256
|
+
}
|
|
257
|
+
return { status: "continue" };
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
/** 将过滤后的 perf 写回 `snapshotPerfFile` */
|
|
261
|
+
const writeFilterOutputStage = {
|
|
262
|
+
name: "writeFilteredPerf",
|
|
263
|
+
async run(ctx) {
|
|
264
|
+
await savePerfDataToText(ctx.perfData, {
|
|
265
|
+
outputPath: ctx.snapshotPerfFile,
|
|
266
|
+
});
|
|
267
|
+
logger.info(`[过滤] 已写回: ${ctx.snapshotPerfFile}`);
|
|
268
|
+
return { status: "continue" };
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
/** 过滤 pipeline 阶段列表(顺序固定,见文件顶部流程说明) */
|
|
272
|
+
export const HIPERF_FILTER_PIPELINE_STAGES = [
|
|
273
|
+
loadFilterInputStage,
|
|
274
|
+
filterByTgidStage,
|
|
275
|
+
optionalBacktraceStacksStage,
|
|
276
|
+
writeFilterOutputStage,
|
|
277
|
+
];
|
|
278
|
+
/**
|
|
279
|
+
* 执行完整过滤 pipeline。
|
|
280
|
+
* 返回 {@link PipelineRunResult}:`shortCircuit` 供上层转为 BuiltinShortCircuitResult。
|
|
281
|
+
*/
|
|
282
|
+
export async function runHiperfFilterPipeline(input) {
|
|
283
|
+
const ctx = createHiperfFilterPipelineContext(input);
|
|
284
|
+
try {
|
|
285
|
+
return await runPipeline(ctx, HIPERF_FILTER_PIPELINE_STAGES, {
|
|
286
|
+
logPrefix: "[过滤] ",
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
logger.error(`[过滤] 失败: ${input.snapshotPerfFile}`, error);
|
|
291
|
+
return { ok: false, error: true };
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/lib/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../../src/lib/preflight.ts"],"names":[],"mappings":"AAkCA,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,IAAI,CAiB/E"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
function isPkgBinaryRuntime() {
|
|
5
|
+
return Boolean(process.pkg);
|
|
6
|
+
}
|
|
7
|
+
function hasCommand(command) {
|
|
8
|
+
const checker = process.platform === "win32" ? "where" : "command";
|
|
9
|
+
const args = process.platform === "win32" ? [command] : ["-v", command];
|
|
10
|
+
const result = spawnSync(checker, args, {
|
|
11
|
+
stdio: "ignore",
|
|
12
|
+
shell: process.platform !== "win32",
|
|
13
|
+
});
|
|
14
|
+
return result.status === 0;
|
|
15
|
+
}
|
|
16
|
+
function parseArgValue(flag, argv) {
|
|
17
|
+
const idx = argv.findIndex((item) => item === flag);
|
|
18
|
+
if (idx < 0) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
return argv[idx + 1];
|
|
22
|
+
}
|
|
23
|
+
function shouldCheckExternalTools(argv) {
|
|
24
|
+
if (argv.length === 0) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const command = argv[0];
|
|
28
|
+
return command === "report" || command === "report_plugin";
|
|
29
|
+
}
|
|
30
|
+
export function runBinaryPreflight(argv = process.argv.slice(2)) {
|
|
31
|
+
if (!isPkgBinaryRuntime()) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!shouldCheckExternalTools(argv)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!hasCommand("hdc")) {
|
|
38
|
+
throw new Error("PRECHECK_HDC_MISSING: 未找到 hdc,请先安装并加入 PATH。");
|
|
39
|
+
}
|
|
40
|
+
const hstackToolPath = parseArgValue("--hstack-tool-path", argv);
|
|
41
|
+
if (hstackToolPath && !existsSync(path.normalize(hstackToolPath))) {
|
|
42
|
+
throw new Error(`PRECHECK_HSTACK_PATH_INVALID: hstack 路径不存在: ${hstackToolPath}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/lib/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,SAAS,kBAAkB;IACzB,OAAO,OAAO,CAAE,OAA8C,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACtC,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAAc;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAc;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,eAAe,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,cAAc,GAAG,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,cAAc,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,+CAA+C,cAAc,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
|
|
@@ -1,32 +1,18 @@
|
|
|
1
1
|
/** forkall / report 等场景复用的命令组拼装与 perf 解码辅助 */
|
|
2
2
|
import { type HdcCli } from "./hdc.js";
|
|
3
3
|
import type { CommandDef } from "../types.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
/** `--trace-format-profile` 选项说明(可选值来自 hmtrace-parser {@link getTraceEventFormatProfiles} + auto) */
|
|
8
|
-
export declare const TRACE_FORMAT_PROFILE_CLI_DESCRIPTION: string;
|
|
9
|
-
/**
|
|
10
|
-
* 将用户传入的 profile 规范为 hmtrace-parser 已登记名或 `auto`;未知时回退 `default`。
|
|
11
|
-
* 与 {@link getTraceEventFormats} 的回退语义一致,并供 {@link backtrackFS} 使用同一 profile 名。
|
|
12
|
-
*/
|
|
13
|
-
export declare function resolveTraceFormatProfile(traceFormatProfile: string, options?: {
|
|
14
|
-
stageName?: string;
|
|
15
|
-
}): string;
|
|
16
|
-
/** 按 ftrace format 路径选择字段字典变换(auto profile 用) */
|
|
17
|
-
export declare function fieldDictTransformForFormatPath(formatPath: string): import("hiperf_txt_parser").FieldDictTransformFn;
|
|
18
|
-
export type TraceFormatAutoConfig = {
|
|
19
|
-
hdcCli: HdcCli;
|
|
20
|
-
formatPaths: readonly string[];
|
|
21
|
-
/** 测试注入:替代 `executeOne` + {@link HdcCli.shell} */
|
|
22
|
-
runShell?: (run: string) => Promise<string>;
|
|
23
|
-
};
|
|
24
|
-
/** 经 hdc `shell cat` 拉取各 format 路径并组装 {@link TraceEventFormat} 列表 */
|
|
25
|
-
export declare function fetchTraceEventFormatsFromDevice(config: TraceFormatAutoConfig): Promise<TraceEventFormat[]>;
|
|
4
|
+
import type { TraceFormatAutoConfig } from "./format.js";
|
|
5
|
+
import type { TraceFromSource, TraceTimeThresholdOpt } from "./perf_decode.js";
|
|
6
|
+
export { AUTO_TRACE_FORMAT_PROFILE, TRACE_FORMAT_PROFILE_CLI_DESCRIPTION, resolveTraceFormatProfile, fetchTraceEventFormatsFromDevice, resolveTracingEventPermissionPath, type TraceFormatAutoConfig, type TraceFormatAutoEntry, } from "./format.js";
|
|
26
7
|
/** 解析全局 `--parse-concurrency` 或编程式 `applyOptions` 传入值;无效时抛错,缺省为 1。 */
|
|
27
8
|
export declare function resolveParseConcurrency(raw: unknown): number;
|
|
28
|
-
/**
|
|
29
|
-
export declare function
|
|
9
|
+
/** 从 `bm dump -n <bundleName>` 输出解析 debug 字段;无法解析时返回 `null`。 */
|
|
10
|
+
export declare function parseBundleIsDebugFromBmDump(text: string): boolean | null;
|
|
11
|
+
/** init 阶段:通过 `bm dump -n` 校验 bundleName 是否为 debug 应用;非 debug 时 warning。 */
|
|
12
|
+
export declare function buildBundleDebugCheckCommands(input: {
|
|
13
|
+
bundleName: string;
|
|
14
|
+
hdc?: HdcCli;
|
|
15
|
+
}): CommandDef[];
|
|
30
16
|
export declare function buildCommonInitEnvGroup(input: {
|
|
31
17
|
app: string;
|
|
32
18
|
snapshotLogFile: string;
|
|
@@ -43,12 +29,34 @@ export declare function buildCommonCollectGroup(input: {
|
|
|
43
29
|
outputDirWithSep: string;
|
|
44
30
|
hdc?: HdcCli;
|
|
45
31
|
}): CommandDef[];
|
|
32
|
+
/** report-user:无 hidumper / revoke_switch;destroy 替换为 aa start + force-stop */
|
|
33
|
+
export declare function buildUserInitEnvGroup(input: {
|
|
34
|
+
app: string;
|
|
35
|
+
ability: string;
|
|
36
|
+
snapshotLogFile: string;
|
|
37
|
+
hdc?: HdcCli;
|
|
38
|
+
}): CommandDef[];
|
|
39
|
+
/** report-user:collect 仅拉取文件,不执行 hidumper list */
|
|
40
|
+
export declare function buildUserCollectGroup(input: {
|
|
41
|
+
snapshotPerfReceiveDirWithSep: string;
|
|
42
|
+
outputDirWithSep: string;
|
|
43
|
+
hdc?: HdcCli;
|
|
44
|
+
}): CommandDef[];
|
|
46
45
|
/** 独立 `filter` 组:拉取 target_tgid、校验 apppool、按 tgid 写回 perf 文本(由 report/forkall 插在 collect 与 analysis 之间)。 */
|
|
47
46
|
export declare function buildCommonAnalysisTargetFilterGroup(input: {
|
|
48
47
|
app: string;
|
|
49
48
|
snapshotPerfFile: string;
|
|
50
49
|
writeBacktraceStacks: boolean;
|
|
51
50
|
hdc?: HdcCli;
|
|
51
|
+
/** 默认 true;report-user 为 false(hiperf 使用 --app,无 apppool_pids) */
|
|
52
|
+
validateApppool?: boolean;
|
|
53
|
+
}): CommandDef[];
|
|
54
|
+
/** report-user filter:pgrep + 按 tgid 过滤,不校验 apppool(hiperf 使用 --app,无 apppool_pids)。 */
|
|
55
|
+
export declare function buildUserAnalysisTargetFilterGroup(input: {
|
|
56
|
+
app: string;
|
|
57
|
+
snapshotPerfFile: string;
|
|
58
|
+
writeBacktraceStacks: boolean;
|
|
59
|
+
hdc?: HdcCli;
|
|
52
60
|
}): CommandDef[];
|
|
53
61
|
/**
|
|
54
62
|
* 仅校验 perf 输入路径是否存在;不读取、不解析内容(格式由后续流水线处理)。
|
|
@@ -68,6 +76,8 @@ export declare function decodeRawPerfDataAndWriteOutputs(input: {
|
|
|
68
76
|
dumpStackXlsx: string;
|
|
69
77
|
traceFormatProfile: string;
|
|
70
78
|
stageName: string;
|
|
79
|
+
/** workspace 目录,内含 collect 拉取的 `snapshot_hitrace.txt` */
|
|
80
|
+
workspaceDir: string;
|
|
71
81
|
/** hiperf_txt_parser `workerCount`;`1` 时不传该选项,走串行路径 */
|
|
72
82
|
parseConcurrency?: number;
|
|
73
83
|
skipDedupePerfData?: boolean;
|
|
@@ -79,10 +89,15 @@ export declare function decodeRawPerfDataAndWriteOutputs(input: {
|
|
|
79
89
|
* 配对策略由 {@link resolveBacktrackStrategy} 根据解码用 `selectedProfile` 解析(`rls` 为 revoke_id,其余为 devid+fs+index)。
|
|
80
90
|
*/
|
|
81
91
|
skipNonBacktrack?: boolean;
|
|
82
|
-
/** 传入 {@link decodePerfRawData}
|
|
92
|
+
/** 传入 hiperf {@link decodePerfRawData}:丢弃无 trace 解析器的 raw 样本 */
|
|
83
93
|
dropFailedSamples?: boolean;
|
|
84
94
|
/** `profile=auto` 时从设备 cat format 的配置 */
|
|
85
95
|
traceFormatAuto?: TraceFormatAutoConfig;
|
|
96
|
+
/** 与 `--trace-from` 一致,决定 hitrace 预处理与 sidecar 策略 */
|
|
97
|
+
traceFrom?: TraceFromSource;
|
|
98
|
+
/** report `--trace-from-threshold` / `--trace-from-threshold-opt` */
|
|
99
|
+
traceThresholdMs?: number;
|
|
100
|
+
traceThresholdOpt?: TraceTimeThresholdOpt;
|
|
86
101
|
}): Promise<boolean>;
|
|
87
102
|
type DecodeInputConfig = {
|
|
88
103
|
inputFilePath: string;
|
|
@@ -103,6 +118,8 @@ export declare function buildCommonAnalysisGroup(input: {
|
|
|
103
118
|
traceFormatProfile: string;
|
|
104
119
|
decodeStageName: string;
|
|
105
120
|
missingInputMessage: string;
|
|
121
|
+
/** workspace 目录,供解码阶段读取 `snapshot_hitrace.txt` */
|
|
122
|
+
workspaceDir: string;
|
|
106
123
|
/** hiperf_txt_parser `workerCount`;默认 1(串行) */
|
|
107
124
|
parseConcurrency?: number;
|
|
108
125
|
skipDedupePerfData?: boolean;
|
|
@@ -114,10 +131,12 @@ export declare function buildCommonAnalysisGroup(input: {
|
|
|
114
131
|
* 配对策略与解码 profile 一致(见 {@link resolveBacktrackStrategy})。
|
|
115
132
|
*/
|
|
116
133
|
skipNonBacktrack?: boolean;
|
|
117
|
-
/** 传入 {@link decodePerfRawData}
|
|
134
|
+
/** 传入 hiperf {@link decodePerfRawData}:丢弃无 trace 解析器的 raw 样本 */
|
|
118
135
|
dropFailedSamples?: boolean;
|
|
119
136
|
/** `profile=auto` 时从设备 cat format 的配置 */
|
|
120
137
|
traceFormatAuto?: TraceFormatAutoConfig;
|
|
138
|
+
traceFrom?: TraceFromSource;
|
|
139
|
+
traceThresholdMs?: number;
|
|
140
|
+
traceThresholdOpt?: TraceTimeThresholdOpt;
|
|
121
141
|
}): CommandDef[];
|
|
122
|
-
export {};
|
|
123
142
|
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/lib/presets.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/lib/presets.ts"],"names":[],"mappings":"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"}
|