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
package/README.md
CHANGED
|
@@ -4,11 +4,18 @@
|
|
|
4
4
|
|
|
5
5
|
**主场景为 `report`**:按 checkpoint 风险目标采集 trace/perf,可选 hstack 与 sourcemap 解析,输出 `dump_stack.*`。
|
|
6
6
|
|
|
7
|
+
**0.7.0 相对 0.6.x 的破坏性变更**
|
|
8
|
+
|
|
9
|
+
- `report` 默认 `--trace-from` 由 `hitrace` 改为 **`mix`**(采集默认带 `--raw-data`,analysis 默认预处理 hitrace 并使用 **perfFirst** sidecar)。
|
|
10
|
+
- 日志格式统一为行首 `[ISO8601] {级别} {正文}`(无 consola 颜色)。
|
|
11
|
+
- 依赖升级:`hiperf_txt_parser` ^1.4、`hmtrace-parser` ^0.6;analysis trace 解码改由 pipeline 编排。
|
|
12
|
+
- 若需与 0.6.x 相同默认行为,显式传入 `--trace-from hitrace`。
|
|
13
|
+
|
|
7
14
|
**前置条件**
|
|
8
15
|
|
|
9
16
|
- **Node.js** ≥ 18。
|
|
10
17
|
- PATH 中可用 **`hdc`**,并已连接目标设备。
|
|
11
|
-
- 本机 analysis 依赖 `
|
|
18
|
+
- 本机 analysis 依赖 **`hiperf_txt_parser` ^1.4**、**`hmtrace-parser` ^0.6**(随包安装):hitrace 预处理与索引由 hmtrace 构建,样本级并行解码与 hitrace 合并由 hiperf 完成。
|
|
12
19
|
|
|
13
20
|
---
|
|
14
21
|
|
|
@@ -46,7 +53,9 @@ npm run dev -- report --help
|
|
|
46
53
|
|
|
47
54
|
## `report` 命令
|
|
48
55
|
|
|
49
|
-
checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets` 选择 hiperf 事件;analysis 阶段可选用 **hstack**、**sourcemap
|
|
56
|
+
checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets` 选择 hiperf 事件;analysis 阶段可选用 **hstack**、**sourcemap**,并通过 `--trace-format-profile` 配置 trace 解码。
|
|
57
|
+
|
|
58
|
+
`--trace-from` 同时影响 **采集**(hiperf 是否 `--raw-data`)与 **analysis**(是否读 `snapshot_hitrace.txt`、如何与 perf 样本合并);详见下文「analysis 阶段 trace 解码」。
|
|
50
59
|
|
|
51
60
|
**执行阶段**(`defaultGroupOrder`)
|
|
52
61
|
|
|
@@ -57,7 +66,25 @@ checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets`
|
|
|
57
66
|
| `collect` | 从设备拉取 perf、hitrace 到 `--output-dir` |
|
|
58
67
|
| `restore` | 复原 `/proc/checkpoint/revoke_switch` |
|
|
59
68
|
| `filter` | 按目标进程过滤 perf |
|
|
60
|
-
| `analysis` | 选 perf 输入、解码 trace
|
|
69
|
+
| `analysis` | 选 perf 输入、解码 trace(hitrace 预处理 + hiperf 并行 decode)、可选 `backtrackFS`、去重,导出 `dump_stack.txt` / `.json` / `.xlsx` |
|
|
70
|
+
|
|
71
|
+
### analysis 阶段 trace 解码
|
|
72
|
+
|
|
73
|
+
analysis 通过 `src/lib/pipeline.ts` 的 pipeline 执行,trace 解码由 `src/lib/perf_decode.ts` 编排(不再在 checker 内逐样本循环):
|
|
74
|
+
|
|
75
|
+
1. 按 `--trace-format-profile`(或 `auto` 时从设备读取的 format)构建 trace registry。
|
|
76
|
+
2. 若 `--trace-from` 为 `hitrace` 或 `mix`:主线程一次调用 `hmtrace-parser` 的 `buildHitraceIndexSnapshot` 解析 `workspace/snapshot_hitrace.txt`。
|
|
77
|
+
3. 调用 `hiperf_txt_parser` 的 `decodePerfRawData`,传入 hitrace 索引与 sidecar 策略;`--parse-concurrency` 大于 `1` 时在**加载 perf 文本**与**trace 解码**(profile 无需主线程 transform 时)均可使用 Worker 池。
|
|
78
|
+
|
|
79
|
+
**`--trace-from` 与 hitrace sidecar 策略(analysis,默认由 trace-from 推导)**
|
|
80
|
+
|
|
81
|
+
| `--trace-from` | 是否预处理 hitrace | sidecar 策略 | 说明 |
|
|
82
|
+
| -------------- | ------------------ | ------------ | ---- |
|
|
83
|
+
| `mix`(默认) | 是 | `perfFirst` | 先解码 perf raw,失败类样本再查 hitrace 索引 |
|
|
84
|
+
| `hitrace` | 是 | `hitraceFirst` | 有对齐快照则先 apply hitrace,成功则跳过 perf raw 解码 |
|
|
85
|
+
| `hiperf` | 否 | `perfOnly` | 仅解码 hiperf `--raw-data`,不读 hitrace 文件 |
|
|
86
|
+
|
|
87
|
+
采集阶段行为不变:`hitrace` 时 `hiperf record` **不带** `--raw-data`;`hiperf` / `mix` 时 **带** `--raw-data`。`hitrace` 与 `hiperf dump` 在 monitor 中仍会执行。
|
|
61
88
|
|
|
62
89
|
**风险目标 `--risk-targets`**
|
|
63
90
|
|
|
@@ -74,7 +101,7 @@ checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets`
|
|
|
74
101
|
| ---- | ---- |
|
|
75
102
|
| `--app <app>` | 应用包名 |
|
|
76
103
|
| `--risk-targets <targets>` | 风险事件类型,默认 `all` |
|
|
77
|
-
| `--trace-from <source>` |
|
|
104
|
+
| `--trace-from <source>` | **采集**:hiperf record 是否 `--raw-data`(`mix` 默认带,`hiperf` 带,`hitrace` 不带)。**analysis**:是否预处理 hitrace 及 sidecar 策略(见上表);与 `--trace-format-profile` 独立 |
|
|
78
105
|
| `--hstack-tool-path <path>` | hstack 可执行文件;不配置则跳过 |
|
|
79
106
|
| `--sourcemap-dir <path>` | 传给 hstack 的 `-s` |
|
|
80
107
|
| `--log-key <key>` | hilog 过滤字段,默认 `pid` |
|
|
@@ -94,16 +121,178 @@ checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets`
|
|
|
94
121
|
| 选项 | 说明 |
|
|
95
122
|
| ---- | ---- |
|
|
96
123
|
| `--hdc-target <sn>` | 全部 `hdc` 命令加 `-t <sn>` |
|
|
97
|
-
| `--parse-concurrency <n>` | perf
|
|
124
|
+
| `--parse-concurrency <n>` | perf **加载**与 **trace 解码** 的 Worker 数,默认 `1`;`profile=auto` 且 format 含主线程 `transformFieldDict` 时解码回退单线程 |
|
|
98
125
|
| `--log-file [path]` | 日志追加写文件;省略 path 时写入 `<output-dir>/workspace/checker.log` |
|
|
99
126
|
|
|
100
|
-
|
|
127
|
+
### 使用方式
|
|
128
|
+
|
|
129
|
+
建议按「预览 → 执行」顺序操作:
|
|
130
|
+
|
|
131
|
+
1. **`--list`**:按 group 列出将要执行的命令,**不创目录、不连设备执行**(与集成测试 `report --list 不创建 workspace 与 perf_txt` 一致)。
|
|
132
|
+
2. **`--dry-run`**:按默认阶段顺序列出完整命令序列,**同样不创目录**。
|
|
133
|
+
3. **正式运行**:省略上述开关,按 `init → monitor → collect → restore → filter → analysis` 依次执行。
|
|
134
|
+
|
|
135
|
+
只跑部分阶段时,用 `-g` / `--group` 指定,例如 `-g init,monitor` 或 `-g collect,filter,analysis`。
|
|
136
|
+
|
|
137
|
+
### 控制台输出
|
|
138
|
+
|
|
139
|
+
**运行前摘要**(`--dry-run` 与正式运行均会打印, `--list` 时不打印):
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
ℹ [trace-from] mix
|
|
143
|
+
ℹ [风险目标] 失效回溯、直接失效
|
|
144
|
+
ℹ [backtrack] 保留非 FS revoked
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
含义:`--trace-from` 当前取值(采集 raw-data 与 analysis sidecar 策略均据此)、已选风险目标、是否执行 `backtrackFS` 及过滤策略。
|
|
148
|
+
|
|
149
|
+
**`--list` 输出格式**(节选):
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
[report] 场景命令(按 group 展示):
|
|
153
|
+
|
|
154
|
+
Group: init
|
|
155
|
+
[mac] hdc shell remount — hdc shell remount
|
|
156
|
+
...
|
|
157
|
+
Group: monitor
|
|
158
|
+
[mac] [background] hdc shell "hilog -t kmsg | grep pid" >> ./output/workspace/snapshot_log.txt — 收集日志到本地
|
|
159
|
+
...
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**`--dry-run` 输出格式**(节选):
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
(dry-run) [report] 将要执行的命令:
|
|
166
|
+
|
|
167
|
+
1. [mac] hdc shell remount — hdc shell remount
|
|
168
|
+
...
|
|
169
|
+
13. [mac] hdc shell "hitrace hyperstart ... & hiperf record -e checkpoint:... & ... hiperf dump ..." — 收集风险事件数据
|
|
170
|
+
...
|
|
171
|
+
22. [builtin] [func:func] — 风险栈解码
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**正式执行时**,每条命令还会输出进度行,例如 `▶ (13/22) [mac] 收集风险事件数据`,结束后打印 `退出码` 与耗时。
|
|
175
|
+
|
|
176
|
+
### 输出目录
|
|
177
|
+
|
|
178
|
+
成功跑完 `--output-dir ./output`(默认)后,典型结构如下:
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
output/
|
|
182
|
+
├── dump_stack.txt # 最终调用栈(文本)
|
|
183
|
+
├── dump_stack.json # 同上(JSON)
|
|
184
|
+
├── dump_stack.xlsx # 同上(Excel)
|
|
185
|
+
├── perf_txt/
|
|
186
|
+
│ └── snapshot_perf.data.txt # 设备 hiperf dump 文本
|
|
187
|
+
└── workspace/ # 中间产物
|
|
188
|
+
├── snapshot_log.txt # hilog 采集
|
|
189
|
+
├── snapshot_hitrace.txt
|
|
190
|
+
├── perf.data
|
|
191
|
+
└── _snapshot_perf.data.txt # hstack 解析后 perf(若配置了 hstack)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
未配置 `--hstack-tool-path` 时,analysis 阶段会跳过 hstack,日志出现 `[hstack] 未配置,跳过解析`,直接使用 `perf_txt/snapshot_perf.data.txt` 解码。
|
|
195
|
+
|
|
196
|
+
### 示例
|
|
197
|
+
|
|
198
|
+
**预览完整流水线(不创目录)**
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
snapshot-checker report --dry-run --app com.example.app --output-dir ./output
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
默认 `--trace-from mix`:`monitor` 阶段并行 `hitrace` + `hiperf record --raw-data`,例如:
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
hiperf record --raw-data -e checkpoint:vfs_snapshot_dump_monitor,checkpoint:checkpoint_revoked ... -d 70 &
|
|
208
|
+
...
|
|
209
|
+
hiperf dump -i /data/local/tmp/perf.data -o /data/local/tmp/snapshot_perf.data.txt
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
analysis 时对 hitrace 使用 **perfFirst** sidecar 策略。
|
|
213
|
+
|
|
214
|
+
**`--trace-from hitrace`:采集不带 `--raw-data`(与 0.6.x 默认一致)**
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
snapshot-checker report --dry-run --app com.example.app --trace-from hitrace
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
`monitor` 中 `hiperf record` **不带** `--raw-data`;analysis 使用 **hitraceFirst** sidecar。
|
|
221
|
+
|
|
222
|
+
**`--trace-from hiperf`:采集带 `--raw-data`,analysis 不读 hitrace**
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
snapshot-checker report --dry-run --app com.example.app --trace-from hiperf
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
`monitor` 中 `hiperf record` 带 `--raw-data`;analysis 为 **perfOnly**,不预处理 hitrace 索引。
|
|
229
|
+
|
|
230
|
+
**加大解析并发(大 perf 文本)**
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
snapshot-checker report --app com.example.app --parse-concurrency 4
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
在 `loadPerfData` 与 `decodePerfRawData` 阶段启用 Worker(需 profile 不强制主线程 decode)。
|
|
237
|
+
|
|
238
|
+
**按 group 预览**
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# 只看 init + monitor
|
|
242
|
+
snapshot-checker report --list --app com.example.app -g init,monitor
|
|
243
|
+
|
|
244
|
+
# 只看采集后的拉取与分析
|
|
245
|
+
snapshot-checker report --dry-run --app com.example.app -g collect,filter,analysis
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**采集前等待**
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
snapshot-checker report --dry-run --app com.example.app --risk-collect-wait 5
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
输出中会出现 `[embed] sleep 5 — 等待 5 秒后开始收集风险事件数据`;默认 `0` 时不插入该步骤。
|
|
255
|
+
|
|
256
|
+
**指定设备与风险目标**
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
snapshot-checker report --app com.example.app \
|
|
260
|
+
--hdc-target DEVICE01 \
|
|
261
|
+
--risk-targets backtrack,direct \
|
|
262
|
+
--trace-format-profile auto \
|
|
263
|
+
--hstack-tool-path /path/to/hstack \
|
|
264
|
+
--sourcemap-dir /path/to/sourcemaps
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**正式采集(需已连接 hdc 设备)**
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
snapshot-checker report --app com.example.app --output-dir ./output
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
执行完成后在 `./output/` 下查看 `dump_stack.*`;可用 `--log-file` 将完整日志写入 `./output/workspace/checker.log`。
|
|
274
|
+
|
|
275
|
+
**常见错误**
|
|
276
|
+
|
|
277
|
+
无效 `--trace-from` 值会直接报错并退出,例如:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
snapshot-checker report --dry-run --app com.example.app --trace-from both
|
|
281
|
+
# [--trace-from] 无效值: "both"。可选: hiperf、hitrace、mix
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## `report-user` 命令
|
|
287
|
+
|
|
288
|
+
面向**无 `hidumper` / `revoke_switch` 权限**的设备用户:选项与 `report` 基本一致,额外要求 `--ability`(与 `--app` 配合,用于 `aa start -a` 启动应用)。
|
|
289
|
+
|
|
290
|
+
- **init**:不执行 `hidumper` / `revoke_switch` 相关步骤,改用 `aa start` + `aa force-stop` 管理应用生命周期。
|
|
291
|
+
- **monitor / collect / filter**:不依赖 `apppool_pids`;hiperf 使用 `--app` 过滤,filter 阶段按 tgid 过滤。
|
|
292
|
+
- **其余阶段**(analysis 等)与 `report` 相同。
|
|
101
293
|
|
|
102
294
|
```bash
|
|
103
|
-
snapshot-checker report --app com.example.app
|
|
104
|
-
snapshot-checker report --app com.example.app --risk-targets backtrack,direct
|
|
105
|
-
snapshot-checker report --app com.example.app --trace-format-profile auto
|
|
106
|
-
snapshot-checker report --app com.example.app --trace-from mix --hstack-tool-path /path/to/hstack
|
|
295
|
+
snapshot-checker report-user --dry-run --app com.example.app --ability EntryAbility
|
|
107
296
|
```
|
|
108
297
|
|
|
109
298
|
---
|
|
@@ -126,6 +315,8 @@ snapshot-checker forkall --event-path checkpoint/vfs_snapshot_dump_monitor --app
|
|
|
126
315
|
npm test # 单元与集成
|
|
127
316
|
npm run test:perf # 性能回归
|
|
128
317
|
npm run test:all # 全部
|
|
318
|
+
npm run format # Prettier 格式化 src / commands / tests / demos
|
|
319
|
+
npm run format:check # 仅检查格式(CI 可用)
|
|
129
320
|
```
|
|
130
321
|
|
|
131
322
|
## 作为库使用
|
|
@@ -134,10 +325,12 @@ npm run test:all # 全部
|
|
|
134
325
|
import { resolveScenario, runScenarioGroups } from "snapshot-checker";
|
|
135
326
|
import * as report from "snapshot-checker/commands/report";
|
|
136
327
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
328
|
+
// dryRun: true 与 CLI --dry-run 相同,applyOptions 不会创建 outputDir
|
|
329
|
+
const { groups, defaultGroupOrder } = resolveScenario(
|
|
330
|
+
report,
|
|
331
|
+
{ app: "com.example.app", riskTargets: "all", dryRun: true },
|
|
332
|
+
{ hdcTarget: "DEVICE01" },
|
|
333
|
+
);
|
|
141
334
|
|
|
142
335
|
await runScenarioGroups({ groups, defaultGroupOrder, stopOnError: true });
|
|
143
336
|
```
|
|
@@ -150,8 +343,9 @@ await runScenarioGroups({ groups, defaultGroupOrder, stopOnError: true });
|
|
|
150
343
|
|
|
151
344
|
本工具按命名场景(`commands/*.ts`、`demos/*.ts`)注册子命令。每个场景导出 **`groups`**、**`defaultGroupOrder`**,可选 **`options`** 与 **`applyOptions(opts)`**。
|
|
152
345
|
|
|
153
|
-
- **`commands/`**:设备联调场景,主场景 **`report
|
|
346
|
+
- **`commands/`**:设备联调场景,主场景 **`report`**、**`report-user`**(无 hidumper/revoke_switch 权限);**`forkall`** 已过时(analysis 默认 `--trace-from mix`)。
|
|
154
347
|
- **`demos/`**:示例场景(`context-demo`、`timeout-demo` 等)。
|
|
348
|
+
- **`src/`**:实现采用 **下划线** 源文件名(如 `group_specs.ts`、`run_command.ts`、`lib/perf_decode.ts`、`runners/platform_shell_executor.ts`)。
|
|
155
349
|
|
|
156
350
|
通用开关(各场景子命令可用):`--list`、`--dry-run`、`--stop-on-error`、`-g,--group`、`--wait`、`--silent` 等。完整列表见 `snapshot-checker <scene> --help`。
|
|
157
351
|
|
|
@@ -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;AAqC1E,eAAO,MAAM,MAAM,EAAE,MAAW,CAAC;AAEjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAOrC,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;IAmDnB,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,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,CAwJlD"}
|
package/dist/commands/forkall.js
CHANGED
|
@@ -3,9 +3,11 @@ import path from "node:path";
|
|
|
3
3
|
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
|
-
import { buildPythonScriptCommand } from "../src/lib/
|
|
6
|
+
import { buildPythonScriptCommand } from "../src/lib/host_commands.js";
|
|
7
7
|
import { ensureTrailingSeparator, normalizeCliOutputDir, quoteLocalPathForShell, resolveProjectRelativePath, } from "../src/lib/paths.js";
|
|
8
|
-
import {
|
|
8
|
+
import { createModuleLogger } from "../src/logger.js";
|
|
9
|
+
import { expandCheckpointRevokedFieldDict, passthroughFieldDict, } from "hmtrace-parser";
|
|
10
|
+
const logger = createModuleLogger(import.meta.url);
|
|
9
11
|
/**
|
|
10
12
|
* forkall 场景占位;实际命令由 {@link applyOptions} 按 CLI 注入。
|
|
11
13
|
* 包消费方:`import * as forkall from 'snapshot-checker/commands/forkall'` 后配合 `resolveScenario`;示例见 `demos/consumer-app`。
|
|
@@ -23,7 +25,7 @@ export const defaultGroupOrder = [
|
|
|
23
25
|
];
|
|
24
26
|
export const options = [
|
|
25
27
|
{ flags: "--event-path <path>", description: "场景事件配置文件路径" },
|
|
26
|
-
{ flags: "--app <app>", description: "
|
|
28
|
+
{ flags: "--app <app>", description: "应用 bundleName(包名)" },
|
|
27
29
|
{
|
|
28
30
|
flags: "--system-symbol-file-path <path>",
|
|
29
31
|
description: "系统符号表文件路径",
|
|
@@ -69,7 +71,7 @@ export const options = [
|
|
|
69
71
|
},
|
|
70
72
|
{
|
|
71
73
|
flags: "--drop-failed-samples",
|
|
72
|
-
description: "decodePerfRawData
|
|
74
|
+
description: "decodePerfRawData 丢弃无 trace 解析器的 raw 样本(dropFailedSamples)",
|
|
73
75
|
},
|
|
74
76
|
];
|
|
75
77
|
function buildRebootGroup(input) {
|
|
@@ -179,12 +181,7 @@ function buildAnalysisPreDecodeCommands(input) {
|
|
|
179
181
|
buildPythonScriptCommand({
|
|
180
182
|
description: "系统栈解栈",
|
|
181
183
|
scriptPath: parserSystemStackScript,
|
|
182
|
-
args: [
|
|
183
|
-
snapshotPerfFile,
|
|
184
|
-
snapshotPerfFile,
|
|
185
|
-
"-S",
|
|
186
|
-
systemSymbolFilePath,
|
|
187
|
-
],
|
|
184
|
+
args: [snapshotPerfFile, snapshotPerfFile, "-S", systemSymbolFilePath],
|
|
188
185
|
}),
|
|
189
186
|
]
|
|
190
187
|
: []),
|
|
@@ -275,16 +272,26 @@ export function applyOptions(ctx) {
|
|
|
275
272
|
traceFormatProfile,
|
|
276
273
|
decodeStageName: "调用栈解码",
|
|
277
274
|
missingInputMessage: "[调用栈解码] 无 perf 输入,跳过",
|
|
275
|
+
workspaceDir: workspaceDirNormalized,
|
|
276
|
+
traceFrom: "mix",
|
|
278
277
|
skipDedupePerfData: skipPerfDedupe,
|
|
279
278
|
dropFailedSamples,
|
|
280
279
|
parseConcurrency,
|
|
281
280
|
traceFormatAuto: traceFormatProfileNormalized === AUTO_TRACE_FORMAT_PROFILE
|
|
282
|
-
? {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
281
|
+
? (() => {
|
|
282
|
+
const formatPath = `${resolveTracingEventPermissionPath(eventPath)}/format`;
|
|
283
|
+
return {
|
|
284
|
+
hdcCli,
|
|
285
|
+
formatEntries: [
|
|
286
|
+
{
|
|
287
|
+
formatPath,
|
|
288
|
+
transformFieldDict: formatPath.endsWith("/checkpoint/checkpoint_revoked/format")
|
|
289
|
+
? expandCheckpointRevokedFieldDict
|
|
290
|
+
: passthroughFieldDict,
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
};
|
|
294
|
+
})()
|
|
288
295
|
: undefined,
|
|
289
296
|
});
|
|
290
297
|
const resultGroups = {
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"forkall.js","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Groups } from "../src/types.js";
|
|
2
|
+
/** report-user 场景占位;内容由 `applyOptions` 注入 */
|
|
3
|
+
export declare const groups: Groups;
|
|
4
|
+
export declare const defaultGroupOrder: string[];
|
|
5
|
+
export declare const options: ({
|
|
6
|
+
flags: string;
|
|
7
|
+
description: string;
|
|
8
|
+
helpGroup: string;
|
|
9
|
+
defaultValue?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
flags: string;
|
|
12
|
+
description: string;
|
|
13
|
+
defaultValue: string;
|
|
14
|
+
helpGroup: string;
|
|
15
|
+
})[];
|
|
16
|
+
/** 注入 init/monitor/collect/restore/filter/analysis 流水线(无 hidumper / revoke_switch) */
|
|
17
|
+
export declare function applyOptions(ctx: {
|
|
18
|
+
groups: Groups;
|
|
19
|
+
defaultGroupOrder: string[];
|
|
20
|
+
options: Record<string, unknown>;
|
|
21
|
+
}): {
|
|
22
|
+
groups: Groups;
|
|
23
|
+
defaultGroupOrder: string[];
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=report-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-user.d.ts","sourceRoot":"","sources":["../../commands/report-user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAO9C,6CAA6C;AAC7C,eAAO,MAAM,MAAM,EAAE,MAAW,CAAC;AAEjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAoC,CAAC;AAE3E,eAAO,MAAM,OAAO;;;;;;;;;;IAOnB,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAElD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { applyReportScenarioOptions, REPORT_DEFAULT_GROUP_ORDER, REPORT_OPTIONS, } from "../src/lib/report_scenario.js";
|
|
2
|
+
/** report-user 场景占位;内容由 `applyOptions` 注入 */
|
|
3
|
+
export const groups = {};
|
|
4
|
+
export const defaultGroupOrder = [...REPORT_DEFAULT_GROUP_ORDER];
|
|
5
|
+
export const options = [
|
|
6
|
+
...REPORT_OPTIONS,
|
|
7
|
+
{
|
|
8
|
+
flags: "--ability <ability>",
|
|
9
|
+
description: "应用 Ability 名称(aa start -a),与 --app 配合使用",
|
|
10
|
+
helpGroup: "场景与工具链",
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
/** 注入 init/monitor/collect/restore/filter/analysis 流水线(无 hidumper / revoke_switch) */
|
|
14
|
+
export function applyOptions(ctx) {
|
|
15
|
+
return applyReportScenarioOptions(ctx, "user");
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=report-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-user.js","sourceRoot":"","sources":["../../commands/report-user.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,GACf,MAAM,+BAA+B,CAAC;AAEvC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,MAAM,GAAW,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,0BAA0B,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,cAAc;IACjB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,yCAAyC;QACtD,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAC,GAI5B;IACC,OAAO,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -13,38 +13,13 @@ export declare const options: ({
|
|
|
13
13
|
defaultValue: string;
|
|
14
14
|
helpGroup: string;
|
|
15
15
|
})[];
|
|
16
|
-
interface ForkallOptions {
|
|
17
|
-
app?: string;
|
|
18
|
-
hstackToolPath?: string;
|
|
19
|
-
sourcemapDir?: string;
|
|
20
|
-
logKey?: string;
|
|
21
|
-
duration?: string;
|
|
22
|
-
backtrackDelay?: string;
|
|
23
|
-
riskCollectWait?: string;
|
|
24
|
-
bufferSize?: string;
|
|
25
|
-
outputDir?: string;
|
|
26
|
-
traceFormatProfile?: string;
|
|
27
|
-
riskTargets?: string;
|
|
28
|
-
traceFrom?: string;
|
|
29
|
-
skipPerfDedupe?: boolean;
|
|
30
|
-
skipBacktrack?: boolean;
|
|
31
|
-
skipNonBacktrack?: boolean;
|
|
32
|
-
dropFailedSamples?: boolean;
|
|
33
|
-
hdcTarget?: string;
|
|
34
|
-
/** 全局 `--parse-concurrency`:hiperf_txt_parser 解析并发度,默认 1 */
|
|
35
|
-
parseConcurrency?: unknown;
|
|
36
|
-
dryRun?: boolean;
|
|
37
|
-
/** CLI `--list`:只列命令,不建输出目录、不打印运行期摘要 */
|
|
38
|
-
list?: boolean;
|
|
39
|
-
}
|
|
40
16
|
/** 注入 init/monitor/collect/restore/filter/analysis 流水线及风险目标等派生命令 */
|
|
41
17
|
export declare function applyOptions(ctx: {
|
|
42
18
|
groups: Groups;
|
|
43
19
|
defaultGroupOrder: string[];
|
|
44
|
-
options:
|
|
20
|
+
options: Record<string, unknown>;
|
|
45
21
|
}): {
|
|
46
22
|
groups: Groups;
|
|
47
23
|
defaultGroupOrder: string[];
|
|
48
24
|
};
|
|
49
|
-
export {};
|
|
50
25
|
//# sourceMappingURL=report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../commands/report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../commands/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAO9C,wCAAwC;AACxC,eAAO,MAAM,MAAM,EAAE,MAAW,CAAC;AAEjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAoC,CAAC;AAE3E,eAAO,MAAM,OAAO;;;;;;;;;;IAQnB,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAElD"}
|