ViewCompose Diagnostics
1. 数据入口
宿主通过 onRenderResult 获取结构化 RenderTreeResult。诊断只在 debug = true、注册 onRenderStats 或注册 onRenderResult 时收集,普通发布路径不构造树快照和逐节点 patch 明细。
RenderTreeResult 当前包含:
stats / structure / warnings:聚合绑定、树规模和告警。tree:renderer 实际消费的节点树,保留节点类型、key 和父子关系。patches:本帧按执行顺序记录Insert / Remove / Rebind / Patch / SkipSelf / SkipSubtree,并标记父 key、位置、移动和 patch 类型。composition:失效、重组、跳过 scope 数量,以及每个 scope 的路径、签名、重组原因和 Local 快照。
2. 重组原因
运行时区分以下原因:
InitialCompositionStateInvalidationAncestorInvalidationInputsChangedExplicitRequestStructureChanged
scope 诊断上限为 500 条,签名会截断,避免诊断本身随页面规模无界增长。
3. CompositionLocal 诊断
uiLocalOf(debugName = ..., debugValueFormatter = ...) 可提供稳定名称和安全摘要。框架内置 Theme、Environment、LifecycleOwner、SavedState、ContentColor 等核心 Local 已命名。
默认摘要规则只直接展示字符串、数值、布尔、字符和枚举;其他对象只展示类型名,不调用任意业务对象的 toString()。敏感业务值应通过自定义 formatter 主动裁剪,或不提供 formatter。
4. Demo 检查器
Diagnostics -> 渲染器 当前提供:
- Render Tree 列表
- Patch 时间线
- 重组原因与 scope 计数
- CompositionLocal 浏览器
- 原有 render/layout 聚合指标
当前仍不包含真实 View 边界高亮、跨 RenderSession 关联图和逐节点耗时。