外观
Registry 指标合同索引
本页是 PerformanceModels.swift 当前 MetricDefinition 的机器合同审阅镜像。当前 Registry 数量由代码、site/data/metric-contracts.json 与构建门禁共同确定,不再手写进页面标题。每行冻结 metricID、scope、unit、source、sourceKey、算法版本、服务/通道、调用方式与实现归属;具体边界、质量、公式推导和证据等级进入对应 Canonical 指标页。
契约与代码严密对齐
“合同一致”表示文档与当前产品代码的真实 Registry 字段完全严密对齐,由自动化门禁保证零漂移。每一项指标均可在对应 Canonical 指标专论中查阅深度业务含义与测试基线。
合同字段与治理规则
sourceKey是 Registry 中的公式/字段简式,不替代 Canonical 页的完整边界算法。definitionVersion变化前必须先修订 Canonical 页的公式与版本历史。source-native-cost与source-native-count不得在缺少设备公式时改名为物理功率、利用率或带宽。- 一个 metricID 只能由一个
publishedCanonical 指标页拥有;历史版本页必须保持superseded。
全量合同表
| # | 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 | physical-footprint.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 6 | 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 | 说明 |
| 7 | 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 | 说明 |
| 8 | ios.device.memory.available | device | bytes | dvt.sysmontap / System.(vmFreeCount+vmExtPageCount+vmPurgeableCount)*VMPageSizeBytes | memorystatus-available.approx-no-secluded.candidate.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 9 | ios.device.memory.free | device | bytes | dvt.sysmontap / System.vmFreeCount*VMPageSizeBytes | vm-free-pages.v1 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 10 | 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 | 说明 |
| 11 | ios.process.scheduler.context_switch_rate | process | count-per-second | dvt.sysmontap / ctxSwitch | counter-rate.source-clock.exact-counter.candidate.v3 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 12 | ios.process.scheduler.interrupt_wakeup_rate | process | count-per-second | dvt.sysmontap / intWakeups | counter-rate.source-clock.exact-counter.candidate.v3 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 13 | ios.process.disk.read_rate | process | bytes-per-second | dvt.sysmontap / diskBytesRead | counter-rate.source-clock.exact-counter.candidate.v3 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 14 | ios.process.disk.write_rate | process | bytes-per-second | dvt.sysmontap / diskBytesWritten | counter-rate.source-clock.exact-counter.candidate.v3 | com.apple.instruments.server.services.sysmontap / DTX;Sysmontap.create(provider, interval=500) | PMD3 Native + Perfowl Metric Engine | 说明 |
| 15 | ios.device.network.send_rate | device | bytes-per-second | dvt.networking / ConnectionUpdateEvent.tx_bytes(1s 按时关窗/来源完成发表、扣除 time<0 初始快照字节;metadata-only缺值) | network-window-rate.v7 | com.apple.instruments.server.services.networking / DTX;NetworkMonitor(provider) | PMD3 Native + Perfowl window engine;仅快照窗 warmup 、无本窗源字段 missing -source | 说明 |
| 16 | ios.device.network.receive_rate | device | bytes-per-second | dvt.networking / ConnectionUpdateEvent.rx_bytes(1s 按时关窗/来源完成发表、扣除 time<0 初始快照字节;metadata-only缺值) | network-window-rate.v7 | com.apple.instruments.server.services.networking / DTX;NetworkMonitor(provider) | PMD3 Native + Perfowl window engine;仅快照窗 warmup、无本窗源字段 missing-source | 说明 |
| 17 | ios.process.network.send_rate | process | bytes-per-second | dvt.debug-gauge.network-statistics / net.tx.bytes.delta/time | source-interval-rate.candidate.v3 | com.apple.xcode.debug-gauge-data-providers.NetworkStatistics / DTX;ProcessNetworkStatistics.sampleAttributes:forPIDs: | Perfowl Clean Adapter on PMD3 DTX | 说明 |
| 18 | ios.process.network.receive_rate | process | bytes-per-second | dvt.debug-gauge.network-statistics / net.rx.bytes.delta/time | source-interval-rate.candidate.v3 | com.apple.xcode.debug-gauge-data-providers.NetworkStatistics / DTX;ProcessNetworkStatistics.sampleAttributes:forPIDs: | Perfowl Clean Adapter on PMD3 DTX | 说明 |
| 19 | ios.foreground.fps | foreground-device | frames-per-second | activitytrace-framelifetime / count(presentationTimestamp in trailing 1 second) | activitytrace-framelifetime-window-fps.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + DisplayPerformanceProjector | PMD3 transport + Perfowl Clean Adapter | 说明 |
| 20 | 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 | 说明 |
| 21 | 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 | 说明 |
| 22 | 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 | 说明 |
| 23 | ios.frame.time | foreground-device | milliseconds | activitytrace-framelifetime / (end_time - prev_frame) * timebase;iOS 26 FrameUpdate: (base_mct + FrameLifetimeInterval - FramePrevious) * timebase | activitytrace-framelifetime-presentation-gap.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + FrameLifetimeDecoder | PMD3 transport + Perfowl Clean Adapter | 说明 |
| 24 | ios.frame.fps.average | foreground-device | frames-per-second | frame-pipeline / mean(per-second FPS) | per-second-fps.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 25 | ios.frame.fps.at_least_18_percent | foreground-device | percent | frame-pipeline / share of per-second FPS>=18 | per-second-fps.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 26 | ios.frame.fps.at_least_25_percent | foreground-device | percent | frame-pipeline / share of per-second FPS>=25 | per-second-fps.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 27 | 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 | 说明 |
| 28 | 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 | 说明 |
| 29 | ios.frame.drop_per_hour | foreground-device | count-per-hour | frame-pipeline / count(per-second FPS[k-1]-FPS[k]>8)/(t_last-t_first)*3600 | per-second-fps.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 30 | ios.frame.med_range_percent | foreground-device | percent | frame-pipeline / share of per-second FPS within median±20% | per-second-fps.v1 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 31 | 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 | 说明 |
| 32 | 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 | 说明 |
| 33 | ios.frame.jank_per_10min | foreground-device | count-per-10-minutes | frame-pipeline / previous3Mean*2 and 83.33ms, no Jank among previous 3 | jank.perfdog-dedup.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 34 | ios.frame.big_jank_per_10min | foreground-device | count-per-10-minutes | frame-pipeline / previous3Mean*2 and 125ms, no Jank among previous 3 | big-jank.perfdog-dedup.v3 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 35 | ios.frame.stutter_percent | foreground-device | percent | frame-pipeline / sum(counted Jank FTime)/duration | stutter.jank-frame-time-share.v2 | com.apple.instruments.server.services.coreprofilesessiontap / DTX;CoreProfileSessionTap + RealtimeFrameDecoder | PMD3 transport + Perfowl decoder/report | 说明 |
| 36 | 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 | 说明 |
| 37 | 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 | 说明 |
| 38 | 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 | 说明 |
| 39 | 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 | 说明 |
| 40 | 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 | 说明 |
| 41 | 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 | 说明 |
| 42 | 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 | 说明 |
| 43 | 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 | 说明 |
| 44 | 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 | 说明 |
| 45 | 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 | 说明 |
| 46 | 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 | 说明 |
| 47 | 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 | 说明 |
| 48 | 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 | 说明 |
| 49 | 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 | 说明 |
| 50 | 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 | 说明 |
| 51 | 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 | 说明 |
| 52 | 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 | 说明 |
| 53 | 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 | 说明 |
| 54 | 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 | 说明 |
| 55 | 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 | 说明 |
| 56 | 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 | 说明 |
| 57 | 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 | 说明 |
| 58 | 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 | 说明 |
| 59 | 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 | 说明 |
| 60 | 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 | 说明 |
| 61 | 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 | 说明 |
| 62 | 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 | 说明 |
| 63 | 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 | 说明 |
| 64 | ios.frame.time.p95 | foreground-device | milliseconds | activitytrace-framelifetime / rolling-p95(frameTimeMs, 10s) | activitytrace-framelifetime-p95.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + DisplayPerformanceProjector | PMD3 transport + Perfowl Clean Adapter | 说明 |
| 65 | ios.display.refresh_rate | foreground-device | hertz | activitytrace-framelifetime / refresh_interval converted through mach timebase | activitytrace-framelifetime-refresh-rate.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + DisplayPerformanceProjector | PMD3 transport + Perfowl Clean Adapter | 说明 |
| 66 | ios.frame.pacing_jitter | foreground-device | milliseconds | activitytrace-framelifetime / P95(frameTimeMs)-P50(frameTimeMs), rolling 10s | activitytrace-framelifetime-jitter.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + DisplayPerformanceProjector | PMD3 transport + Perfowl Clean Adapter | 说明 |
| 67 | ios.frame.hitch_time_ratio | foreground-device | milliseconds-per-second | frame-pipeline / sum(hitch)/animation time; hitch = present - max(prevPresent+Vx, begin+steady lifetime) when >= V/2 | perfowl-hitch.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + HitchAccumulator | PMD3 transport + Perfowl decoder/report | 说明 |
| 68 | ios.frame.hitch_count | foreground-device | count | frame-pipeline / count(hitch > 0) during animation | perfowl-hitch.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + HitchAccumulator | PMD3 transport + Perfowl decoder/report | 说明 |
| 69 | ios.frame.hitch_max | foreground-device | milliseconds | frame-pipeline / max(hitch) | perfowl-hitch.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + HitchAccumulator | PMD3 transport + Perfowl decoder/report | 说明 |
| 70 | ios.frame.animation_time | foreground-device | seconds | frame-pipeline / sum(present - prevPresent) over continuous and paced frames | perfowl-hitch.v1 | com.apple.instruments.server.services.activitytracetap / DTX;ActivityTraceFrameLifetimeRawAdapter + HitchAccumulator | PMD3 transport + Perfowl decoder/report | 说明 |
自动一致性门禁
python3 site/scripts/metric-knowledge-gate.py 会检查:Registry 总数与唯一性、JSON 合同逐字段一致、Canonical metricID 唯一覆盖、十要素关键词、侧栏唯一注册、知识库总览链接,以及本表对当前 Registry metricID 的逐项唯一列举。npm run build 的前置步骤会自动执行该门禁。
版本历史
| 版本 | 日期 | 变更 | 来源 |
|---|---|---|---|
| v5 | 2026-11-04 | 新增卡顿 4 项(卡顿时间比、卡顿次数、最长卡顿、动画时长,perfowl-hitch.v1),Registry 为 70 项 | 卡顿时间比 |
| v4 | 2026-11-02 | Jank/BigJank 前 3 帧去重、Stutter 改为 Jank 帧耗时占比、FPS 类 5 项改按每秒 FPS 序列(含 Drop 映射);FTime 补 iOS 26 FrameUpdate 公式 | PerfDog 口径修正 · iOS 26 帧来源 |
| v3 | 2026-09-17 | 补齐 FrameTime P95 / Display Refresh Rate / Frame Pacing Jitter 三项 Display Performance metricID 的 Registry、Source Contract 与 Canonical 归属,Registry 收敛为 66 项(R7-Fix-A) | Display Performance |
| v2 | 2026-09-15 | Memory Contract v2 去除 Xcode/Resident 重复 alias、增加 Free Memory,Registry 收敛为 63 项 | Memory 指标 |
| v1 | 2026-09-08 | 建立 64 项字段级镜像、服务/命令谱系、Canonical 归属与构建前漂移门禁 | P0 知识库深化结果 |