@gracker/smartperfetto 1.0.19 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/core/conclusionContract.d.ts +1 -0
- package/dist/agent/core/conclusionContract.d.ts.map +1 -1
- package/dist/agent/tools/frameAnalyzer.d.ts.map +1 -1
- package/dist/agent/tools/frameAnalyzer.js +1 -0
- package/dist/agent/tools/frameAnalyzer.js.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.d.ts +24 -0
- package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.js +159 -191
- package/dist/agentOpenAI/openAiRuntime.js.map +1 -1
- package/dist/agentRuntime/index.d.ts +1 -0
- package/dist/agentRuntime/index.d.ts.map +1 -1
- package/dist/agentRuntime/index.js +16 -1
- package/dist/agentRuntime/index.js.map +1 -1
- package/dist/agentRuntime/runtimeCommon.d.ts +34 -0
- package/dist/agentRuntime/runtimeCommon.d.ts.map +1 -0
- package/dist/agentRuntime/runtimeCommon.js +231 -0
- package/dist/agentRuntime/runtimeCommon.js.map +1 -0
- package/dist/agentv3/claudeConfig.d.ts +6 -2
- package/dist/agentv3/claudeConfig.d.ts.map +1 -1
- package/dist/agentv3/claudeConfig.js +50 -48
- package/dist/agentv3/claudeConfig.js.map +1 -1
- package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
- package/dist/agentv3/claudeMcpServer.js +74 -66
- package/dist/agentv3/claudeMcpServer.js.map +1 -1
- package/dist/agentv3/claudeRuntime.d.ts +18 -2
- package/dist/agentv3/claudeRuntime.d.ts.map +1 -1
- package/dist/agentv3/claudeRuntime.js +198 -265
- package/dist/agentv3/claudeRuntime.js.map +1 -1
- package/dist/agentv3/claudeSseBridge.js +1 -1
- package/dist/agentv3/claudeSseBridge.js.map +1 -1
- package/dist/agentv3/claudeVerifier.d.ts.map +1 -1
- package/dist/agentv3/claudeVerifier.js +3 -6
- package/dist/agentv3/claudeVerifier.js.map +1 -1
- package/dist/cli-user/bin.js +83 -2
- package/dist/cli-user/bin.js.map +1 -1
- package/dist/cli-user/commands/analyze.d.ts +2 -0
- package/dist/cli-user/commands/analyze.d.ts.map +1 -1
- package/dist/cli-user/commands/analyze.js +1 -0
- package/dist/cli-user/commands/analyze.js.map +1 -1
- package/dist/cli-user/commands/capture.d.ts +37 -2
- package/dist/cli-user/commands/capture.d.ts.map +1 -1
- package/dist/cli-user/commands/capture.js +184 -95
- package/dist/cli-user/commands/capture.js.map +1 -1
- package/dist/cli-user/commands/compare.d.ts +2 -0
- package/dist/cli-user/commands/compare.d.ts.map +1 -1
- package/dist/cli-user/commands/compare.js +1 -0
- package/dist/cli-user/commands/compare.js.map +1 -1
- package/dist/cli-user/commands/doctor.js +4 -0
- package/dist/cli-user/commands/doctor.js.map +1 -1
- package/dist/cli-user/services/androidCapture.d.ts +59 -0
- package/dist/cli-user/services/androidCapture.d.ts.map +1 -0
- package/dist/cli-user/services/androidCapture.js +375 -0
- package/dist/cli-user/services/androidCapture.js.map +1 -0
- package/dist/cli-user/services/captureConfig.d.ts +38 -0
- package/dist/cli-user/services/captureConfig.d.ts.map +1 -0
- package/dist/cli-user/services/captureConfig.js +434 -0
- package/dist/cli-user/services/captureConfig.js.map +1 -0
- package/dist/cli-user/services/captureTools.d.ts +11 -0
- package/dist/cli-user/services/captureTools.d.ts.map +1 -0
- package/dist/cli-user/services/captureTools.js +247 -0
- package/dist/cli-user/services/captureTools.js.map +1 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts +2 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
- package/dist/cli-user/services/cliAnalyzeService.js +1 -0
- package/dist/cli-user/services/cliAnalyzeService.js.map +1 -1
- package/dist/cli-user/services/runtimeGuard.d.ts +10 -0
- package/dist/cli-user/services/runtimeGuard.d.ts.map +1 -1
- package/dist/cli-user/services/runtimeGuard.js +48 -0
- package/dist/cli-user/services/runtimeGuard.js.map +1 -1
- package/dist/cli-user/services/turnRunner.d.ts +3 -0
- package/dist/cli-user/services/turnRunner.d.ts.map +1 -1
- package/dist/cli-user/services/turnRunner.js +4 -0
- package/dist/cli-user/services/turnRunner.js.map +1 -1
- package/dist/cli-user/types.d.ts +57 -0
- package/dist/cli-user/types.d.ts.map +1 -1
- package/dist/perfetto-recording-tools-pin.env +24 -0
- package/dist/services/agentResultNormalizer.d.ts.map +1 -1
- package/dist/services/agentResultNormalizer.js +32 -4
- package/dist/services/agentResultNormalizer.js.map +1 -1
- package/dist/services/evidence/evidenceContractBuilder.d.ts.map +1 -1
- package/dist/services/evidence/evidenceContractBuilder.js +17 -3
- package/dist/services/evidence/evidenceContractBuilder.js.map +1 -1
- package/dist/services/perfettoSqlSkill.d.ts.map +1 -1
- package/dist/services/perfettoSqlSkill.js +1 -0
- package/dist/services/perfettoSqlSkill.js.map +1 -1
- package/dist/services/providerManager/connectionTester.d.ts.map +1 -1
- package/dist/services/providerManager/connectionTester.js +4 -68
- package/dist/services/providerManager/connectionTester.js.map +1 -1
- package/dist/services/providerManager/index.d.ts +1 -0
- package/dist/services/providerManager/index.d.ts.map +1 -1
- package/dist/services/providerManager/index.js +8 -1
- package/dist/services/providerManager/index.js.map +1 -1
- package/dist/services/providerManager/providerService.d.ts.map +1 -1
- package/dist/services/providerManager/providerService.js +37 -106
- package/dist/services/providerManager/providerService.js.map +1 -1
- package/dist/services/providerManager/providerSnapshot.d.ts.map +1 -1
- package/dist/services/providerManager/providerSnapshot.js +13 -12
- package/dist/services/providerManager/providerSnapshot.js.map +1 -1
- package/dist/services/providerManager/runtimeCapabilities.d.ts +9 -0
- package/dist/services/providerManager/runtimeCapabilities.d.ts.map +1 -0
- package/dist/services/providerManager/runtimeCapabilities.js +105 -0
- package/dist/services/providerManager/runtimeCapabilities.js.map +1 -0
- package/dist/services/skillEngine/skillExecutor.d.ts +1 -0
- package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -1
- package/dist/services/skillEngine/skillExecutor.js +64 -12
- package/dist/services/skillEngine/skillExecutor.js.map +1 -1
- package/package.json +3 -3
- package/prebuilts/android-platform-tools/README.md +13 -0
- package/prebuilts/perfetto-recording-tools/README.md +17 -0
- package/skills/atomic/cpu_topology_detection.skill.yaml +105 -159
- package/skills/atomic/cpu_topology_view.skill.yaml +2 -0
- package/strategies/prompt-openai-final-report-continuation-en.template.md +3 -1
- package/strategies/prompt-openai-final-report-continuation-zh.template.md +3 -1
- package/strategies/prompt-output-format.template.md +1 -1
- package/strategies/startup.strategy.md +4 -4
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
// Copyright (C) 2024-2026 Gracker (Chris)
|
|
4
|
+
// This file is part of SmartPerfetto. See LICENSE for details.
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.SpawnAdbCommandRunner = void 0;
|
|
40
|
+
exports.captureAndroidTrace = captureAndroidTrace;
|
|
41
|
+
exports.runAndroidCapturePreflight = runAndroidCapturePreflight;
|
|
42
|
+
exports.listDevices = listDevices;
|
|
43
|
+
exports.parseAdbDevices = parseAdbDevices;
|
|
44
|
+
exports.selectDevice = selectDevice;
|
|
45
|
+
exports.probeAndroidDevice = probeAndroidDevice;
|
|
46
|
+
exports.resolveCaptureDurationMs = resolveCaptureDurationMs;
|
|
47
|
+
exports.buildPerfettoBackgroundArgs = buildPerfettoBackgroundArgs;
|
|
48
|
+
exports.parseBackgroundPid = parseBackgroundPid;
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const os = __importStar(require("os"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const child_process_1 = require("child_process");
|
|
53
|
+
const captureTools_1 = require("./captureTools");
|
|
54
|
+
class SpawnAdbCommandRunner {
|
|
55
|
+
run(adbPath, serial, args, options = {}) {
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
const fullArgs = serial ? ['-s', serial, ...args] : args;
|
|
58
|
+
const child = (0, child_process_1.spawn)(adbPath, fullArgs, { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
59
|
+
let stdout = '';
|
|
60
|
+
let stderr = '';
|
|
61
|
+
let settled = false;
|
|
62
|
+
const timeoutMs = options.timeoutMs ?? 30000;
|
|
63
|
+
const timer = setTimeout(() => {
|
|
64
|
+
if (settled)
|
|
65
|
+
return;
|
|
66
|
+
child.kill('SIGTERM');
|
|
67
|
+
settled = true;
|
|
68
|
+
reject(new Error(`adb command timed out after ${timeoutMs / 1000}s: ${fullArgs.join(' ')}`));
|
|
69
|
+
}, timeoutMs);
|
|
70
|
+
child.stdout.on('data', (chunk) => { stdout += chunk.toString(); });
|
|
71
|
+
child.stderr.on('data', (chunk) => { stderr += chunk.toString(); });
|
|
72
|
+
child.on('error', (error) => {
|
|
73
|
+
if (settled)
|
|
74
|
+
return;
|
|
75
|
+
settled = true;
|
|
76
|
+
clearTimeout(timer);
|
|
77
|
+
reject(error);
|
|
78
|
+
});
|
|
79
|
+
child.on('close', (code) => {
|
|
80
|
+
if (settled)
|
|
81
|
+
return;
|
|
82
|
+
settled = true;
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
if (code === 0) {
|
|
85
|
+
resolve({ stdout, stderr });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
reject(new Error((stderr || stdout || `adb exited with code ${code}`).trim()));
|
|
89
|
+
});
|
|
90
|
+
child.stdin.end(options.stdin ?? '');
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.SpawnAdbCommandRunner = SpawnAdbCommandRunner;
|
|
95
|
+
async function captureAndroidTrace(input) {
|
|
96
|
+
const outPath = path.resolve(input.out);
|
|
97
|
+
const runner = input.runner ?? new SpawnAdbCommandRunner();
|
|
98
|
+
const adb = input.adbPath
|
|
99
|
+
? {
|
|
100
|
+
name: 'adb',
|
|
101
|
+
source: 'override',
|
|
102
|
+
path: path.resolve(input.adbPath),
|
|
103
|
+
exists: fs.existsSync(path.resolve(input.adbPath)),
|
|
104
|
+
executable: fs.existsSync(path.resolve(input.adbPath)),
|
|
105
|
+
}
|
|
106
|
+
: (0, captureTools_1.resolveAdbTool)({ backendRoot: input.backendRoot });
|
|
107
|
+
(0, captureTools_1.assertToolUsable)(adb);
|
|
108
|
+
const devices = await listDevices(adb.path, runner);
|
|
109
|
+
const device = selectDevice(devices, input.serial);
|
|
110
|
+
const probe = await probeAndroidDevice(adb.path, device.serial, runner);
|
|
111
|
+
const shouldSideload = Boolean(input.sideload || probe.apiLevel < 29);
|
|
112
|
+
const tracebox = shouldSideload
|
|
113
|
+
? (0, captureTools_1.resolveTraceboxTool)(input.traceboxPath, (0, captureTools_1.androidTraceboxPlatformKey)(probe.abi), { backendRoot: input.backendRoot })
|
|
114
|
+
: undefined;
|
|
115
|
+
if (tracebox)
|
|
116
|
+
(0, captureTools_1.assertToolUsable)(tracebox);
|
|
117
|
+
const durationMs = resolveCaptureDurationMs(input.configDurationMs, input.durationSeconds);
|
|
118
|
+
const preflight = await runAndroidCapturePreflight(adb.path, device.serial, runner, {
|
|
119
|
+
killStale: input.killStale,
|
|
120
|
+
});
|
|
121
|
+
const killAfterMs = input.configDurationMs ? undefined : durationMs;
|
|
122
|
+
const hardTimeoutMs = durationMs + 120000;
|
|
123
|
+
const startedAt = input.now?.() ?? Date.now();
|
|
124
|
+
const stamp = `${startedAt}-${Math.random().toString(36).slice(2, 8)}`;
|
|
125
|
+
const remoteDir = shouldSideload ? '/data/local/tmp' : '/data/misc/perfetto-traces';
|
|
126
|
+
const remotePath = `${remoteDir}/smartperfetto-${stamp}.perfetto-trace`;
|
|
127
|
+
const remoteConfigPath = `${remoteDir}/smartperfetto-${stamp}.pbtxt`;
|
|
128
|
+
const perfettoCommand = shouldSideload ? '/data/local/tmp/smartperfetto-tracebox' : 'perfetto';
|
|
129
|
+
fs.mkdirSync(path.dirname(outPath), { recursive: true });
|
|
130
|
+
let pushedTracebox = false;
|
|
131
|
+
let pushedConfig = false;
|
|
132
|
+
let hostConfigPath;
|
|
133
|
+
let pid;
|
|
134
|
+
try {
|
|
135
|
+
if (shouldSideload && tracebox) {
|
|
136
|
+
await runner.run(adb.path, device.serial, ['push', tracebox.path, perfettoCommand], { timeoutMs: 120000 });
|
|
137
|
+
await runner.run(adb.path, device.serial, ['shell', `chmod 755 ${shellQuote(perfettoCommand)}`], { timeoutMs: 10000 });
|
|
138
|
+
pushedTracebox = true;
|
|
139
|
+
}
|
|
140
|
+
if (probe.apiLevel < 24) {
|
|
141
|
+
hostConfigPath = path.join(fs.mkdtempSync(path.join(os.tmpdir(), 'smartperfetto-capture-')), 'config.pbtxt');
|
|
142
|
+
fs.writeFileSync(hostConfigPath, input.configText, 'utf-8');
|
|
143
|
+
await runner.run(adb.path, device.serial, ['push', hostConfigPath, remoteConfigPath], { timeoutMs: 30000 });
|
|
144
|
+
pushedConfig = true;
|
|
145
|
+
pid = await startPerfettoWithDeviceConfig(adb.path, device.serial, runner, {
|
|
146
|
+
perfettoCommand,
|
|
147
|
+
remoteConfigPath,
|
|
148
|
+
remotePath,
|
|
149
|
+
noGuardrails: input.noGuardrails,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
pid = await startPerfettoWithStdin(adb.path, device.serial, runner, {
|
|
154
|
+
perfettoCommand,
|
|
155
|
+
remotePath,
|
|
156
|
+
configText: input.configText,
|
|
157
|
+
noGuardrails: input.noGuardrails,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
await waitForPerfettoExit(adb.path, device.serial, runner, {
|
|
161
|
+
pid,
|
|
162
|
+
killAfterMs,
|
|
163
|
+
hardTimeoutMs,
|
|
164
|
+
});
|
|
165
|
+
await runner.run(adb.path, device.serial, ['pull', remotePath, outPath], { timeoutMs: 180000 });
|
|
166
|
+
return {
|
|
167
|
+
target: 'android',
|
|
168
|
+
serial: device.serial,
|
|
169
|
+
app: input.app,
|
|
170
|
+
preset: input.preset,
|
|
171
|
+
configPath: input.configPath,
|
|
172
|
+
durationSeconds: durationMs / 1000,
|
|
173
|
+
out: outPath,
|
|
174
|
+
remotePath,
|
|
175
|
+
usedSideload: shouldSideload,
|
|
176
|
+
tools: {
|
|
177
|
+
adb,
|
|
178
|
+
...(tracebox ? { tracebox } : {}),
|
|
179
|
+
},
|
|
180
|
+
device: {
|
|
181
|
+
apiLevel: probe.apiLevel,
|
|
182
|
+
abi: probe.abi,
|
|
183
|
+
perfettoCommand,
|
|
184
|
+
},
|
|
185
|
+
preflight,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
if (pid) {
|
|
190
|
+
await runner.run(adb.path, device.serial, ['shell', `kill -TERM ${pid} >/dev/null 2>&1 || true`], { timeoutMs: 5000 })
|
|
191
|
+
.catch(() => undefined);
|
|
192
|
+
}
|
|
193
|
+
await runner.run(adb.path, device.serial, ['shell', `rm -f ${shellQuote(remotePath)}`], { timeoutMs: 10000 })
|
|
194
|
+
.catch(() => undefined);
|
|
195
|
+
if (pushedConfig) {
|
|
196
|
+
await runner.run(adb.path, device.serial, ['shell', `rm -f ${shellQuote(remoteConfigPath)}`], { timeoutMs: 10000 })
|
|
197
|
+
.catch(() => undefined);
|
|
198
|
+
}
|
|
199
|
+
if (pushedTracebox) {
|
|
200
|
+
await runner.run(adb.path, device.serial, ['shell', `rm -f ${shellQuote(perfettoCommand)}`], { timeoutMs: 10000 })
|
|
201
|
+
.catch(() => undefined);
|
|
202
|
+
}
|
|
203
|
+
if (hostConfigPath) {
|
|
204
|
+
await fs.promises.rm(path.dirname(hostConfigPath), { recursive: true, force: true }).catch(() => undefined);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async function runAndroidCapturePreflight(adbPath, serial, runner, opts = {}) {
|
|
209
|
+
const warnings = [];
|
|
210
|
+
let staleProcessesDetected = false;
|
|
211
|
+
let killedStaleProcesses = false;
|
|
212
|
+
const stale = await runner.run(adbPath, serial, ['shell', "ps -A | grep -E '(perfetto|simpleperf|traced)' | grep -v grep"], { timeoutMs: 5000 }).catch(() => ({ stdout: '', stderr: '' }));
|
|
213
|
+
const staleOutput = `${stale.stdout}\n${stale.stderr}`.trim();
|
|
214
|
+
if (staleOutput) {
|
|
215
|
+
staleProcessesDetected = true;
|
|
216
|
+
if (opts.killStale) {
|
|
217
|
+
await runner.run(adbPath, serial, ['shell', [
|
|
218
|
+
'pkill -9 simpleperf >/dev/null 2>&1 || true',
|
|
219
|
+
'pkill -9 perfetto >/dev/null 2>&1 || true',
|
|
220
|
+
'pkill -9 traced >/dev/null 2>&1 || true',
|
|
221
|
+
'pkill -9 traced_probes >/dev/null 2>&1 || true',
|
|
222
|
+
'sleep 2',
|
|
223
|
+
].join('; ')], { timeoutMs: 8000 }).catch(() => undefined);
|
|
224
|
+
killedStaleProcesses = true;
|
|
225
|
+
warnings.push('stale tracing processes were detected and --kill-stale was applied before capture');
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
warnings.push('stale perfetto/simpleperf/traced processes were detected; retry with --kill-stale if capture hangs');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const selinux = await runner.run(adbPath, serial, ['shell', 'getenforce'], { timeoutMs: 5000 })
|
|
232
|
+
.then((result) => `${result.stdout}\n${result.stderr}`.trim().split(/\r?\n/)[0]?.trim())
|
|
233
|
+
.catch(() => undefined);
|
|
234
|
+
if (selinux === 'Enforcing') {
|
|
235
|
+
warnings.push('SELinux is Enforcing; on rooted engineering devices, adb root && adb shell setenforce 0 may help if trace output is denied');
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
warnings,
|
|
239
|
+
selinux,
|
|
240
|
+
staleProcessesDetected,
|
|
241
|
+
killedStaleProcesses,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
async function listDevices(adbPath, runner) {
|
|
245
|
+
const { stdout, stderr } = await runner.run(adbPath, undefined, ['devices', '-l'], { timeoutMs: 8000 });
|
|
246
|
+
return parseAdbDevices(`${stdout}\n${stderr}`);
|
|
247
|
+
}
|
|
248
|
+
function parseAdbDevices(output) {
|
|
249
|
+
return output
|
|
250
|
+
.split(/\r?\n/)
|
|
251
|
+
.map((line) => line.trim())
|
|
252
|
+
.filter(Boolean)
|
|
253
|
+
.filter((line) => !line.startsWith('* daemon') && !line.startsWith('List of devices'))
|
|
254
|
+
.map((line) => {
|
|
255
|
+
const parts = line.split(/\s+/);
|
|
256
|
+
return {
|
|
257
|
+
serial: parts[0] || '',
|
|
258
|
+
state: parts[1] || 'unknown',
|
|
259
|
+
description: parts.slice(2).join(' ') || undefined,
|
|
260
|
+
};
|
|
261
|
+
})
|
|
262
|
+
.filter((device) => device.serial.length > 0);
|
|
263
|
+
}
|
|
264
|
+
function selectDevice(devices, serial) {
|
|
265
|
+
const ready = devices.filter((device) => device.state === 'device');
|
|
266
|
+
if (serial) {
|
|
267
|
+
const selected = ready.find((device) => device.serial === serial);
|
|
268
|
+
if (!selected)
|
|
269
|
+
throw new Error(`no connected adb device with serial ${serial}`);
|
|
270
|
+
return selected;
|
|
271
|
+
}
|
|
272
|
+
if (ready.length === 1)
|
|
273
|
+
return ready[0];
|
|
274
|
+
if (ready.length === 0)
|
|
275
|
+
throw new Error('no connected adb device');
|
|
276
|
+
throw new Error(`multiple adb devices connected; pass --serial (${ready.map((device) => device.serial).join(', ')})`);
|
|
277
|
+
}
|
|
278
|
+
async function probeAndroidDevice(adbPath, serial, runner) {
|
|
279
|
+
const { stdout, stderr } = await runner.run(adbPath, serial, ['shell', 'getprop ro.build.version.sdk; getprop ro.product.cpu.abi; whoami'], { timeoutMs: 10000 });
|
|
280
|
+
const lines = `${stdout}\n${stderr}`
|
|
281
|
+
.split(/\r?\n/)
|
|
282
|
+
.map((line) => line.trim())
|
|
283
|
+
.filter(Boolean)
|
|
284
|
+
.filter((line) => !line.startsWith('* daemon'));
|
|
285
|
+
const apiLevel = Number.parseInt(lines[0] ?? '', 10);
|
|
286
|
+
const abi = lines[1] ?? '';
|
|
287
|
+
if (!Number.isFinite(apiLevel) || apiLevel <= 0) {
|
|
288
|
+
throw new Error(`failed to read Android API level from ${serial}`);
|
|
289
|
+
}
|
|
290
|
+
if (!abi)
|
|
291
|
+
throw new Error(`failed to read Android ABI from ${serial}`);
|
|
292
|
+
return {
|
|
293
|
+
apiLevel,
|
|
294
|
+
abi,
|
|
295
|
+
shellUser: lines[2],
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
function resolveCaptureDurationMs(configDurationMs, cliDurationSeconds) {
|
|
299
|
+
if (cliDurationSeconds !== undefined) {
|
|
300
|
+
if (!Number.isFinite(cliDurationSeconds) || cliDurationSeconds <= 0) {
|
|
301
|
+
throw new Error('--duration must be a positive number of seconds');
|
|
302
|
+
}
|
|
303
|
+
return Math.round(cliDurationSeconds * 1000);
|
|
304
|
+
}
|
|
305
|
+
if (configDurationMs !== undefined)
|
|
306
|
+
return configDurationMs;
|
|
307
|
+
throw new Error('capture config has no duration_ms; pass --duration <seconds> so SmartPerfetto knows when to stop it');
|
|
308
|
+
}
|
|
309
|
+
function buildPerfettoBackgroundArgs(input) {
|
|
310
|
+
return [
|
|
311
|
+
'shell',
|
|
312
|
+
input.perfettoCommand,
|
|
313
|
+
'--background',
|
|
314
|
+
'--txt',
|
|
315
|
+
...(input.noGuardrails ? ['--no-guardrails'] : []),
|
|
316
|
+
'-o',
|
|
317
|
+
input.remotePath,
|
|
318
|
+
'-c',
|
|
319
|
+
'-',
|
|
320
|
+
];
|
|
321
|
+
}
|
|
322
|
+
async function startPerfettoWithStdin(adbPath, serial, runner, input) {
|
|
323
|
+
const result = await runner.run(adbPath, serial, buildPerfettoBackgroundArgs(input), { stdin: input.configText, timeoutMs: 30000 });
|
|
324
|
+
return parseBackgroundPid(`${result.stdout}\n${result.stderr}`);
|
|
325
|
+
}
|
|
326
|
+
async function startPerfettoWithDeviceConfig(adbPath, serial, runner, input) {
|
|
327
|
+
const cmd = [
|
|
328
|
+
`cat ${shellQuote(input.remoteConfigPath)}`,
|
|
329
|
+
'|',
|
|
330
|
+
shellQuote(input.perfettoCommand),
|
|
331
|
+
'--background',
|
|
332
|
+
'--txt',
|
|
333
|
+
...(input.noGuardrails ? ['--no-guardrails'] : []),
|
|
334
|
+
'-o',
|
|
335
|
+
shellQuote(input.remotePath),
|
|
336
|
+
'-c',
|
|
337
|
+
'-',
|
|
338
|
+
].join(' ');
|
|
339
|
+
const result = await runner.run(adbPath, serial, ['shell', cmd], { timeoutMs: 30000 });
|
|
340
|
+
return parseBackgroundPid(`${result.stdout}\n${result.stderr}`);
|
|
341
|
+
}
|
|
342
|
+
function parseBackgroundPid(output) {
|
|
343
|
+
const match = output.match(/^(\d+)$/m);
|
|
344
|
+
if (!match?.[1]) {
|
|
345
|
+
throw new Error(`failed to read perfetto background pid from adb output: ${output.trim() || '(empty)'}`);
|
|
346
|
+
}
|
|
347
|
+
return match[1];
|
|
348
|
+
}
|
|
349
|
+
async function waitForPerfettoExit(adbPath, serial, runner, input) {
|
|
350
|
+
const started = Date.now();
|
|
351
|
+
const killAt = input.killAfterMs !== undefined ? started + input.killAfterMs : undefined;
|
|
352
|
+
const hardDeadline = started + input.hardTimeoutMs;
|
|
353
|
+
let sentTerm = false;
|
|
354
|
+
while (Date.now() < hardDeadline) {
|
|
355
|
+
const poll = await runner.run(adbPath, serial, ['shell', `test -d /proc/${input.pid} && echo RUN || echo TERM`], { timeoutMs: 10000 }).catch((err) => ({ stdout: '', stderr: err.message }));
|
|
356
|
+
if (`${poll.stdout}\n${poll.stderr}`.includes('TERM'))
|
|
357
|
+
return;
|
|
358
|
+
if (killAt !== undefined && Date.now() >= killAt && !sentTerm) {
|
|
359
|
+
sentTerm = true;
|
|
360
|
+
await runner.run(adbPath, serial, ['shell', `kill -TERM ${input.pid}`], { timeoutMs: 5000 })
|
|
361
|
+
.catch(() => undefined);
|
|
362
|
+
}
|
|
363
|
+
await sleep(500);
|
|
364
|
+
}
|
|
365
|
+
await runner.run(adbPath, serial, ['shell', `kill -KILL ${input.pid}`], { timeoutMs: 5000 })
|
|
366
|
+
.catch(() => undefined);
|
|
367
|
+
throw new Error(`perfetto did not finish within ${Math.round(input.hardTimeoutMs / 1000)}s`);
|
|
368
|
+
}
|
|
369
|
+
function sleep(ms) {
|
|
370
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
371
|
+
}
|
|
372
|
+
function shellQuote(value) {
|
|
373
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=androidCapture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"androidCapture.js","sourceRoot":"","sources":["../../../src/cli-user/services/androidCapture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type TraceIntent } from '../../services/traceConfigGenerator';
|
|
2
|
+
import type { CaptureConfigRenderOptions, CapturePresetId } from '../types';
|
|
3
|
+
export interface CapturePresetDefinition {
|
|
4
|
+
id: CapturePresetId;
|
|
5
|
+
label: string;
|
|
6
|
+
intent: TraceIntent;
|
|
7
|
+
defaultDurationSeconds: number;
|
|
8
|
+
bufferSizeKb: number;
|
|
9
|
+
atraceCategories: string[];
|
|
10
|
+
ftraceEvents: string[];
|
|
11
|
+
dataSources: string[];
|
|
12
|
+
description: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const CAPTURE_PRESETS: CapturePresetDefinition[];
|
|
15
|
+
export declare function getCapturePreset(id: CapturePresetId): CapturePresetDefinition;
|
|
16
|
+
export declare function isCapturePresetId(value: string): value is CapturePresetId;
|
|
17
|
+
export declare function listCapturePresets(): CapturePresetDefinition[];
|
|
18
|
+
export declare function renderAndroidTraceConfig(opts: CaptureConfigRenderOptions): string;
|
|
19
|
+
export declare function readTraceConfigFile(configPath: string, opts?: {
|
|
20
|
+
durationSeconds?: number;
|
|
21
|
+
bufferSizeKb?: number;
|
|
22
|
+
}): {
|
|
23
|
+
path: string;
|
|
24
|
+
textproto: string;
|
|
25
|
+
durationMs?: number;
|
|
26
|
+
templated: boolean;
|
|
27
|
+
};
|
|
28
|
+
export declare function renderTraceConfigTemplate(textproto: string, opts?: {
|
|
29
|
+
durationSeconds?: number;
|
|
30
|
+
bufferSizeKb?: number;
|
|
31
|
+
}): {
|
|
32
|
+
textproto: string;
|
|
33
|
+
templated: boolean;
|
|
34
|
+
};
|
|
35
|
+
export declare function addAtraceCategories(textproto: string, categories: string[]): string;
|
|
36
|
+
export declare function calculateCaptureBufferSizeKb(durationSeconds: number, minimumKb?: number): number;
|
|
37
|
+
export declare function extractDurationMs(textproto: string): number | undefined;
|
|
38
|
+
//# sourceMappingURL=captureConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captureConfig.d.ts","sourceRoot":"","sources":["../../../src/cli-user/services/captureConfig.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EACV,0BAA0B,EAC1B,eAAe,EAChB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,eAAe,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAkDD,eAAO,MAAM,eAAe,EAAE,uBAAuB,EAiIpD,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,eAAe,GAAG,uBAAuB,CAI7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,eAAe,CAEzE;AAED,wBAAgB,kBAAkB,IAAI,uBAAuB,EAAE,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,CA6DjF;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAU9E;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAuB3C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CA2BnF;AAED,wBAAgB,4BAA4B,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,MAAM,CAO/F;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMvE"}
|