snapshot-checker 0.7.5 → 0.8.1
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 +9 -9
- package/dist/commands/forkall.d.ts +1 -0
- package/dist/commands/forkall.d.ts.map +1 -1
- package/dist/commands/forkall.js +30 -21
- package/dist/commands/forkall.js.map +1 -1
- package/dist/src/lib/app_spec.d.ts +13 -0
- package/dist/src/lib/app_spec.d.ts.map +1 -0
- package/dist/src/lib/app_spec.js +31 -0
- package/dist/src/lib/app_spec.js.map +1 -0
- package/dist/src/lib/paths.d.ts +11 -0
- package/dist/src/lib/paths.d.ts.map +1 -1
- package/dist/src/lib/paths.js +11 -0
- package/dist/src/lib/paths.js.map +1 -1
- package/dist/src/lib/perf_decode.d.ts.map +1 -1
- package/dist/src/lib/perf_decode.js +2 -1
- package/dist/src/lib/perf_decode.js.map +1 -1
- package/dist/src/lib/pipeline.d.ts +5 -2
- package/dist/src/lib/pipeline.d.ts.map +1 -1
- package/dist/src/lib/pipeline.js +32 -6
- package/dist/src/lib/pipeline.js.map +1 -1
- package/dist/src/lib/presets.d.ts +15 -10
- package/dist/src/lib/presets.d.ts.map +1 -1
- package/dist/src/lib/presets.js +35 -27
- package/dist/src/lib/presets.js.map +1 -1
- package/dist/src/lib/report_scenario.d.ts +1 -0
- package/dist/src/lib/report_scenario.d.ts.map +1 -1
- package/dist/src/lib/report_scenario.js +42 -29
- package/dist/src/lib/report_scenario.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -55,7 +55,7 @@ npm run dev -- report --help
|
|
|
55
55
|
|
|
56
56
|
checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets` 选择 hiperf 事件;analysis 阶段可选用 **hstack**、**sourcemap**,并通过 `--trace-format-profile` 配置 trace 解码。
|
|
57
57
|
|
|
58
|
-
`--trace-from` 同时影响 **采集**(hiperf 是否 `--raw-data`)与 **analysis**(是否读 `
|
|
58
|
+
`--trace-from` 同时影响 **采集**(hiperf 是否 `--raw-data`)与 **analysis**(是否读 `hyperstart_hitrace.txt`、如何与 perf 样本合并);详见下文「analysis 阶段 trace 解码」。
|
|
59
59
|
|
|
60
60
|
**执行阶段**(`defaultGroupOrder`)
|
|
61
61
|
|
|
@@ -73,7 +73,7 @@ checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets`
|
|
|
73
73
|
analysis 通过 `src/lib/pipeline.ts` 的 pipeline 执行,trace 解码由 `src/lib/perf_decode.ts` 编排(不再在 checker 内逐样本循环):
|
|
74
74
|
|
|
75
75
|
1. 按 `--trace-format-profile`(或 `auto` 时从设备读取的 format)构建 trace registry。
|
|
76
|
-
2. 若 `--trace-from` 为 `hitrace` 或 `mix`:主线程一次调用 `hmtrace-parser` 的 `buildHitraceIndexSnapshot` 解析 `workspace/
|
|
76
|
+
2. 若 `--trace-from` 为 `hitrace` 或 `mix`:主线程一次调用 `hmtrace-parser` 的 `buildHitraceIndexSnapshot` 解析 `workspace/hyperstart_hitrace.txt`。
|
|
77
77
|
3. 调用 `hiperf_txt_parser` 的 `decodePerfRawData`,传入 hitrace 索引与 sidecar 策略;`--parse-concurrency` 大于 `1` 时在**加载 perf 文本**与**trace 解码**(profile 无需主线程 transform 时)均可使用 Worker 池。
|
|
78
78
|
|
|
79
79
|
**`--trace-from` 与 hitrace sidecar 策略(analysis,默认由 trace-from 推导)**
|
|
@@ -155,7 +155,7 @@ Group: init
|
|
|
155
155
|
[mac] hdc shell remount — hdc shell remount
|
|
156
156
|
...
|
|
157
157
|
Group: monitor
|
|
158
|
-
[mac] [background] hdc shell "hilog -t kmsg | grep pid" >> ./output/workspace/
|
|
158
|
+
[mac] [background] hdc shell "hilog -t kmsg | grep pid" >> ./output/workspace/hyperstart_log.txt — 收集日志到本地
|
|
159
159
|
...
|
|
160
160
|
```
|
|
161
161
|
|
|
@@ -183,15 +183,15 @@ output/
|
|
|
183
183
|
├── dump_stack.json # 同上(JSON)
|
|
184
184
|
├── dump_stack.xlsx # 同上(Excel)
|
|
185
185
|
├── perf_txt/
|
|
186
|
-
│ └──
|
|
186
|
+
│ └── hyperstart_perf.data.txt # 设备 hiperf dump 文本
|
|
187
187
|
└── workspace/ # 中间产物
|
|
188
|
-
├──
|
|
189
|
-
├──
|
|
188
|
+
├── hyperstart_log.txt # hilog 采集
|
|
189
|
+
├── hyperstart_hitrace.txt
|
|
190
190
|
├── perf.data
|
|
191
|
-
└──
|
|
191
|
+
└── _hyperstart_perf.data.txt # hstack 解析后 perf(若配置了 hstack)
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
-
未配置 `--hstack-tool-path` 时,analysis 阶段会跳过 hstack,日志出现 `[hstack] 未配置,跳过解析`,直接使用 `perf_txt/
|
|
194
|
+
未配置 `--hstack-tool-path` 时,analysis 阶段会跳过 hstack,日志出现 `[hstack] 未配置,跳过解析`,直接使用 `perf_txt/hyperstart_perf.data.txt` 解码。
|
|
195
195
|
|
|
196
196
|
### 示例
|
|
197
197
|
|
|
@@ -206,7 +206,7 @@ snapshot-checker report --dry-run --app com.example.app --output-dir ./output
|
|
|
206
206
|
```text
|
|
207
207
|
hiperf record --raw-data -e checkpoint:vfs_snapshot_dump_monitor,checkpoint:checkpoint_revoked ... -d 70 &
|
|
208
208
|
...
|
|
209
|
-
hiperf dump -i /data/local/tmp/perf.data -o /data/local/tmp/
|
|
209
|
+
hiperf dump -i /data/local/tmp/perf.data -o /data/local/tmp/hyperstart_perf.data.txt
|
|
210
210
|
```
|
|
211
211
|
|
|
212
212
|
analysis 时对 hitrace 使用 **perfFirst** sidecar 策略。
|
|
@@ -23,6 +23,7 @@ interface ForkallOptions {
|
|
|
23
23
|
traceFormatProfile?: string;
|
|
24
24
|
skipPerfDedupe?: boolean;
|
|
25
25
|
dropFailedSamples?: boolean;
|
|
26
|
+
keepDecodedPerf?: boolean;
|
|
26
27
|
hdcTarget?: string;
|
|
27
28
|
/** 全局 `--parse-concurrency`:hiperf_txt_parser 解析并发度,默认 1 */
|
|
28
29
|
parseConcurrency?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forkall.d.ts","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA8B,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"forkall.d.ts","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA8B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA0C1E,eAAO,MAAM,MAAM,EAAE,MAAW,CAAC;AAEjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAOrC,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;IAwDnB,CAAC;AAEF,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAsKD,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;CACzB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAgKlD"}
|
package/dist/commands/forkall.js
CHANGED
|
@@ -4,9 +4,10 @@ import { existsSync, mkdirSync } from "node:fs";
|
|
|
4
4
|
import { AUTO_TRACE_FORMAT_PROFILE, buildCommonAnalysisGroup, buildCommonAnalysisTargetFilterGroup, buildCommonCollectGroup, buildCommonInitEnvGroup, resolveParseConcurrency, resolveTracingEventPermissionPath, TRACE_FORMAT_PROFILE_CLI_DESCRIPTION, } from "../src/lib/presets.js";
|
|
5
5
|
import { createHdcCli } from "../src/lib/hdc.js";
|
|
6
6
|
import { buildPythonScriptCommand } from "../src/lib/host_commands.js";
|
|
7
|
-
import { ensureTrailingSeparator, normalizeCliOutputDir, quoteLocalPathForShell, resolveProjectRelativePath, } from "../src/lib/paths.js";
|
|
7
|
+
import { DEVICE_TMP_HYPERSTART_HITRACE_PATH, DEVICE_TMP_HYPERSTART_PERF_DATA_TXT_PATH, ensureTrailingSeparator, HYPERSTART_LOG_BASENAME, HYPERSTART_PERF_DATA_TXT_BASENAME, normalizeCliOutputDir, quoteLocalPathForShell, resolveProjectRelativePath, } from "../src/lib/paths.js";
|
|
8
8
|
import { createModuleLogger } from "../src/logger.js";
|
|
9
9
|
import { expandCheckpointRevokedFieldDict, passthroughFieldDict, } from "hmtrace-parser";
|
|
10
|
+
import { formatLibforkallAppArg, parseAppSpec } from "../src/lib/app_spec.js";
|
|
10
11
|
const logger = createModuleLogger(import.meta.url);
|
|
11
12
|
/**
|
|
12
13
|
* forkall 场景占位;实际命令由 {@link applyOptions} 按 CLI 注入。
|
|
@@ -25,7 +26,7 @@ export const defaultGroupOrder = [
|
|
|
25
26
|
];
|
|
26
27
|
export const options = [
|
|
27
28
|
{ flags: "--event-path <path>", description: "场景事件配置文件路径" },
|
|
28
|
-
{ flags: "--app <app>", description: "应用 bundleName
|
|
29
|
+
{ flags: "--app <app>", description: "应用 bundleName(包名),或 bundleName:pickerName(picker 启动)" },
|
|
29
30
|
{
|
|
30
31
|
flags: "--system-symbol-file-path <path>",
|
|
31
32
|
description: "系统符号表文件路径",
|
|
@@ -73,6 +74,10 @@ export const options = [
|
|
|
73
74
|
flags: "--drop-failed-samples",
|
|
74
75
|
description: "decodePerfRawData 丢弃无 trace 解析器的 raw 样本(dropFailedSamples)",
|
|
75
76
|
},
|
|
77
|
+
{
|
|
78
|
+
flags: "--keep-decoded-perf",
|
|
79
|
+
description: "将 decodeTrace 解析成功的 perf 写入 workspace/_hyperstart_perf.trace_decoded.txt",
|
|
80
|
+
},
|
|
76
81
|
];
|
|
77
82
|
function buildRebootGroup(input) {
|
|
78
83
|
const { hdcCli, mode, eventPath, defaultTimeout } = input;
|
|
@@ -124,13 +129,13 @@ function buildRebootGroup(input) {
|
|
|
124
129
|
];
|
|
125
130
|
}
|
|
126
131
|
function buildMonitorGroup(input) {
|
|
127
|
-
const { hdcCli, eventName, app, logKey, bufferSize, duration,
|
|
132
|
+
const { hdcCli, eventName, app, logKey, bufferSize, duration, hyperStartLogFile, startAppCommand, checkStateCommand, } = input;
|
|
128
133
|
return [
|
|
129
134
|
{
|
|
130
135
|
kind: SHELL_PLATFORM_KINDS,
|
|
131
136
|
description: "收集日志到本地",
|
|
132
137
|
background: true,
|
|
133
|
-
run: `${hdcCli.shell(`"hilog -t kmsg | grep ${logKey}"`)} >> ${
|
|
138
|
+
run: `${hdcCli.shell(`"hilog -t kmsg | grep ${logKey}"`)} >> ${hyperStartLogFile}`,
|
|
134
139
|
},
|
|
135
140
|
{
|
|
136
141
|
kind: SHELL_PLATFORM_KINDS,
|
|
@@ -158,7 +163,7 @@ function buildMonitorGroup(input) {
|
|
|
158
163
|
description: "收集风险事件数据",
|
|
159
164
|
run: [
|
|
160
165
|
`${hdcCli.prefix} shell "`,
|
|
161
|
-
`hitrace custom_event --overwrite -b ${bufferSize} -t ${duration} -o
|
|
166
|
+
`hitrace custom_event --overwrite -b ${bufferSize} -t ${duration} -o ${DEVICE_TMP_HYPERSTART_HITRACE_PATH} & `,
|
|
162
167
|
eventName
|
|
163
168
|
? `hiperf record -e ${eventName} --period 1 -s fp --clockid boottime --cpu-limit 100 -o /data/local/tmp/perf.data -p {{monitor_target}} -d ${duration} & `
|
|
164
169
|
: "",
|
|
@@ -166,7 +171,7 @@ function buildMonitorGroup(input) {
|
|
|
166
171
|
app ? `${startAppCommand} && ` : "",
|
|
167
172
|
`${checkStateCommand} & `,
|
|
168
173
|
"wait && ",
|
|
169
|
-
|
|
174
|
+
`hiperf dump -i /data/local/tmp/perf.data -o ${DEVICE_TMP_HYPERSTART_PERF_DATA_TXT_PATH}"`,
|
|
170
175
|
]
|
|
171
176
|
.filter(Boolean)
|
|
172
177
|
.join(""),
|
|
@@ -174,14 +179,14 @@ function buildMonitorGroup(input) {
|
|
|
174
179
|
];
|
|
175
180
|
}
|
|
176
181
|
function buildAnalysisPreDecodeCommands(input) {
|
|
177
|
-
const { systemSymbolFilePath,
|
|
182
|
+
const { systemSymbolFilePath, hyperStartPerfFile, parserSystemStackScript } = input;
|
|
178
183
|
return [
|
|
179
184
|
...(systemSymbolFilePath
|
|
180
185
|
? [
|
|
181
186
|
buildPythonScriptCommand({
|
|
182
187
|
description: "系统栈解栈",
|
|
183
188
|
scriptPath: parserSystemStackScript,
|
|
184
|
-
args: [
|
|
189
|
+
args: [hyperStartPerfFile, hyperStartPerfFile, "-S", systemSymbolFilePath],
|
|
185
190
|
}),
|
|
186
191
|
]
|
|
187
192
|
: []),
|
|
@@ -189,9 +194,12 @@ function buildAnalysisPreDecodeCommands(input) {
|
|
|
189
194
|
}
|
|
190
195
|
/** 按 CLI 结果生成 reboot/init/monitor/collect/filter/analysis 各阶段命令表 */
|
|
191
196
|
export function applyOptions(ctx) {
|
|
192
|
-
const { eventPath = "", app = "", systemSymbolFilePath = "", logKey = "pid", duration = "70", defaultTimeout = "90", bufferSize = "512000", mode = "monitor", outputDir = "./output", traceFormatProfile = "default", skipPerfDedupe = false, dropFailedSamples = false, hdcTarget, parseConcurrency: parseConcurrencyRaw, dryRun = false, list = false, } = ctx.options ?? {};
|
|
197
|
+
const { eventPath = "", app = "", systemSymbolFilePath = "", logKey = "pid", duration = "70", defaultTimeout = "90", bufferSize = "512000", mode = "monitor", outputDir = "./output", traceFormatProfile = "default", skipPerfDedupe = false, dropFailedSamples = false, keepDecodedPerf = false, hdcTarget, parseConcurrency: parseConcurrencyRaw, dryRun = false, list = false, } = ctx.options ?? {};
|
|
193
198
|
const parseConcurrency = resolveParseConcurrency(parseConcurrencyRaw);
|
|
194
199
|
const hdcCli = createHdcCli(hdcTarget);
|
|
200
|
+
const appSpec = parseAppSpec(app);
|
|
201
|
+
const bundleName = appSpec.bundleName;
|
|
202
|
+
const libforkallAppArg = formatLibforkallAppArg(appSpec);
|
|
195
203
|
const traceFormatProfileNormalized = traceFormatProfile.trim();
|
|
196
204
|
if (traceFormatProfileNormalized === AUTO_TRACE_FORMAT_PROFILE &&
|
|
197
205
|
eventPath.trim() === "") {
|
|
@@ -206,13 +214,13 @@ export function applyOptions(ctx) {
|
|
|
206
214
|
const perfTextDir = path.join(outputDirNormalized, "perf_txt");
|
|
207
215
|
const perfTextDirNormalized = path.normalize(perfTextDir);
|
|
208
216
|
const perfTextDirWithSep = ensureTrailingSeparator(perfTextDirNormalized);
|
|
209
|
-
const
|
|
210
|
-
const
|
|
217
|
+
const hyperStartLogFile = path.join(workspaceDirNormalized, HYPERSTART_LOG_BASENAME);
|
|
218
|
+
const hyperStartPerfFile = path.join(perfTextDirNormalized, HYPERSTART_PERF_DATA_TXT_BASENAME);
|
|
211
219
|
const dumpStackTxt = path.join(outputDirNormalized, "dump_stack.txt");
|
|
212
220
|
const dumpStackJson = path.join(outputDirNormalized, "dump_stack.json");
|
|
213
221
|
const dumpStackXlsx = path.join(outputDirNormalized, "dump_stack.xlsx");
|
|
214
222
|
const parserSystemStackScript = path.normalize(path.join(".", "tools", "host", "checker", "parse_system_stack.py"));
|
|
215
|
-
const startAppCommand = `hidumper -s 1901 -a '-p libforkall_plugin.z.so --create 100 ${
|
|
223
|
+
const startAppCommand = `hidumper -s 1901 -a '-p libforkall_plugin.z.so --create 100 ${libforkallAppArg}'`;
|
|
216
224
|
if (!dryRun && !list) {
|
|
217
225
|
if (!existsSync(outputDirNormalized)) {
|
|
218
226
|
mkdirSync(outputDirNormalized, { recursive: true });
|
|
@@ -231,41 +239,41 @@ export function applyOptions(ctx) {
|
|
|
231
239
|
defaultTimeout,
|
|
232
240
|
});
|
|
233
241
|
const initEnvGroup = buildCommonInitEnvGroup({
|
|
234
|
-
|
|
235
|
-
|
|
242
|
+
appSpec,
|
|
243
|
+
hyperStartLogFile,
|
|
236
244
|
checkStateCommand,
|
|
237
245
|
hdc: hdcCli,
|
|
238
246
|
});
|
|
239
247
|
const monitorGroup = buildMonitorGroup({
|
|
240
248
|
hdcCli,
|
|
241
249
|
eventName,
|
|
242
|
-
app,
|
|
250
|
+
app: bundleName,
|
|
243
251
|
logKey,
|
|
244
252
|
bufferSize,
|
|
245
253
|
duration,
|
|
246
|
-
|
|
254
|
+
hyperStartLogFile,
|
|
247
255
|
startAppCommand,
|
|
248
256
|
checkStateCommand,
|
|
249
257
|
});
|
|
250
258
|
const collectGroup = buildCommonCollectGroup({
|
|
251
259
|
checkStateCommand,
|
|
252
|
-
|
|
260
|
+
hyperStartPerfReceiveDirWithSep: perfTextDirWithSep,
|
|
253
261
|
outputDirWithSep: workspaceDirWithSep,
|
|
254
262
|
hdc: hdcCli,
|
|
255
263
|
});
|
|
256
264
|
const filterGroup = buildCommonAnalysisTargetFilterGroup({
|
|
257
|
-
app,
|
|
258
|
-
|
|
265
|
+
app: bundleName,
|
|
266
|
+
hyperStartPerfFile,
|
|
259
267
|
writeBacktraceStacks: false,
|
|
260
268
|
hdc: hdcCli,
|
|
261
269
|
});
|
|
262
270
|
const analysisGroup = buildCommonAnalysisGroup({
|
|
263
271
|
preDecodeCommands: buildAnalysisPreDecodeCommands({
|
|
264
272
|
systemSymbolFilePath,
|
|
265
|
-
|
|
273
|
+
hyperStartPerfFile,
|
|
266
274
|
parserSystemStackScript,
|
|
267
275
|
}),
|
|
268
|
-
decodeInput: { inputFilePath:
|
|
276
|
+
decodeInput: { inputFilePath: hyperStartPerfFile },
|
|
269
277
|
dumpStackTxt,
|
|
270
278
|
dumpStackJson,
|
|
271
279
|
dumpStackXlsx,
|
|
@@ -276,6 +284,7 @@ export function applyOptions(ctx) {
|
|
|
276
284
|
traceFrom: "mix",
|
|
277
285
|
skipDedupePerfData: skipPerfDedupe,
|
|
278
286
|
dropFailedSamples,
|
|
287
|
+
keepDecodedPerf,
|
|
279
288
|
parseConcurrency,
|
|
280
289
|
traceFormatAuto: traceFormatProfileNormalized === AUTO_TRACE_FORMAT_PROFILE
|
|
281
290
|
? (() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forkall.js","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,oCAAoC,EACpC,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,iCAAiC,EACjC,oCAAoC,GACrC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"forkall.js","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** CLI `--app` 解析结果:纯 bundleName,或 `bundleName:pickerName`。 */
|
|
2
|
+
export interface AppSpec {
|
|
3
|
+
bundleName: string;
|
|
4
|
+
pickerName?: string;
|
|
5
|
+
raw: string;
|
|
6
|
+
}
|
|
7
|
+
/** 解析 `--app`;支持 `bundleName` 或 `bundleName:pickerName`。 */
|
|
8
|
+
export declare function parseAppSpec(raw: string): AppSpec;
|
|
9
|
+
/** libforkall `--create` / `--destroy` 的应用参数(含 picker 时用空格拼接)。 */
|
|
10
|
+
export declare function formatLibforkallAppArg(spec: AppSpec): string;
|
|
11
|
+
/** `aa start` 不支持 picker 启动;report-user 等路径应在校验阶段调用。 */
|
|
12
|
+
export declare function assertAppSpecSupportsAaStart(spec: AppSpec): void;
|
|
13
|
+
//# sourceMappingURL=app_spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app_spec.d.ts","sourceRoot":"","sources":["../../../src/lib/app_spec.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAoBjD;AAED,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAK5D;AAED,wDAAwD;AACxD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAMhE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** 解析 `--app`;支持 `bundleName` 或 `bundleName:pickerName`。 */
|
|
2
|
+
export function parseAppSpec(raw) {
|
|
3
|
+
const trimmed = raw.trim();
|
|
4
|
+
if (!trimmed) {
|
|
5
|
+
return { bundleName: "", raw: "" };
|
|
6
|
+
}
|
|
7
|
+
const colonIndex = trimmed.indexOf(":");
|
|
8
|
+
if (colonIndex === -1) {
|
|
9
|
+
return { bundleName: trimmed, raw: trimmed };
|
|
10
|
+
}
|
|
11
|
+
const bundleName = trimmed.slice(0, colonIndex).trim();
|
|
12
|
+
const pickerName = trimmed.slice(colonIndex + 1).trim();
|
|
13
|
+
if (!bundleName || !pickerName) {
|
|
14
|
+
throw new Error(`[--app] 无效的 bundleName:pickerName 格式: ${JSON.stringify(raw)}`);
|
|
15
|
+
}
|
|
16
|
+
return { bundleName, pickerName, raw: trimmed };
|
|
17
|
+
}
|
|
18
|
+
/** libforkall `--create` / `--destroy` 的应用参数(含 picker 时用空格拼接)。 */
|
|
19
|
+
export function formatLibforkallAppArg(spec) {
|
|
20
|
+
if (spec.pickerName) {
|
|
21
|
+
return `${spec.bundleName} ${spec.pickerName}`;
|
|
22
|
+
}
|
|
23
|
+
return spec.bundleName;
|
|
24
|
+
}
|
|
25
|
+
/** `aa start` 不支持 picker 启动;report-user 等路径应在校验阶段调用。 */
|
|
26
|
+
export function assertAppSpecSupportsAaStart(spec) {
|
|
27
|
+
if (spec.pickerName) {
|
|
28
|
+
throw new Error(`[--app] bundleName:pickerName 格式不支持 aa start,请仅使用 bundleName 或改用 report 场景`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=app_spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app_spec.js","sourceRoot":"","sources":["../../../src/lib/app_spec.ts"],"names":[],"mappings":"AAOA,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,4BAA4B,CAAC,IAAa;IACxD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/src/lib/paths.d.ts
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
/** CLI 与编程式调用的默认输出根目录(POSIX 写法,经 normalize 后随平台展开)。 */
|
|
2
2
|
export declare const DEFAULT_OUTPUT_DIR = "./output";
|
|
3
|
+
/** 本地 workspace / perf_txt 及设备拉取产物的基础文件名(`hyperstart_` 前缀)。 */
|
|
4
|
+
export declare const HYPERSTART_LOG_BASENAME = "hyperstart_log.txt";
|
|
5
|
+
export declare const HYPERSTART_HITRACE_BASENAME = "hyperstart_hitrace.txt";
|
|
6
|
+
export declare const HYPERSTART_PERF_DATA_TXT_BASENAME = "hyperstart_perf.data.txt";
|
|
7
|
+
/** hstack 解析后写回 workspace 的中间 perf 文本 */
|
|
8
|
+
export declare const HYPERSTART_PARSED_PERF_DATA_TXT_BASENAME = "_hyperstart_perf.data.txt";
|
|
9
|
+
/** trace 解码后写回 workspace 的中间 perf 文本(与 perf_txt 下原始采集文件区分) */
|
|
10
|
+
export declare const HYPERSTART_TRACE_DECODED_PERF_DATA_TXT_BASENAME = "_hyperstart_perf.trace_decoded.txt";
|
|
11
|
+
/** 设备 `/data/local/tmp` 下采集阶段写入的 hitrace / hiperf 文本路径 */
|
|
12
|
+
export declare const DEVICE_TMP_HYPERSTART_HITRACE_PATH = "/data/local/tmp/hyperstart_hitrace.txt";
|
|
13
|
+
export declare const DEVICE_TMP_HYPERSTART_PERF_DATA_TXT_PATH = "/data/local/tmp/hyperstart_perf.data.txt";
|
|
3
14
|
/** 规范化 CLI 传入的输出目录;空串回退为 {@link DEFAULT_OUTPUT_DIR}。 */
|
|
4
15
|
export declare function normalizeCliOutputDir(raw: string | undefined): string;
|
|
5
16
|
/** 相对当前工作目录拼接路径并规范化(替代硬编码 `.\config\...`)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/lib/paths.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAE7C,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrE;AAED,8CAA8C;AAC9C,wBAAgB,0BAA0B,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAExE;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wCAAwC;AACxC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/D"}
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/lib/paths.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAE7C,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,eAAO,MAAM,2BAA2B,2BAA2B,CAAC;AACpE,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,yCAAyC;AACzC,eAAO,MAAM,wCAAwC,8BAA8B,CAAC;AACpF,8DAA8D;AAC9D,eAAO,MAAM,+CAA+C,uCACtB,CAAC;AAEvC,0DAA0D;AAC1D,eAAO,MAAM,kCAAkC,2CAAmD,CAAC;AACnG,eAAO,MAAM,wCAAwC,6CAAyD,CAAC;AAE/G,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrE;AAED,8CAA8C;AAC9C,wBAAgB,0BAA0B,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAExE;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wCAAwC;AACxC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/D"}
|
package/dist/src/lib/paths.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
/** CLI 与编程式调用的默认输出根目录(POSIX 写法,经 normalize 后随平台展开)。 */
|
|
3
3
|
export const DEFAULT_OUTPUT_DIR = "./output";
|
|
4
|
+
/** 本地 workspace / perf_txt 及设备拉取产物的基础文件名(`hyperstart_` 前缀)。 */
|
|
5
|
+
export const HYPERSTART_LOG_BASENAME = "hyperstart_log.txt";
|
|
6
|
+
export const HYPERSTART_HITRACE_BASENAME = "hyperstart_hitrace.txt";
|
|
7
|
+
export const HYPERSTART_PERF_DATA_TXT_BASENAME = "hyperstart_perf.data.txt";
|
|
8
|
+
/** hstack 解析后写回 workspace 的中间 perf 文本 */
|
|
9
|
+
export const HYPERSTART_PARSED_PERF_DATA_TXT_BASENAME = "_hyperstart_perf.data.txt";
|
|
10
|
+
/** trace 解码后写回 workspace 的中间 perf 文本(与 perf_txt 下原始采集文件区分) */
|
|
11
|
+
export const HYPERSTART_TRACE_DECODED_PERF_DATA_TXT_BASENAME = "_hyperstart_perf.trace_decoded.txt";
|
|
12
|
+
/** 设备 `/data/local/tmp` 下采集阶段写入的 hitrace / hiperf 文本路径 */
|
|
13
|
+
export const DEVICE_TMP_HYPERSTART_HITRACE_PATH = `/data/local/tmp/${HYPERSTART_HITRACE_BASENAME}`;
|
|
14
|
+
export const DEVICE_TMP_HYPERSTART_PERF_DATA_TXT_PATH = `/data/local/tmp/${HYPERSTART_PERF_DATA_TXT_BASENAME}`;
|
|
4
15
|
/** 规范化 CLI 传入的输出目录;空串回退为 {@link DEFAULT_OUTPUT_DIR}。 */
|
|
5
16
|
export function normalizeCliOutputDir(raw) {
|
|
6
17
|
const trimmed = raw?.trim() ?? "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAE7C,wDAAwD;AACxD,MAAM,UAAU,qBAAqB,CAAC,GAAuB;IAC3D,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC3E,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,0BAA0B,CAAC,GAAG,QAAkB;IAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACjF,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAChD,CAAC"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAE7C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AACpE,MAAM,CAAC,MAAM,iCAAiC,GAAG,0BAA0B,CAAC;AAC5E,yCAAyC;AACzC,MAAM,CAAC,MAAM,wCAAwC,GAAG,2BAA2B,CAAC;AACpF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,+CAA+C,GAC1D,oCAAoC,CAAC;AAEvC,0DAA0D;AAC1D,MAAM,CAAC,MAAM,kCAAkC,GAAG,mBAAmB,2BAA2B,EAAE,CAAC;AACnG,MAAM,CAAC,MAAM,wCAAwC,GAAG,mBAAmB,iCAAiC,EAAE,CAAC;AAE/G,wDAAwD;AACxD,MAAM,UAAU,qBAAqB,CAAC,GAAuB;IAC3D,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC3E,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,0BAA0B,CAAC,GAAG,QAAkB;IAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACjF,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perf_decode.d.ts","sourceRoot":"","sources":["../../../src/lib/perf_decode.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,EAML,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,QAAQ,EAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"perf_decode.d.ts","sourceRoot":"","sources":["../../../src/lib/perf_decode.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,EAML,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,QAAQ,EAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAEjE,yGAAyG;AACzG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,eAAe,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,GAAG,2BAA2B,GAAG,SAAS,CAQ1C;AAYD,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,eAAe,EAC1B,KAAK,CAAC,EAAE,0BAA0B,GACjC,qBAAqB,CAmBvB;AAYD,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;CAC3C,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0DpB"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { decodePerfRawData, hitracePolicyHitraceFirst, hitracePolicyPerfFirst, hitracePolicyPerfOnly, traceFormatTextsNeedMainThreadDecode, } from "hiperf_txt_parser";
|
|
3
3
|
import { buildHitraceIndexSnapshot, buildTraceRegistry, buildTraceRegistryFromProfile, getTraceEventFormats, } from "hmtrace-parser";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import { HYPERSTART_HITRACE_BASENAME } from "./paths.js";
|
|
5
6
|
import { createModuleLogger } from "../logger.js";
|
|
6
7
|
const logger = createModuleLogger(import.meta.url);
|
|
7
8
|
/** 解析 report `--trace-from-threshold` / `--trace-from-threshold-opt` 为 hiperf hitrace `timeThreshold` */
|
|
@@ -62,7 +63,7 @@ export async function decodePerfDataWithProfile(input) {
|
|
|
62
63
|
logger.info(`trace-from=hiperf hitrace 策略=perfOnly,跳过索引构建 profile=${input.selectedProfile}`);
|
|
63
64
|
}
|
|
64
65
|
else {
|
|
65
|
-
const hitracePath = path.join(input.workspaceDir,
|
|
66
|
+
const hitracePath = path.join(input.workspaceDir, HYPERSTART_HITRACE_BASENAME);
|
|
66
67
|
logger.info(`hitrace 预处理开始: ${hitracePath}`);
|
|
67
68
|
const index = await buildHitraceIndexSnapshot({ filePath: hitracePath }, formats, { tracePrintMode: "fieldDict" });
|
|
68
69
|
const threadCount = Object.keys(index).length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perf_decode.js","sourceRoot":"","sources":["../../../src/lib/perf_decode.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"perf_decode.js","sourceRoot":"","sources":["../../../src/lib/perf_decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,8 @@ export type HiperfDecodePipelineContext = {
|
|
|
48
48
|
runBacktrackFS: boolean;
|
|
49
49
|
skipNonBacktrack: boolean;
|
|
50
50
|
dropFailedSamples: boolean;
|
|
51
|
+
/** 为 true 时将 decodeTrace 结果写入 workspace 中间 perf 文本 */
|
|
52
|
+
keepDecodedPerf: boolean;
|
|
51
53
|
/** `--risk-targets` 仅 direct 时 true;无样本跳过导出时不提示重新采集 */
|
|
52
54
|
directOnlyRiskTarget: boolean;
|
|
53
55
|
traceFormatAuto?: TraceFormatAutoConfig;
|
|
@@ -78,6 +80,7 @@ export declare function createHiperfDecodePipelineContext(input: {
|
|
|
78
80
|
runBacktrackFS?: boolean;
|
|
79
81
|
skipNonBacktrack?: boolean;
|
|
80
82
|
dropFailedSamples?: boolean;
|
|
83
|
+
keepDecodedPerf?: boolean;
|
|
81
84
|
directOnlyRiskTarget?: boolean;
|
|
82
85
|
traceFormatAuto?: TraceFormatAutoConfig;
|
|
83
86
|
traceFrom?: TraceFromSource;
|
|
@@ -90,7 +93,7 @@ export declare const HIPERF_DECODE_PIPELINE_STAGES: PipelineStage<HiperfDecodePi
|
|
|
90
93
|
export declare function runHiperfDecodePipeline(input: Parameters<typeof createHiperfDecodePipelineContext>[0]): Promise<boolean>;
|
|
91
94
|
/** 过滤 pipeline 上下文 */
|
|
92
95
|
export type HiperfFilterPipelineContext = {
|
|
93
|
-
|
|
96
|
+
hyperStartPerfFile: string;
|
|
94
97
|
targetTgid: number;
|
|
95
98
|
writeBacktraceStacks: boolean;
|
|
96
99
|
/** `--risk-targets` 仅含 direct 时,tgid 无样本视为无风险中性短路;否则 error */
|
|
@@ -99,7 +102,7 @@ export type HiperfFilterPipelineContext = {
|
|
|
99
102
|
};
|
|
100
103
|
/** 根据调用参数构造过滤 pipeline 初始上下文 */
|
|
101
104
|
export declare function createHiperfFilterPipelineContext(input: {
|
|
102
|
-
|
|
105
|
+
hyperStartPerfFile: string;
|
|
103
106
|
targetTgid: number;
|
|
104
107
|
writeBacktraceStacks: boolean;
|
|
105
108
|
directOnlyRiskTarget?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/lib/pipeline.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA6B,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/lib/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/pipeline.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
import { dedupePerfData, filterByTgid, loadPerfData, savePerfDataToExcel, savePerfDataToJson, savePerfDataToText, toBackTraceStacks, } from "hiperf_txt_parser";
|
|
3
3
|
import { backtrackFS, backtrackStrategyRls, resolveBacktrackStrategy, } from "hmtrace-parser";
|
|
4
4
|
import { decodePerfDataWithProfile } from "./perf_decode.js";
|
|
5
|
+
import { HYPERSTART_TRACE_DECODED_PERF_DATA_TXT_BASENAME } from "./paths.js";
|
|
5
6
|
import { createModuleLogger } from "../logger.js";
|
|
7
|
+
import path from "node:path";
|
|
6
8
|
const logger = createModuleLogger(import.meta.url);
|
|
7
9
|
import { AUTO_TRACE_FORMAT_PROFILE, fetchTraceEventFormatsFromDevice, resolveTraceFormatProfile, } from "./format.js";
|
|
8
10
|
/**
|
|
@@ -40,6 +42,7 @@ export function createHiperfDecodePipelineContext(input) {
|
|
|
40
42
|
runBacktrackFS: input.runBacktrackFS ?? false,
|
|
41
43
|
skipNonBacktrack: input.skipNonBacktrack ?? false,
|
|
42
44
|
dropFailedSamples: input.dropFailedSamples ?? false,
|
|
45
|
+
keepDecodedPerf: input.keepDecodedPerf ?? false,
|
|
43
46
|
directOnlyRiskTarget: input.directOnlyRiskTarget ?? false,
|
|
44
47
|
traceFrom: input.traceFrom ?? "mix",
|
|
45
48
|
useParallel: shouldUseParallelParse(parseConcurrency),
|
|
@@ -105,6 +108,28 @@ const decodeTraceStage = {
|
|
|
105
108
|
return { status: "continue" };
|
|
106
109
|
},
|
|
107
110
|
};
|
|
111
|
+
/** 可选:将 decodeTrace 解析成功的 perf 写入 workspace 中间文件(`keepDecodedPerf` 为 false 时跳过) */
|
|
112
|
+
const saveDecodedPerfStage = {
|
|
113
|
+
name: "saveDecodedPerf",
|
|
114
|
+
async run(ctx) {
|
|
115
|
+
if (!ctx.keepDecodedPerf) {
|
|
116
|
+
return { status: "continue" };
|
|
117
|
+
}
|
|
118
|
+
const outputPath = path.join(ctx.workspaceDir, HYPERSTART_TRACE_DECODED_PERF_DATA_TXT_BASENAME);
|
|
119
|
+
const decodedPerfData = ctx.perfData;
|
|
120
|
+
if (ctx.useParallel) {
|
|
121
|
+
await savePerfDataToText(decodedPerfData, {
|
|
122
|
+
outputPath,
|
|
123
|
+
workerCount: ctx.parseConcurrency,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
await savePerfDataToText(decodedPerfData, { outputPath });
|
|
128
|
+
}
|
|
129
|
+
logger.info(`[${ctx.stageName}] 已写入 trace 解码中间文件: ${outputPath} samples=${decodedPerfData.recordSamples.length}`);
|
|
130
|
+
return { status: "continue" };
|
|
131
|
+
},
|
|
132
|
+
};
|
|
108
133
|
/**
|
|
109
134
|
* 可选:将 revoked 样本与 FS dump 样本配对回溯(`runBacktrackFS` 为 false 时跳过)。
|
|
110
135
|
* 输出 0 条时 warning 并保留解码样本(如 all 模式下仍可能有 direct 事件)。
|
|
@@ -202,6 +227,7 @@ export const HIPERF_DECODE_PIPELINE_STAGES = [
|
|
|
202
227
|
prepareAutoFormatsStage,
|
|
203
228
|
loadPerfDataStage,
|
|
204
229
|
decodeTraceStage,
|
|
230
|
+
saveDecodedPerfStage,
|
|
205
231
|
backtrackFSStage,
|
|
206
232
|
dedupeStage,
|
|
207
233
|
writeDecodeOutputsStage,
|
|
@@ -236,11 +262,11 @@ export function createHiperfFilterPipelineContext(input) {
|
|
|
236
262
|
directOnlyRiskTarget: input.directOnlyRiskTarget ?? false,
|
|
237
263
|
};
|
|
238
264
|
}
|
|
239
|
-
/** 从 `
|
|
265
|
+
/** 从 `hyperStartPerfFile` 加载 perf 文本 */
|
|
240
266
|
const loadFilterInputStage = {
|
|
241
267
|
name: "loadPerfData",
|
|
242
268
|
async run(ctx) {
|
|
243
|
-
ctx.perfData = await loadPerfData(ctx.
|
|
269
|
+
ctx.perfData = await loadPerfData(ctx.hyperStartPerfFile);
|
|
244
270
|
return { status: "continue" };
|
|
245
271
|
},
|
|
246
272
|
};
|
|
@@ -275,14 +301,14 @@ const optionalBacktraceStacksStage = {
|
|
|
275
301
|
return { status: "continue" };
|
|
276
302
|
},
|
|
277
303
|
};
|
|
278
|
-
/** 将过滤后的 perf 写回 `
|
|
304
|
+
/** 将过滤后的 perf 写回 `hyperStartPerfFile` */
|
|
279
305
|
const writeFilterOutputStage = {
|
|
280
306
|
name: "writeFilteredPerf",
|
|
281
307
|
async run(ctx) {
|
|
282
308
|
await savePerfDataToText(ctx.perfData, {
|
|
283
|
-
outputPath: ctx.
|
|
309
|
+
outputPath: ctx.hyperStartPerfFile,
|
|
284
310
|
});
|
|
285
|
-
logger.info(`[过滤] 已写回: ${ctx.
|
|
311
|
+
logger.info(`[过滤] 已写回: ${ctx.hyperStartPerfFile}`);
|
|
286
312
|
return { status: "continue" };
|
|
287
313
|
},
|
|
288
314
|
};
|
|
@@ -305,7 +331,7 @@ export async function runHiperfFilterPipeline(input) {
|
|
|
305
331
|
});
|
|
306
332
|
}
|
|
307
333
|
catch (error) {
|
|
308
|
-
logger.error(`[过滤] 失败: ${input.
|
|
334
|
+
logger.error(`[过滤] 失败: ${input.hyperStartPerfFile}`, error);
|
|
309
335
|
return { ok: false, error: true };
|
|
310
336
|
}
|
|
311
337
|
}
|