第20讲 从Trace统计预览Buffer Path各层帧率 - Android Camera性能分析

本讲是Android Camera性能分析专题的第20讲,我们介绍从Trace统计预览Buffer Path各层帧率,包括如下内容:

  1. Camera Provider预览帧率统计
  2. Camera Server预览帧率统计
  3. Camera App预览帧率统计
  4. 如何分析预览帧率不足问题
资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera
星球ID: 17296815
Wechat 极客笔记圈

Camera Provider预览帧率统计

基于Android 13模拟器抓的Trace,我们来分析Google Camera HAL送给Framework的帧率。

下图圈起来的7623ms,总共发生452次ProcessResult, 帧率为29.6fps(更多细节参阅视频讲解)。

Camera Provider预览帧率统计

Camera Server预览帧率统计

基于Android 13模拟器抓的Trace,Camera Server送给Camera App的帧率,分两种情况:SurfaceTexture和SurfaceView。

SurfaceTexture

PreviewSpacer在7540ms内送了223帧,帧率为29.57fps

Camera Server预览帧率统计

SurfaceView

统计ProcessCaptureResult可以看到QueueBuffer的次数,帧率为29.66fps。

Camera Server预览帧率统计

也可以直接看cam2_frame的帧率统计,比如如下9.5fps.

cam2_frame的帧率统计

Camera App预览帧率统计

基于Android 13模拟器抓的Trace,Camera App送给SurfaceFlinger的帧率,分两种情况:SurfaceTexture和SurfaceView。

SurfaceView

统计SurfaceView的脉冲个数(也可以统计onFrameAvailable – SurfaceView个数),如下图帧率为29.66fps。

Camera App预览帧率统计

使用SurfaceView时,App不参与预览Buffer的处理,所以我们这里可以简单以SurfaceView的脉冲个数作为帧率统计。

TextureView

TextureView是通过RenderThread将Camera预览Buffer和UI Buffer合并在一起的,从Trace中很难统计出真实帧率,我们这里通过SQL语句来分析是否有发生丢帧现象(具体参考视频讲解)

如何分析预览帧率不足问题

SurfaceView

  • 大概率是Camera HAL送的帧率不够,因为Camera App不参与Buffer处理
  • 从CameraServer角度看做第一手分析(详见视频讲解)

SurfaceTexture

  • 从Camera App角度做第一手分析,看是HAL送的帧率问题,还是App处理Buffer导致的问题

帧率需要考虑的其他因素

如定位到是Camera HAL送图帧率慢,还需要进一步考虑其他因素,比如

  • App设置的FPS Range是否导致限制了帧率
  • 测试环境明亮程度或AE限制Sensor出图帧率,导致帧率不足

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Android Camera性能分析