UI-1 构建通过 · 运行验收待补2026-09-03

Workbench alignment · Product spec

Perfowl 工作台 UI 与指标对齐方案 v1

根据用户提供的四张 PerfDog 客户端参考图,确定 USB 状态反馈、顶部截图、默认三组指标、多曲线模型和右下角指标选择器。UI-1 已批准并完成代码、单测、Release App 构建与签名检查;GUI 运行与真机视觉验收继续独立标记为待补,详见实施记录。

Design Plan PASSUI-1 已实现17 个同名指标运行验收待补

Reference breakdown

参考界面提炼出的结构

Scene 01CAPTURE
SCREEN
USB状态
✓
设备 A 已连接
FPSfps
CPU UsageAPPCpuTotalCPU
NetworkSendRecv
+
状态浮层是瞬时反馈连接徽标负责持续状态;顶部浮层只在启动发现、连接和断开事件后出现,1 秒后淡出,避免长期遮挡截图。
默认图表不依赖设备选择未选设备也显示 FPS、CPU Usage、Network 的空坐标系与图例,让用户提前知道测试将采什么。
指标选择器不隐藏差距连接后才显示右下角 `+`;未支持项仍在完整清单中,以禁用态和原因呈现。
参考而非像素复制。
保留参考产品的任务结构、交互位置、指标名称和选择逻辑;颜色、品牌图标、字体和细节继续使用 Perfowl 自有设计语言。

USB status

连接 / 断开提示状态机

启动扫描监听真实设备快照,不因列表缓存触发提示。
事件确认比较稳定设备标识集合,生成 connected / disconnected。
立即显示标题 `USB状态`,设备图标 + 状态文本。
保持 1 秒从事件确认时刻计时;新事件覆盖并重置。
淡出约 180–220 ms;持久状态仍留在标题栏与侧栏。
场景文案视觉规则
启动时已连接设备 A 已连接蓝色设备 + 青绿色勾首次稳定快照建立后展示一次。
运行中插入设备 A 已连接蓝色设备 + 青绿色勾设备进入可用集合后展示。
运行中断开设备 A 已断开灰色设备 + 叉立即清理所选设备/App;采集中按现有中断流程完成或失败。
启动无设备设备未连接灰色设备只在启动探测完成时出现一次,不按轮询重复弹出。

辅助定位建议:perfowl.usb.status-toast。自动化校验必须能观察出现、文案、1 秒保持和最终消失。

Screen context

顶部截图展示区域

项目产品规格边界
位置Scene 工具栏下方、全部性能曲线上方;USB Toast 覆盖在此区域顶部中央。不挤占左侧设备/App 选择链。
展示截图按设备原始宽高比 aspectFit 居中,深色留白,不裁切、不拉伸。屏幕旋转后按新尺寸自适应。
频率首版 1 秒一次。超时保留上一帧并标记“截图已过期”,不闪成黑图。定义为低频截图预览,不宣传为实时视频镜像。
未连接固定空态:连接设备后显示屏幕截图。默认三组指标仍继续显示为空图。
Session默认只在内存中预览;用户勾选 ScreenShot 后才保存媒体文件和时间戳。需记录采集时间、接收时间、文件名、失败原因和相对主时钟偏差。
资源保护只保留最新预览帧;落盘采用有界队列,截图失败不阻塞性能主采集。验收中单独测量 CPU、内存、带宽和对采样抖动的影响。

Default panels

未选择设备时也固定展示的三组指标

面板名曲线名当前来源未连接 / 缺源显示
FPSfpsDVT Graphics;当前口径是 foreground-device。等待设备;有值后仍标注前台设备范围,校准前保留 Experimental。
CPU UsageAPPCpu
TotalCPU
APPCpu 已来自目标进程 Sysmontap;TotalCPU 仅有 rawSystem 候选,尚未规范化。APPCpu 等待目标;TotalCPU 显示 Unsupported / 待校准,不画 0。
NetworkSend
Recv
rawSystem 和 DVT NetworkMonitor 均为候选,当前未进入 Swift/UI。显示 Unsupported / Network source not ready,不画 0。
需要先改图表模型。
当前 LiveMetricKind 是“一项一图一曲线”。目标模型应是 MetricPanelDefinition 包含多个 MetricSeriesDefinition,每条曲线独立声明 metricID、颜色、单位、scope、availability 和 quality。

