APP頁面掉幀卡頓原因及Perfdog性能測試之FPS

背景

最近在做APP性能專項測試脖阵,視頻剪輯過程中出現多次卡頓掉幀的問題力穗,為了更好地了解出現掉幀卡頓的原因转砖,去查閱了資料并記錄下該文章

過程

視圖渲染過程

了解卡頓原因之前蔫仙,先了解下視圖渲染過程如下圖:

1、CPU計算顯示的內容(如文本繪制巨坊,UI布局計算撬槽,視圖創(chuàng)建,圖片解碼等等)趾撵,然后把計算好的內容提交給GPU

2侄柔、GPU 渲染(變換,圖層合成占调,紋理渲染等)完成后暂题,將渲染結果放入幀緩沖區(qū)

3、視頻控制器會按照 VSync 信號逐行讀取幀緩沖區(qū)的數據究珊,經過可能的數模轉換傳遞給顯示器顯示


圖像顯示原理.png

備注:
1薪者、顯示器上的所有圖像都是一線一線的掃描上去的(從左到右,從上到下刷新)剿涮,如下圖:


顯示器圖像刷新.png

2言津、 V-SYNC:即垂直同步信號量攻人,這里的V即垂直的意思;當整個屏幕刷新完畢悬槽,即一個垂直刷新周期完成贝椿,顯示器會發(fā)出 VSync 信號

3、水平同步可能會出現畫面撕裂的現象(如下圖)陷谱。因為畫面的渲染不是整個畫面一起渲染的烙博,是逐行逐列渲染。如果沒有開啟垂直同步烟逊,設備配置不夠渣窜,則畫面在高速移動中會出現一行還沒刷新完成就出現下一行,進而出現撕裂情況


撕裂現象.png

4宪躯、垂直同步就是為了解決畫面撕裂的問題乔宿,當開啟垂直同步后,GPU 會等待顯示器的 VSync 信號發(fā)出后访雪,才進行新的一幀渲染和緩沖區(qū)更新详瑞。這樣能解決畫面撕裂現象,也增加了畫面流暢度臣缀,但需要消費更多的計算資源坝橡,也會帶來部分延遲。

5精置、目前计寇,iOS設備使用雙緩存,并開啟垂直同步脂倦,Android是三緩存番宁,并開啟垂直同步(緩存之間怎么切換的呢?赖阻?蝶押?)

UI 卡頓和掉幀的原因

首先,先了解下基礎的知識:假定設備的刷新率是60HZ火欧,如果頁面的滑動流暢率為60fps棋电,也就是一秒更新60張圖片,人眼上看就是流暢的效果布隔,也就是每隔16.7ms(1/60)就要產生一幀的畫面离陶,即:每隔16.7ms發(fā)出V-SYNC信號,觸發(fā)對UI進行渲染衅檀,這一幀的畫面需要由CPU和GPU共同協同完成顯示(詳見上面的視圖渲染過程)

卡頓掉幀原因:
如果在一個 VSync 時間內,CPU花費的時間比較長霎俩,留給GPU的時間就比較少哀军,GPU+CPU總時間就可能超過16.7ms沉眶,下一幀到來前,沒準備好當下幀的畫面杉适,這時候顯示器還是顯示上一幀的畫面谎倔,就出現掉幀,就出現滑動卡頓猿推;
同理片习,如果GPU花費的時間比較長,總時長也可能超過16.7ms
所以蹬叭,CPU 和 GPU 不論哪個阻礙了顯示流程藕咏,都會造成掉幀現象

UI卡段,掉幀原因.png

滑動流暢性方案

經過上面的分析秽五,為了優(yōu)化掉幀卡頓問題孽查,我們就需要對CPU和GPU的處理過程進行優(yōu)化

減輕CPU壓力

  1. 對象創(chuàng)建,調整坦喘,銷毀放在子線程中做
  2. 預排版(布局計算盲再,文本計算)放在子線程,主線程有更多時間響應用戶交互
  3. 預渲染(文本異步繪制瓣铣、圖片編解碼答朋,圖像繪制)放在子線程

減輕GPU壓力

  1. 紋理渲染,觸發(fā)離屏渲染棠笑,避免離屏渲染绿映,依托cpu異步繪制機制減輕CPU壓力
  2. 視圖混合:多個視圖層層疊加,合成需要大量計算腐晾,減輕視圖層級的復雜性叉弦,減輕GPU的壓力,
    參考文檔:https://blog.csdn.net/smnisbear/article/details/51170932

