1. FPS
帧率(Frames Per Second,简称 FPS)是指视频或动画中每秒钟显示的帧数,是画面显示流畅性的关键指标。TouchGFX Desinger 中提供了 FPS 计算公式,在 Demos 类别下,几个显示界面带有 FPS 的 Demo 其代码中都带有 FPS 计算公式。 大致是在每个界面的handleTickEvent 函数中通过如下公式来计算 FPS 值的。
图1. TouchGFX Designer 中的 FPS 计算公式(帧补偿打开)
2. FPS 计算公式的局限性如果使用上述公式来计算 FPS,其实是需要满足一定前提条件的。一个是图像的刷新率是60Hz,另一个是是否开启帧补偿。
2.1. 刷新率是不是 60Hz
上述公式是在刷新率是 60Hz 的情况下计算的,如果 TouchGFX 界面的刷新率不是60Hz,那么上述公式计算出来的结果就不准确。
因为 FPS 是指在 1 秒钟时间里传输的图像的帧数量,那么每个 Tick 的周期要保证是16.667ms,这样才能使用 if (frames + frameSkippedCounter >= 60)的判断条件。TouchGFX 提供的 LTDC 接口的 TBS(TouchGFX Board Setup)每个 Tick 是 16.667ms,所以都使用这个公式,如果是自己重新创建的工程,那么就需要注意这点。如果一个 Tick周期是 33.3ms,1s 是 30 个 tick 周期,那么就需要修改判断条件为 if (frames + frameSkippedCounter >= 30)。
2.2. 帧补偿关闭的情况
其次,上述公式只有在 TouchGFX 丢帧补偿使能的情况下才有效。如果 TouchGFX 丢帧补偿处于关闭状态,那么可以用以下公式来计算 FPS。
图2. TouchGFX Designer 中的 FPS 计算公式(帧补偿关闭)
3. 推荐的 FPS 计算公式考虑到有时无法准确获得刷新率,以及不知道帧补偿是开启还是关闭,那么推荐的方式是通过逻辑分析仪来测量 1s 之内的渲染次数。例如测量 1s 内的 RENDER_TIME_GPIO 翻转的次数,这样是最准确的。 通过在 STM32CubeMX 中定义一个 RENDER_TIME_GPIO,然后 TouchGFX 引擎会自动调用 TouchGFXGPIO.cpp 中的以下代码来进行翻转。
图3. TouchGFXGPIO.cpp 中 GPIO 翻转相关代码
4. 小结本文档介绍了不同情况下如何准确测量 TouchGFX 应用的帧率 FPS 的方法,供参考使用。
|