SmartPerfetto v1.15.1 是 v1.15 的修复版本,补充了原生 SQLite 安装诊断、测试数据隔离和 npm 消费项目的安装验证。v1.15 引入的逐轮源码与文档选择、答案交付和核验流程继续保留。
从 v1.14 升级时,还会获得进程实例隔离、呈现节奏、堆转储增长和 CPU 簇负载修复。旧的内置 Android Internals Wiki Pack 和几组停用 API 已移除,已有调用需要检查迁移说明。
项目地址:Gracker/SmartPerfetto。

v1.15.1:安装后检查 SQLite,测试使用独立数据
smp doctor --format json 新增 sqlite_native 检查:打开独立的内存 SQLite 数据库,执行 SELECT 1,再关闭连接。缺少原生绑定、查询失败或关闭失败都会报错,AI 关闭时也会执行。这个探针不读取用户的持久化会话库;--version 和 --help 能运行,并不能证明原生数据库已经可用。
公开 npm 安装后的烟雾检查也增加了实际操作。检查在独立消费项目中显式批准经过审核的依赖版本,验证 doctor 的 SQLite 检查,再用固定版本的 Trace 测试文件执行真实 SQL 查询。发布者的 allowScripts 不能替消费项目授权。安装时如果 npm 提示依赖脚本被 blocked 或 skipped,需要先审查相关脚本,再按安装方式批准所需依赖;具体步骤见 CLI 安装说明和 npm 安装策略。是否受影响取决于 npm 的版本与配置,不能只凭版本号判断脚本一定被阻止。
相关测试改用各自拥有的临时数据库和数据目录。Agent 路由集成测试在导入运行模块前设置数据库、Provider、日志和场景产物目录,先结束自有会话、流和存储连接,再删除临时目录。这些测试不再依赖默认用户数据库,日志清理也限制在测试目录内。
在输入框旁选择本轮上下文
源码库和知识库的选择入口移到了输入框旁。展开「上下文」后,可以分别选择本轮使用的源码和文档;「管理…」负责注册目录、修改范围和维护可选索引。
源码仍然可以按需搜索和读取,不必先等整个工程建完索引。搜索结果会优先考虑声明位置和 Trace 标记,模型也可以查找文件、读取某一行附近的实现,再把对应位置写进结果。源码深度提供智能判断、快速定位和完整分析三个选项,用来控制读取预算。
读取预算与发送授权各有自己的作用。源码范围、可发送的文件类型和正文授权需要经过披露与确认;每次模型调用前都会再检查当前授权。文档知识库也要单独允许发送给 Provider。更大的读取预算不会自动扩大已经同意的范围。