Perfdog中的性能指數

perfdogFPS.png

先講下以下的幾個參數:

FPS

Frames Per Second藻糖;應用界面平均每秒刷新次數淹冰,

  • Avg(FPS):平均幀率(一段時間內平均FPS)
  • Var(FPS):幀率方差(一段時間內FPS方差),體現幀率的穩(wěn)定性
  • Drop(FPS):降幀次數(平均每小時相鄰兩個FPS點下降大于8幀的次數)
    備注:幀率低巨柒,并不一定是卡頓樱拴,如果渲染不是均勻的,即使幀率高洋满,也可能會出現一卡一卡的現象

Jank和BigJank

Jank:1s內卡頓次數
BigJank:1s內嚴重卡頓次數
PerfDog Jank計算方法:
1. 同時滿足以下兩條件晶乔,則認為是一次卡頓Jank.
a) 當前幀耗時>前三幀平均耗時2倍。
b) 當前幀耗時>兩幀電影幀耗時(1000ms/242=84ms)牺勾。
2. 同時滿足兩條件正罢,則認為是一次嚴重卡頓
BigJank.
a) 當前幀耗時>前三幀平均耗時2倍。
b) 當前幀耗時>三幀電影幀耗時(1000ms/24
3=125ms)驻民。

stutter

測試過程中翻具,卡頓時長的占比履怯。即Stutter(卡頓率)=卡頓時長/總時長
卡頓時長計算:基于Jank的基礎上,一次Jank卡頓裆泳,會有一次卡頓時間Jank time叹洲。測試過程中可能有多次Jank卡頓,即有多次卡頓時間Jank time工禾≡颂幔卡頓時長即為多次卡頓時間的和

FrameTime

上下幀畫面顯示時間間隔,也可簡單認為單幀渲染耗時
Avg(FTime):平均幀耗時

測試注意事項

1闻葵、流暢度不等于FPS民泵,需要多維度衡量,考慮FPS笙隙,Jank洪灯,Stutter
2、APP需要關注FPS竟痰、Jank及卡頓率签钩。只是需要區(qū)分使用場景,如:
(1)坏快、靜態(tài)頁面窗口
只需關注FPS铅檩,理論FPS應該為0,否則莽鸿,說明有冗余刷新昧旨,容易引起手機發(fā)熱及耗電。
(2) 有滾動動畫頁面窗口
只需關注FPS祥得,FPS處于合適值即可兔沃,無需高頻刷新。
(3)快速滑動頁面窗口级及。
需要關注FPS乒疏、Jank及卡頓率。手機交互靈敏度就是來源于此饮焦,一般滑動狀態(tài)下怕吴,幀率越高越好,Jank越小越好县踢。
(4) 播放視頻頁面窗口转绷。
需要關注FPS、Jank及卡頓率硼啤,視頻卡頓直接影響用戶议经。視頻一般幀率18-24幀,Jank=0。比如微信播放視頻爸业、視頻播放器等其骄。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末亏镰,一起剝皮案震驚了整個濱河市扯旷,隨后出現的幾起案子,更是在濱河造成了極大的恐慌索抓,老刑警劉巖钧忽,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異逼肯,居然都是意外死亡耸黑,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門篮幢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大刊,“玉大人,你說我怎么就攤上這事三椿∪本” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵搜锰,是天一觀的道長伴郁。 經常有香客問我,道長蛋叼,這世上最難降的妖魔是什么焊傅? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮狈涮,結果婚禮上狐胎,老公的妹妹穿的比我還像新娘。我一直安慰自己歌馍,他們只是感情好握巢,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骆姐,像睡著了一般镜粤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玻褪,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天肉渴,我揣著相機與錄音,去河邊找鬼带射。 笑死同规,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播券勺,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绪钥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了关炼?” 一聲冷哼從身側響起程腹,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儒拂,沒想到半個月后寸潦,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡社痛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年见转,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒜哀。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斩箫,死狀恐怖,靈堂內的尸體忽然破棺而出撵儿,到底是詐尸還是另有隱情乘客,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布统倒,位于F島的核電站寨典,受9級特大地震影響,放射性物質發(fā)生泄漏房匆。R本人自食惡果不足惜耸成,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浴鸿。 院中可真熱鬧井氢,春花似錦、人聲如沸岳链。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掸哑。三九已至约急,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苗分,已是汗流浹背厌蔽。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摔癣,地道東北人奴饮。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓纬向,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戴卜。 傳聞我的和親對象是個殘疾皇子逾条,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355