Metric selector

右下角 `+` 与 17 个同名指标

只有设备已连接时显示右下角悬浮 `+`。点击后打开可滚动的大型指标面板:复选框、彩色圆形图标、名称、说明、能力状态;已选行为蓝色背景。名称严格保持如下拼写与大小写。

✓▣ScreenShotThe device same screen and synchronous display计划接入 · 1 s
◴StartupTiming(启动时间)The relevant time consumption of the application startup phase暂未支持
✓〽FPSThe number of frame rate by the process each second已接入
⌁Frame TimeThe time between frames to be rendered暂未支持
CPUCPU Core UsageThe percentage of the CPU for each core暂未支持
✓%CPU UsageThe percentage of the CPU used by the process部分支持
MBMemory UsageThe amount of memory used by the process已接入
GPUGPU UsageThe percentage of the GPU used by the process范围待校准
↕CSwitchThe number of process context switches by the process each second已接入
◷WakeupsThe number of thread wakeups by the process each second已接入
°CBattery TemperatureThe size of the battery temperature暂未支持
IODiskThe assessed physical disk performance metrics of the process已接入
℃Thermal StatusCurrent thermal status of the device暂未支持
✓⇅NetworkThe number of bytes received or send by the process each second候选源
▤BatteryThe amount of battery energy used by the total process暂未支持
⚡Energy UsageThe details of battery energy used by the app暂未支持
▥GPU CounterDetailed information of various GPU counters, in-depth analysis of GPU暂未支持

参考图中的模式提示应保留在说明区:Frame Time 为 USB / 系统版本敏感;Wakeups 为系统版本敏感;Battery 为 Wi-Fi 模式;Energy Usage 为 USB 模式。最终文案以真实 capability 结果为准,不能仅按静态版本号点亮。

Capability matrix

当前支持情况与补齐路径

指标状态当前证据 / 口径补齐方式
FPS已接入DVT Graphics → Collector → Swift → Session → UI;目前属于前台设备范围。保留 scope 提示,与 PerfDog/xctrace 同场校准后再升级为对齐状态。
CPU Usage部分支持APPCpu 已接入;TotalCPU 仅 rawSystem 候选。保存/探测 System 原字段,明确 0–100 或按核心累计口径,规范化 TotalCPU 并校准。
Memory Usage已接入Physical Footprint、Resident Memory 已有。顶层名称统一为 Memory Usage;首选 Physical Footprint,Resident 留作明细,记录单位和 scope。
GPU Usage部分支持Device/Renderer/Tiler GPU 已接入,但来自前台设备 Graphics。面板明确 foreground-device;与参考产品确认是否为进程 GPU,未证明前不改成 process。
CSwitch / Wakeups已接入目标进程累计计数与每秒速率已进入模型。只需名称、组合图、质量态与版本 capability 对齐。
Disk已接入Read / Write 累计值与每秒速率已具备。合并为 Disk 面板的 Read、Write 两条曲线;counter reset 第一帧显示 missing。
ScreenShot入口候选本机依赖存在 Screenshot.get_screenshot(),尚未进入产品链。新增 Sidecar adapter、1 秒有界采样、内存预览、可选 Session 媒体落盘和统一时钟。
Network入口候选rawSystem 有候选;DVT NetworkMonitor 提供连接/PID/收发字节候选,尚未规范化。先做整机与 PID 归属实验;能证明进程归属才标 process,否则只按 device scope 输出 Send/Recv。
StartupTiming(启动时间)暂未支持当前测试要求用户自行启动目标 App,没有冷启动计时协议。增加显式冷启动模式、生命周期事件和启动阶段时间轴;用 xctrace App Launch 做校准。
Frame Time暂未支持只有秒级 FPS,不能反推出逐帧时间。寻找稳定逐帧 DVT/CoreProfile 源,保存原始 frame timestamp/duration;用 xctrace Display/Hitches 校准。
CPU Core Usage暂未支持尚未把 System 分核字段映射为动态序列。探测 Sysmontap 分核数组;不足时用 CoreProfile/xctrace 增强,并按设备核心拓扑建序列。
Battery Temperature暂未支持没有已验证的稳定只读源。验证 Diagnostics/IORegistry 候选、版本和权限;无稳定入口继续返回 Unsupported。
Thermal Status暂未支持尚未完成原始枚举和系统语义映射。探测 Energy/Notifications/Diagnostics,保存原始枚举码并与系统 thermal state 校准。
Battery暂未支持模式敏感,USB 充电会扭曲耗电观察。建立 Wi-Fi 低频 Current/Voltage/Power 通道;USB 模式直接给出 unavailable 原因。
Energy Usage暂未支持DVT EnergyMonitor 是候选,尚未接入;分数不等于物理能量。按 PID 接入分类和 Total 相对分数,保存原始类别;与 xctrace Energy 对照并明确单位。
GPU Counter暂未支持常规 Graphics 只有利用率,没有详细 Counter。作为 CoreProfile/xctrace 增强模式实现,建立 SoC/iOS/Xcode 兼容矩阵和版本化 Registry。
额外已有字段不作为同级指标名展示。
Thread Count、Resident Memory 等继续保留在原始数据和明细层;在用户要求“名称与 PerfDog 一致”的前提下,不新增竞争性的顶层指标名称。

