不到60FPS者掉幀也?

? ? ? ? 前幾天跟前同事去海吃海喝,席間不免來套取我司知識(shí)寶庫。為了吹牛逼必然各種夸夸其談,其中說到一個(gè)很有趣的事情,說他們?cè)谧隹D檢測(cè),說高通給做高大上的圖像識(shí)別來識(shí)別卡頓。在恥笑完他們的愚蠢以后,然后慢慢地給介紹下掉幀的概念,超過16.7ms即為掉幀,掉幾幀算卡頓你自己去定義。在他豁然開朗之余,還提出一個(gè)有趣的問題,就是說,既然這樣,是不是可以用幀率來衡量卡頓呢?超過16.7ms就是掉幀,不到60幀一秒就是卡啊。

我批評(píng)了他的愚蠢以后,回家卻深深思考了良久。一來直覺告訴我這就是扯淡,二來居然一時(shí)之間想不出十足的反駁論據(jù)。于是就開始翻閱了下資料,終于勉強(qiáng)湊齊了想要的證據(jù)。

簡(jiǎn)單來說,是因?yàn)椋?b>幀率一般指的是變化幀的幀率。靜止的界面幀率為0,但是并不能說這是掉幀。


FPS的計(jì)算方法:

一般FPS計(jì)算的方法,都是使用adb shell dumpsys SurfaceFlinger --latency,獲取最近127幀垂直同步時(shí)間(記為T2)。計(jì)算T2之間的時(shí)間差值,幀數(shù)除以時(shí)間差,得到幀率。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int(round((frame_count - 1) / seconds))

問題就是在于垂直同步的時(shí)間,怎么來的。

引用AndroidDeveloper的一個(gè)圖,解釋渲染的


渲染過程

CPU把要顯示的東西轉(zhuǎn)換成多邊形、紋理,交給GPU。GPU去做柵格化,柵格化好了,再往下交給屏幕去顯示。但是GPU不是笨蛋,它會(huì)把多邊形和紋理保存在緩存里面,如果你給他的是相同的東西,那么它就什么不做。于是,這里就不會(huì)有一次交給屏幕的過程,這里的垂直同步時(shí)間就會(huì)延長(zhǎng)。這里就是靜止的情形,跟掉幀沒有半毛錢關(guān)系。


好,應(yīng)該就是這個(gè)道理,狡辯結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容