Trace 提供运行事实;源码用于解释实现;知识库提供背景资料。图中的箭头表示输入角色,不表示已经证明因果关系。
例如,Trace 中看到一段主线程等待,源码可以帮助定位对应调用和实现,文档可以解释系统机制。等待由谁造成、是否拖慢了当前场景,仍要看本轮 Trace 的调度、调用关系和时间范围证据。
文档文件夹可以直接作为知识库
现在可以注册普通文档文件夹,让模型在选中的知识库里搜索并读取章节。Web 提供文件夹选择、索引、授权和删除操作,CLI 也有对应的管理命令。
Android Internals Wiki 在这里改成了普通文档知识库。需要使用它时,注册自己有权使用的文档目录,再按轮选择。安装包不再附带旧的签名 Knowledge Pack,smp knowledge-pack 命令也已移除。历史会话和报告里已经保存的背景引用仍会保留。
v1.15 增加的 smp knowledge consent <id> --enable|--disable 可以修改已有知识库的发送授权。Web 在开启前显示确认说明;CLI 的 --enable 表示授权,并在成功后输出发送、保存与服务方留存说明。模型实际读了哪些文档,也会记录使用回执。
答案先出现,核验随后完成
支持答案流式输出的运行时,会在模型写作时展示临时草稿。正文生成后,同一个回答位置会显示完整答案;需要语义复核时,旁边保留待核验提示。最终事件到达后,才显示这一轮的交付状态。
草稿只存在于当前显示中,不写入历史。HTML 报告、CLI 文件和分析快照继续保存最终结论、声明和证据来源,方便之后比较或复查。
本轮选择了启用的源码库或知识库时,生成的报告和分析快照只对创建者开放,不能切换为工作区共享。发送给 AI 服务的文本仍受该服务自身配置与留存规则约束。
停止操作也随交付阶段变化:正文出现之前,停止会取消整轮;正文已经交付、复核还在进行时,第一次停止只结束复核,结果保留未核验状态。Web 再次停止会进入有界的强制停止流程。CLI 文本输出在正文出现后,第一次 Ctrl-C 也只停止复核,但第二次会取消整轮且不保存;复核停止后超时未提交,也不保存。JSON 和 NDJSON 不输出临时草稿,第一次 Ctrl-C 就取消整轮。
v1.15 已把五个运行时的最终状态统一交给产品侧处理。运行时负责记录原生完成情况,以及是否需要一次有界的声明修复或正文补全;最终核验负责判断声明与证据、正文是否相符。Provider 报错、超时、用户取消和核验失败分别记录。
滑动分析同时看呈现节奏和帧耗时
滑动概览现在把呈现节奏放在帧耗时旁边。FrameTimeline 标记、Buffer Stuffing、相邻呈现间隔和 doFrame 起点间隔各自保留原来的含义。
这对高刷新率场景尤其有用:一批帧带有 Buffer Stuffing 标签时,还需要看实际呈现是否均匀,以及有没有混合的 Missed 或 Dropped 证据。缺少呈现观测时,结果会说明尚未测量,不能拿 doFrame 起点节奏代替上屏间隔。
点击响应分析也分清了物理输入、应用投递和 monitor 副本。根据时间接近推测出的帧关联,会继续标为候选;它不能直接计作已经确认的上屏响应。
进程实例隔离和 CPU 负载修复
点击响应、CPU 和启动详情支持更明确的进程实例范围。这里使用 UPID——Trace 内的进程实例标识。应用重启后,即使包名没有变化,旧实例的证据也不能自动归到新实例。
测试会在相同包名、其他进程和重启实例之间检查 SQL 的隔离情况。它检查查询是否依赖所选 UPID,而不只检查是否成功执行。
v1.15 的发布审查修复了 CPU 簇负载的两处计算问题。原先窗口分母扣除了休眠时间,Running 区间的分子却仍按墙钟累加;区间跨休眠时,测试能得到 200% 的负载。现在两边统一使用单调时钟;任一转换不可用时,两边一起回退墙钟。整个窗口都在休眠时,醒着的时长和活跃核心数为零,负载百分比为空。
另一处发生在多设备 Trace:两台设备的 CPU 0 不能合并成一个核心。身份无法区分,或 CPU 元数据存在歧义时,簇负载会返回不可用原因,相关数值为空。单设备仅缺少容量信息时,未分类核心仍可以测量。修复没有把超过 100% 的结果直接截到 100%。
此外,堆转储分析增加了类首尾增长、可达实例和 dominated 大小的观察;框架进程状态、wakelock、standby、freezer 与持锁方区间也保留各自的数据缺失和能力限制。
升级时检查这些旧入口
| 旧入口或配置 | 自 v1.15 起的处理 |
|---|---|
内置 Wiki Pack、smp knowledge-pack |
注册普通文档知识库,再按轮选择 |
/api/perfetto-sql/*、/api/template-analysis/*、/api/sql/* |
返回 410;按响应的迁移信息选择 Skill 或工作区 Agent API。部分旧入口没有直接替代,先检查新请求合同 |
/api/perfetto/* |
已移除,返回 404;上传与加载使用 Trace API |
自定义 Skill 的 ai_summary、ai_decision、ai_assist |
不再支持模型调用步骤,验证器会拒绝这类定义 |
| Provider 的旧 Claude verifier timeout 和 verification toggle | 已移除;最终核验由共享交付流程管理 |
源码部署还修复了一个下载权限问题:开发模式曾在 API 外提供 /uploads 静态下载入口,知道 Trace ID 后,文件读取没有经过认证和归属检查。现在这个入口已移除,Trace 下载统一走受保护的 Trace API。默认配置的 Docker 与便携包使用生产模式,原本没有暴露这一入口。
源码运行路径仍是 ./start.sh,使用仓库提交的前端预构建。CLI 要求 Node.js 24;三平台便携包自带运行时。已有数据目录和 Provider 配置按各自的迁移规则处理。
下载与核验结果怎么读
从 v1.15.1 发布页 获取 Windows x64、macOS arm64 或 Linux x64 便携包。终端用户可以安装指定版本:
1 | npm install -g @gracker/smartperfetto@1.15.1 |
项目测试验证了确定性执行、SQL 语义、身份隔离和交付合同,真实 Provider 的结果仍要单独检查。长启动报告中,模型有时会写出与声明不一致的数值,或者没有声明的判断;最终核验会把这些答案标为部分交付或未核验。本次 DeepSeek 实测也遇到了这种情况,答案正文会保留,失败原因不会被隐藏。
本次 OpenCode 启动实测还出现了声明已经返回、正文却为空的情况,最终核验拒绝交付。当前保存的材料不足以确认正文补全在哪一步失败,尚未定位到确定的软件回归。OpenAI 滑动实测也没有通过声明事实的验收。因此,这次更新不能据此宣称所有运行时的真实长报告都已通过测试。