Delivery plan

建议的开发批次

UI-1
结构先落地,不接假数据

USB Toast、截图空态、默认三图、多曲线图表模型、右下角 `+`、17 项选择器和 Unsupported 状态。单测覆盖默认名称、事件计时和缺值不为 0。

DATA-1
默认指标真正可用

承接 rawSystem 的 TotalCPU,接入 Network Send/Recv,补齐 scope/unit/quality。真机做 CPU 单/多线程、纯上传/下载、前后台、断连重绑。

SHOT-1
截图低频预览

接入 Screenshot adapter、1 秒内存预览、可选落盘、主时钟关联和资源开销门禁。

NAME-1
已有源完整改名/分组

Memory Usage、GPU Usage、CSwitch、Wakeups、Disk 按参考名称进入选择器;来源范围和质量提示不因改名丢失。

ADV-1
高级与模式敏感指标

Frame Time、CPU Core Usage、StartupTiming、Thermal/Battery/Energy、GPU Counter 分项实验,通过一个能力再开放一个。

Acceptance gates

开发验收标准

  1. UI:未连接也看到三张默认图;连接后 `+` 出现;断开后 `+` 消失;17 个名称逐字匹配本页。
  2. Toast:启动已连接、运行中插入、运行中断开各一次;从事件确认到淡出可重复测量,目标为 1 秒保持 + 短淡出。
  3. 数据:CPU Usage 和 Network 支持同图多曲线;无样本、第一帧、counter reset、源失败均不出现伪 0。
  4. 截图:横竖屏不拉伸;1 秒预览不中断性能采集;禁用 ScreenShot 后不向 Session 写媒体。
  5. 构建:Swift 单测、Sidecar 测试、Debug/Release 构建分别记录;静态通过不代替界面运行证据。
  6. 真机:在当前连接设备上完成设备/App 选择、状态浮层、截图、开始/停止、Session;业务 App 名、设备名、UDID、Bundle ID、PID 只留在本地验收证据,不进入公开文档。
UI-1 已实施,下一个停止点是 DATA-1。
本批只搭好真实状态与能力容器,没有把 TotalCPU、Network、截图候选值伪装成已支持。补录 GUI/真机视觉验收后,再批准 DATA-1 接入 TotalCPU 与 Network Send/Recv。

Evidence

依据与证据边界

依据本页使用范围未证明
用户提供的四张 PerfDog 界面截图USB 浮层位置/层级、连接与断开视觉、右下角 `+`、指标行结构、名称及模式提示。截图没有证明每项在当前设备/系统上的底层数据源和计算口径。
Perfowl 当前源码 @ 33cac26确认当前单曲线模型、12 项 LiveMetricKind、rawSystem 已保存、当前默认指标和缺失 UI。未执行的新设计尚无构建或运行证据。
指标对齐开发计划底层来源、阶段排序、capability、scope、quality 和真机门禁。候选源不等于已支持。