- 设计好接口只是第一步,测试与调试保障其在复杂设备与场景下可靠工作。
- 单元测试:
- 对 AIDL 方法做语义测试:参数边界、错误码、版本不匹配。
- Mock 服务与客户端:使用 Stub/Proxy 的替身实现,验证回调时序与线程安全。
- 集成测试:
- 搭建虚拟显示环境或使用测试桩 HWC,模拟模式切换、Vsync 推送、hotplug 事件。
- 与 sfaceFlinger 的联调:提交 Transaction 与图层变更,观察 AIDL 回调与模式控制是否在一帧内对齐。
- 压力与稳定性测试:
- 高频 Vsync 回调、模式快速切换、外接显示插拔循环,观察 Binder 线程池、延迟与丢包。
- 服务崩溃恢复测试:模拟服务进程重启,验证客户端重连与状态重建。
- 调试工具:
dumpsys saceFlinger
/dumpsys display
扩展输出 AIDL 服务状态、订阅者列表、最近错误。- Perfetto/Systrace:记录 AIDL 调用、回调时间线,与合成事件对齐分析瓶颈。
- 诊断接口:
getCompositionStats()
、getOverlayStats()
等,作为自动化回归的断言依据。
- 兼容性矩阵:
- 构建设备能力表:不同 SoC、不同 Android 版本的 HWC/AIDL 组合。对接口行为做基线验证,发现平台特定问题。
- 版本滚动发布:灰度上线新接口或新字段,监控回调延迟与错误码分布。
- 实务建议:
- 把 AIDL 合同文档化:对每个方法的时序、错误语义、回调行为写清楚,作为开发与测试共同基准。
- 在客户端实现健壮的重连与状态拉取(cold start sync),避免服务重启后属性丢失。
- 总结:一套完善的测试与调试体系能让 HWC-AIDL 在复杂多变的图形管线中保持可靠。用自动化、可视化时间线与诊断接口三管齐下,确保接口既稳定又高效。