外观
架构演进与全指标采集溯源白皮书
历史架构快照
本页保留 Perfowl 在对应阶段的架构与指标谱系,不承担当前能力矩阵或当前 Registry 合同职责。当前产品状态看 能力与证据模型 / 全指标能力矩阵,当前 metricID/source/definitionVersion 看 Registry 指标合同索引。文中的 64 项、Startup S6 等表述应按其记录日期理解,不用于覆盖后续开发事实。
本文记录 Perfowl 从无侵入 iOS 性能采集原型到 Collector Foundation 2.5 Beta 的架构主线和 64 项 Registry 指标谱系。它有意剔除临时编译排错、单次 UI 调试和环境噪声,只保留影响产品可信度、可演进性和证据边界的决定。
当前“64 项”表示 64 个静态 metricID 定义,不表示 64 项均已 E4 或与 PerfDog 数值等价。Startup S6 仍暂停;Battery 放电、ThermalStatus、GPU Counter data row、Frame PID 独占归因和外部同窗等门禁保持开放。
从 0 到 1 的架构演进
1. 从界面原型转向不可变 Session
早期基座先接通设备、应用目录和基础曲线,随后将采集模型收敛为 append-only Raw Session。每个事件携带 source、scope、unit/字段、quality、PID/generation 与单调时钟;派生 Metric、报告和导出可以重算,缺值不写 0。这一步把“曲线看起来正常”升级为“原始事实、算法与结果可以复查”。
2. 单一 DTX 运行内核
pymobiledevice3 11.3.1 被固定为唯一设备连接、隧道和 DTX transport owner。原因不是它覆盖全部指标,而是同一 Instruments 会话中必须有唯一消息读取与 channel 生命周期管理;若同时让 pymobiledevice3 与 py-ios-device 读取 DTX socket,会产生序列、channel 和停止时序竞争。
py-ios-device 2.4.26 仅作为 selector/schema 研究参考,不进入运行包、不打开 socket。Perfowl 在 pmd3_deep_services.py 与 Adapter 中用 pymobiledevice3 的 DTX 内核重建 Process NetworkStatistics、GPU Counter 等缺失能力。这样既继承连接与 iOS 17+ 路由能力,又避免双 Provider 争用。
3. Clean Adapter 与确定性 Metric Engine
系统服务被拆成 Sysmontap、Graphics、Device/Process Network、Energy、CoreProfile、GPU Counter、Lifecycle 与 Diagnostics Adapter。Adapter 只记录 Raw;RawMetricEngine 执行已入档 gauge、counter rate、interval rate、单位换算和 fail-closed 质量规则。报告层不再重新解释原始私有字段,也不允许 UI 取整回写 Session。
4. 逐帧、能耗与条件能力
CoreProfile RAW v2 被独立解码为 presented-frame 事件,再派生 Frame Time、Jank/Stutter、TinyJank 与透明的 Smooth candidate。Energy 保留 Apple source-native cost,不伪装物理功率;Battery 通过独立 Lockdown/Diagnostics 低频采样,并在外供电或充电时关闭电学值。GPU Counter 采用动态 schema 和 source-native count,数据行与设备公式未证明时不补 0、不猜单位。
5. 产品链与两级准备
SwiftUI Mac 客户端负责设备/App 两级 readiness、指标选择、实时滚动时间轴、截图时间线、停止/报告分阶段状态与 Session Review。客户端消费 Collector 统一 Metric Frame,而不是各自重算公式。商店 App Startup 完成 S1~S5 唯一启动、点击时延和停止审计,但九阶段 0/30,故后续保持暂停且不将 Fixture xctrace 证据外推为商店 App 完成。
当前采集架构
text
MacApp (SwiftUI)
├─ Device/App readiness + session orchestration
├─ Realtime metric projection / rolling timeline
└─ Review / screenshot / note / export
│ JSON lines / immutable artifacts
Collector Core (Python 3.12)
├─ pymobiledevice3 11.3.1: sole transport owner
├─ PMD3 native services
├─ Perfowl Clean Adapters (researched from schemas/selectors)
├─ Raw recorder + replay + SHA-256 manifests
├─ Metric Engine + Frame/Startup decoders
└─ Report/quality/calibration gates
│ USBMux / RSD / DTX / Lockdown
iOS 15+ device services全部 64 项指标命令谱系
下表逐项给出当前 Registry 的系统服务、底层调用、实现层和公式简式。精确边界算法、缺失/reset、取整及证据状态以 Canonical 指标页为准;字段级合同索引 由自动门禁与 Swift Registry 对照。
| # | metricID | scope | unit | source / sourceKey | definitionVersion | 系统服务与调用 | 实现归属 | Canonical |
|---|---|---|---|---|---|---|---|---|
| 1 | ios.process.cpu.non_normalized | process | percent | dvt.sysmontap / cpuUsage | 2 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 2 | ios.device.cpu.total | device | percent | dvt.sysmontap / SystemCPUUsage.CPU_TotalLoad | system-gauge.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 3 | ios.device.cpu.total.normalized | device | percent | dvt.sysmontap / SystemCPUUsage.CPU_TotalLoad/EnabledCPUs | raw-dvt-divided-by-enabled-cpu-count.candidate.v2 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 4 | ios.device.cpu.core_usage | device | percent | dvt.sysmontap / PerCPUUsage[*].CPU_TotalLoad | per-core-gauge.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 5 | ios.process.memory.physical_footprint | process | bytes | dvt.sysmontap / physFootprint | 2 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 6 | ios.process.memory.resident | process | bytes | dvt.sysmontap / memResidentSize | 2 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 7 | ios.process.memory.xcode_gauge | process | bytes | dvt.sysmontap / physFootprint | xcode-memory-candidate.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 8 | ios.process.memory.real | process | bytes | dvt.sysmontap / memResidentSize | resident-map.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 9 | ios.process.memory.virtual | process | bytes | dvt.sysmontap / memVirtualSize | raw-gauge.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 10 | ios.device.memory.available | device | bytes | dvt.sysmontap / System.vmFreeCount*VMPageSizeBytes | vm-free-pages-arm64-16k.candidate.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 11 | ios.process.thread.count | process | count | dvt.sysmontap / threadCount | 2 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 12 | ios.process.scheduler.context_switch_rate | process | count-per-second | dvt.sysmontap / ctxSwitch | counter-rate.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 13 | ios.process.scheduler.interrupt_wakeup_rate | process | count-per-second | dvt.sysmontap / intWakeups | counter-rate.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 14 | ios.process.disk.read_rate | process | bytes-per-second | dvt.sysmontap / diskBytesRead | counter-rate.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 15 | ios.process.disk.write_rate | process | bytes-per-second | dvt.sysmontap / diskBytesWritten | counter-rate.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 16 | ios.device.network.send_rate | device | bytes-per-second | dvt.networking / ConnectionUpdateEvent.tx_bytes | network-interval.v1 | com.apple.instruments.server.services.networking / DTX;NetworkMonitor(provider) | PMD3 Native + Perfowl window engine | 说明 |
| 17 | ios.device.network.receive_rate | device | bytes-per-second | dvt.networking / ConnectionUpdateEvent.rx_bytes | network-interval.v1 | com.apple.instruments.server.services.networking / DTX;NetworkMonitor(provider) | PMD3 Native + Perfowl window engine | 说明 |
| 18 | ios.process.network.send_rate | process | bytes-per-second | dvt.debug-gauge.network-statistics / net.tx.bytes.delta/time | source-interval-rate.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.NetworkStatistics / DTX;ProcessNetworkStatistics.sampleAttributes:forPIDs: | Perfowl Clean Adapter on PMD3 DTX | 说明 |
| 19 | ios.process.network.receive_rate | process | bytes-per-second | dvt.debug-gauge.network-statistics / net.rx.bytes.delta/time | source-interval-rate.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.NetworkStatistics / DTX;ProcessNetworkStatistics.sampleAttributes:forPIDs: | Perfowl Clean Adapter on PMD3 DTX | 说明 |
| 20 | ios.foreground.fps | foreground-device | frames-per-second | dvt.graphics / CoreAnimationFramesPerSecond | 2 | com.apple.instruments.server.services.graphics.opengl / DTX;Graphics(provider) | PMD3 Native + Perfowl projection | 说明 |
| 21 | ios.foreground.gpu.renderer_utilization | foreground-device | percent | dvt.graphics / Renderer Utilization % | 2 | com.apple.instruments.server.services.graphics.opengl / DTX;Graphics(provider) | PMD3 Native + Perfowl projection | 说明 |
| 22 | ios.foreground.gpu.tiler_utilization | foreground-device | percent | dvt.graphics / Tiler Utilization % | 2 | com.apple.instruments.server.services.graphics.opengl / DTX;Graphics(provider) | PMD3 Native + Perfowl projection | 说明 |
| 23 | ios.foreground.gpu.device_utilization | foreground-device | percent | dvt.graphics / Device Utilization % | 2 | com.apple.instruments.server.services.graphics.opengl / DTX;Graphics(provider) | PMD3 Native + Perfowl projection | 说明 |
| 24 | ios.frame.time | foreground-device | milliseconds | frame-pipeline / presentedFrame.timestampNs | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 25 | ios.frame.fps.average | foreground-device | frames-per-second | frame-pipeline / 1000/mean(FTime) | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 26 | ios.frame.fps.at_least_18_percent | foreground-device | percent | frame-pipeline / instantaneousFPS>=18 | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 27 | ios.frame.fps.at_least_25_percent | foreground-device | percent | frame-pipeline / instantaneousFPS>=25 | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 28 | ios.frame.ftime_ge_100_percent | foreground-device | percent | frame-pipeline / FTime>=100ms | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 29 | ios.frame.ftime_positive_delta_gt_100_per_hour | foreground-device | count-per-hour | frame-pipeline / currentFTime-previousFTime>100ms | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 30 | ios.frame.drop_per_hour | foreground-device | count-per-hour | frame-pipeline / previousFPS-currentFPS>8 | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 31 | ios.frame.med_range_percent | foreground-device | percent | frame-pipeline / FPS within median±20% | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 32 | ios.frame.one_percent_low_fps | foreground-device | frames-per-second | frame-pipeline / 1000/mean(slowest ceil(1%) FTime) | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 33 | ios.frame.small_jank_per_10min | foreground-device | count-per-10-minutes | frame-pipeline / previous3Mean*2 and FTime>1000/24ms | tiny-jank.perfdog-public.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 34 | ios.frame.jank_per_10min | foreground-device | count-per-10-minutes | frame-pipeline / previous3Mean*2 and 83.33ms | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 35 | ios.frame.big_jank_per_10min | foreground-device | count-per-10-minutes | frame-pipeline / previous3Mean*2 and 125ms | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 36 | ios.frame.stutter_percent | foreground-device | percent | frame-pipeline / sum(jank excess time)/duration | frame-report.candidate.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 37 | ios.frame.tiny_jank_per_10min | foreground-device | count-per-10-minutes | frame-pipeline / previous3Mean*2 and FTime>1000/24ms | tiny-jank.perfdog-public.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 38 | ios.frame.smooth | foreground-device | score | frame-pipeline / 100*sqrt(mean(((FTime-median(FTime))/median(FTime))^2)) | perfowl-smooth.robust-rms.candidate.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 39 | ios.process.energy.total_cost | process | source-native-cost | dvt.debug-gauge.energy / energy.cost | energy-total-gauge.candidate.v1 | com.apple.xcode.debug-gauge-data-providers.Energy / DTX;EnergyMonitor(provider, [pid]) | PMD3 Native + Perfowl quality gate | 说明 |
| 40 | ios.process.energy.cpu_cost | process | source-native-cost | dvt.debug-gauge.energy / energy.cpu.cost | energy-cost-gauge.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.Energy / DTX;EnergyMonitor(provider, [pid]) | PMD3 Native + Perfowl quality gate | 说明 |
| 41 | ios.process.energy.gpu_cost | process | source-native-cost | dvt.debug-gauge.energy / energy.gpu.cost | energy-cost-gauge.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.Energy / DTX;EnergyMonitor(provider, [pid]) | PMD3 Native + Perfowl quality gate | 说明 |
| 42 | ios.process.energy.network_cost | process | source-native-cost | dvt.debug-gauge.energy / energy.networking.cost | energy-cost-gauge.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.Energy / DTX;EnergyMonitor(provider, [pid]) | PMD3 Native + Perfowl quality gate | 说明 |
| 43 | ios.process.energy.location_cost | process | source-native-cost | dvt.debug-gauge.energy / energy.location.cost | energy-cost-gauge.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.Energy / DTX;EnergyMonitor(provider, [pid]) | PMD3 Native + Perfowl quality gate | 说明 |
| 44 | ios.process.energy.display_cost | process | source-native-cost | dvt.debug-gauge.energy / energy.display.cost | energy-cost-gauge.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.Energy / DTX;EnergyMonitor(provider, [pid]) | PMD3 Native + Perfowl quality gate | 说明 |
| 45 | ios.process.energy.overhead | process | source-native-cost | dvt.debug-gauge.energy / energy.overhead | energy-cost-gauge.candidate.v2 | com.apple.xcode.debug-gauge-data-providers.Energy / DTX;EnergyMonitor(provider, [pid]) | PMD3 Native + Perfowl quality gate | 说明 |
| 46 | ios.device.battery.current | device | milliampere | diagnostics.ioregistry / InstantAmperage when ExternalConnected=false and IsCharging=false | battery-discharge-current.candidate.v2 | com.apple.mobile.diagnostics_relay / Lockdown;DiagnosticsService.get_battery() | PMD3 Lockdown + Perfowl condition engine | 说明 |
| 47 | ios.device.battery.voltage | device | millivolt | diagnostics.ioregistry / Voltage when ExternalConnected=false and IsCharging=false | battery-voltage.candidate.v2 | com.apple.mobile.diagnostics_relay / Lockdown;DiagnosticsService.get_battery() | PMD3 Lockdown + Perfowl condition engine | 说明 |
| 48 | ios.device.battery.power | device | milliwatt | diagnostics.ioregistry / abs(InstantAmperage)*Voltage/1000 in same battery-only snapshot | battery-discharge-power.candidate.v2 | com.apple.mobile.diagnostics_relay / Lockdown;DiagnosticsService.get_battery() | PMD3 Lockdown + Perfowl condition engine | 说明 |
| 49 | ios.device.battery.temperature_raw | device | source-native | diagnostics.ioregistry / Temperature | battery-temperature-raw.v1 | com.apple.mobile.diagnostics_relay / Lockdown;DiagnosticsService.get_battery() | PMD3 Lockdown + Perfowl condition engine | 说明 |
| 50 | ios.device.battery.temperature_celsius | device | degree-celsius | diagnostics.ioregistry / Temperature/100 | centi-celsius-to-celsius.candidate.v1 | com.apple.mobile.diagnostics_relay / Lockdown;DiagnosticsService.get_battery() | PMD3 Lockdown + Perfowl condition engine | 说明 |
| 51 | ios.device.thermal.status | device | enum-raw | diagnostics.ioregistry / ThermalStatus | thermal-status-enum.candidate.v2 | com.apple.mobile.diagnostics_relay / Lockdown;DiagnosticsService.get_battery() | PMD3 Lockdown + Perfowl condition engine | 说明 |
| 52 | ios.device.gpu.counter.source_native | device | source-native-count | dvt.instruments.gpu / dynamic-schema[counter] | gpu-counter-source-native.candidate.v1 | com.apple.instruments.server.services.gpu / DTX;GPUCounterStream request/configure/start/data | Perfowl Clean Adapter on PMD3 DTX | 说明 |
| 53 | ios.process.startup.observed_running_ms | process | milliseconds | lifecycle-observer / observedRunning-launchRequested | startup-observation.candidate.v2 | processcontrol + deviceinfo / DTX;ProcessControl.launch + runningProcesses | PMD3 Native + Perfowl monotonic observation | 说明 |
| 54 | ios.process.startup.foreground_ready_ms | process | milliseconds | lifecycle-observer / observedForeground-launchRequested | startup-observation.candidate.v2 | processcontrol + deviceinfo / DTX;ProcessControl.launch + runningProcesses | PMD3 Native + Perfowl monotonic observation | 说明 |
| 55 | ios.process.startup.app_launch_total_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / max(Initial Frame Rendering.end)-min(complete System Interface Initialization.start) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 56 | ios.process.startup.system_interface_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[System Interface Initialization]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 57 | ios.process.startup.static_runtime_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[Static Runtime Initialization]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 58 | ios.process.startup.uikit_initialization_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[UIKit Initialization]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 59 | ios.process.startup.uikit_scene_creation_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[UIKit Scene Creation]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 60 | ios.process.startup.will_finish_launching_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[willFinishLaunchingWithOptions()]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 61 | ios.process.startup.did_finish_launching_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[didFinishLaunchingWithOptions()]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 62 | ios.process.startup.scene_will_connect_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[sceneWillConnectTo()]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 63 | ios.process.startup.scene_will_enter_foreground_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[sceneWillEnterForeground()]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
| 64 | ios.process.startup.initial_frame_rendering_ms | process | milliseconds | dvt.coreprofilesessiontap.lifecycle / sum(complete span duration[Initial Frame Rendering]) | core-profile-app-lifecycle.candidate.v3 | coreprofilesessiontap + processcontrol / DTX;CoreProfileRawAdapter + RealtimeLaunchTraceDecoder | PMD3 transport + Perfowl lifecycle decoder | 说明 |
当前能力边界
| 能力 | 当前事实 | 尚未关门 |
|---|---|---|
| 基础 Sysmontap/Graphics | iOS 16/17/18 已有 E4 来源候选 | iOS 15、17.4–17.x、外部同窗数值 |
| Process/Device Network | 双 scope 与源时钟公式已进入 E4 candidate | 与竞品同窗、更多路由/长时稳定性 |
| Frame Pipeline | 跨 iOS 来源、确定性回放和候选公式已建立 | 目标 PID 独占归因、真实四场景长窗与阈值 |
| Energy | 七项 source-native cost 已有 iOS 17/18 E4 来源 | 物理单位/等级阈值与外部同窗 |
| Battery/Thermal | 条件链和温度来源已建立 | 纯放电 Current/Voltage/Power E4;稳定 ThermalStatus 0–3 来源 |
| GPU Counter | 控制面、schema 与 decoder E2;iOS 17 schema observed | 可解码 data row、跨 SoC 公式和单位 |
| Startup | 商店 App 单次启动/点击时延/停止 30/30 E4 | 九阶段完整率 0/30;S6 暂停 |
| 发布 | x86_64 内部 candidate、ad-hoc 签名 | universal2、Developer ID、公证、完整 notices 与 GPL 法务结论 |
版本历史
| 版本 | 日期 | 变更 | 来源 |
|---|---|---|---|
| v1 | 2026-09-08 | 阶段收口:沉淀单 DTX 架构真相、Clean Adapter 演进、64 项命令谱系与未关门能力 | P0 知识库深化结果 |