1、FPS
幀率(Frames Per Second,簡稱 FPS)是指視頻或動畫中每秒鐘顯示的幀數(shù),是畫面顯示流暢性的關(guān)鍵指標。TouchGFX Desinger 中提供了 FPS 計算公式,在 Demos 類別下,幾個顯示界面帶有 FPS 的 Demo 其代碼中都帶有 FPS 計算公式。 大致是在每個界面的handleTickEvent 函數(shù)中通過如下公式來計算 FPS 值的。
2、FPS 計算公式的局限性
如果使用上述公式來計算 FPS,其實是需要滿足一定前提條件的。一個是圖像的刷新率是60Hz,另一個是是否開啟幀補償。
2.1. 刷新率是不是 60Hz
上述公式是在刷新率是 60Hz 的情況下計算的,如果 TouchGFX 界面的刷新率不是60Hz,那么上述公式計算出來的結(jié)果就不準確。
因為 FPS 是指在 1 秒鐘時間里傳輸?shù)膱D像的幀數(shù)量,那么每個 Tick 的周期要保證是16.667ms,這樣才能使用 if (frames + frameSkippedCounter >= 60)的判斷條件。TouchGFX 提供的 LTDC 接口的 TBS(TouchGFX Board Setup)每個 Tick 是 16.667ms,所以都使用這個公式,如果是自己重新創(chuàng)建的工程,那么就需要注意這點。如果一個 Tick周期是 33.3ms,1s 是 30 個 tick 周期,那么就需要修改判斷條件為 if (frames +frameSkippedCounter >= 30)。
2.2. 幀補償關(guān)閉的情況
其次,上述公式只有在 TouchGFX 丟幀補償使能的情況下才有效。如果 TouchGFX 丟幀補償處于關(guān)閉狀態(tài),那么可以用以下公式來計算 FPS。
3、推薦的 FPS 計算公式
考慮到有時無法準確獲得刷新率,以及不知道幀補償是開啟還是關(guān)閉,那么推薦的方式是通過邏輯分析儀來測量 1s 之內(nèi)的渲染次數(shù)。例如測量 1s 內(nèi)的 RENDER_TIME_GPIO 翻轉(zhuǎn)的次數(shù),這樣是最準確的。
通過在 STM32CubeMX 中定義一個 RENDER_TIME_GPIO,然后 TouchGFX 引擎會自動調(diào)用 TouchGFXGPIO.cpp 中的以下代碼來進行翻轉(zhuǎn)。
4、小結(jié)
本文檔介紹了不同情況下如何準確測量 TouchGFX 應(yīng)用的幀率 FPS 的方法,供參考使用。