相机性能基准测试:四大维度全面解析

做相机性能优化,最怕什么?

怕你改了一堆代码,自我感觉良好,结果一跑测试,延迟反而高了。或者功耗降了,但帧率掉成幻灯片。

所以,基准测试不是可选项,是必选项。今天我就把这四类测试掰开揉碎了讲清楚。

一、Camera ITS 测试:合规性的底线

Camera ITS,全称是 Camera Image Test Suite。这是 Google 官方推出的测试套件,专门用来验证相机 HAL 和框架是否符合 CTS 要求。

说白了,这就是一道门槛。你过不了 ITS,手机就别想上市。

ITS 测试覆盖哪些内容?

  • 图像质量:色彩还原、噪点、动态范围
  • 传感器特性:灵敏度、曝光时间准确性
  • 3A 稳定性:AE、AF、AWB 的收敛速度
  • 多帧合成:HDR、夜景模式的帧对齐

我记得有一次,某款新平台的 ITS 测试死活过不了。查了三天,最后发现是 sensor 的增益映射表写错了。嗯,这种坑,踩过一次就记住了。

我的习惯:每次改完 HAL 层代码,先跑一遍 ITS 的 subset。别等全部改完再跑,否则问题堆在一起,定位成本翻倍。

三、延迟基准测试:用 OpenCamera 抓痛点

延迟,是用户最直接的感知。你按下快门,半秒后才听到咔嚓声,用户直接卸载 App。

OpenCamera 是个开源工具,我特别喜欢用它来做延迟测试。为什么?因为它能精确控制每一帧的请求和回调时间。

延迟测试主要看三个指标:

  • 快门延迟:从按下按钮到 sensor 开始曝光的时间
  • 处理延迟:从 RAW 数据到输出 JPEG 的时间
  • 显示延迟:从 JPEG 生成到屏幕显示的时间

我曾经在一个项目里发现,处理延迟占了总延迟的 70%。后来定位到是 JPEG 编码器用了软件方案,换成硬件编码器后,延迟直接砍半。

注意:OpenCamera 的延迟数据受 CPU 频率影响很大。测试前务必锁频,否则数据波动会让你怀疑人生。

三、功耗基准测试:PC Mark 的实战价值

功耗优化,是相机团队和硬件团队吵架最多的地方。你想想看,相机一开,CPU、ISP、DSP、GPU 全在跑,功耗能不高吗?

PC Mark 的 Work 2.0 电池测试,是我最常用的工具。它模拟真实用户场景,包括拍照、录像、浏览图片等。

测试场景 典型功耗(mW) 优化目标
预览模式(30fps) 350-500 ≤400
拍照(单帧) 800-1200 ≤900
录像(1080p 30fps) 600-900 ≤700
HDR 多帧合成 1200-1800 ≤1400

我个人习惯,在跑 PC Mark 之前,先用 perf 工具抓一下各个模块的占用率。如果 ISP 占用率超过 60%,那功耗大概率下不来。

避坑指南:我曾经遇到过,PC Mark 跑出来的功耗数据比实际低 20%。后来发现是测试时屏幕亮度被系统自动调低了。所以,测试前一定要固定屏幕亮度、关闭自动调节。

四、帧率稳定性测试:别让用户感觉到卡顿

帧率稳定性,比平均帧率更重要。你平均 30fps,但每 10 帧里掉 2 帧到 15fps,用户照样觉得卡。

我常用的方法是,用 dumpsys 或者 systrace 抓取每一帧的到达时间,然后计算帧间隔的抖动。

帧率稳定性指标:

  • 平均帧率:≥ 目标帧率的 95%
  • 帧间隔标准差:≤ 5ms
  • 掉帧率:掉帧数 / 总帧数 ≤ 1%

为什么会掉帧?最常见的原因是 CPU 频率切换。你想想看,系统为了省电,把 CPU 降频了,结果相机线程没抢到时间片,帧就丢了。

我解决这个问题的方法,是在相机启动时,通过 setThreadPriority 把关键线程的优先级提到最高,同时用 cpufreq 锁定最低频率。

核心思路:帧率稳定性,本质上是资源调度问题。你给相机线程足够的 CPU 时间,它就不会掉帧。

知识体系总览

下面这张图,把这四类测试的关系梳理清楚了。你可以把它当作一个检查清单,每次做性能优化时,对着跑一遍。

相机性能基准测试 Camera ITS 测试 延迟基准测试 功耗基准测试 帧率稳定性测试 PC Mark / OpenCamera 关键测试指标 合规性 → 延迟 → 功耗 → 帧率稳定性 每轮优化后,按此顺序重新测试,确保不引入新问题

这四类测试,不是做完一次就完事了。每改一次代码,每调一次参数,都应该跑一遍。尤其是 ITS 和帧率测试,最容易在优化功耗时被破坏。

好了,这一章的内容就到这里。下一章,我会深入讲延迟分析的具体工具和方法,包括怎么用 systrace 抓取每一帧的时间戳。


公众号:蓝海资料掘金营,微信deep3321