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