小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

安卓 App 性能專項(xiàng)測試之流暢度深度解析-上篇

 印度阿三17 2019-05-11

指標(biāo)背景

流暢度,顧名思義是用戶感知使用App頁面時的流暢情況,“App卡不卡”,這是用戶最直接的感受。
但是要用量化之后的數(shù)據(jù)衡量流暢度,在Android平臺這邊并沒有直接有效的方式/手段去監(jiān)控。

幀率&刷新頻率

首先需要了解到兩個概念:

刷新頻率(Refresh Rate)

代表屏幕在一秒內(nèi)刷新操作的次數(shù),這取決于硬件的固定參數(shù),例如60HZ。

幀率(Frame Rate)

代表GPU在一秒內(nèi)繪制操作的幀數(shù),例如常見的24fps,60fps,單位是fps(每秒幀數(shù)),很多游戲里面也會有這個指標(biāo)。

24fps&60fps

現(xiàn)在電影行業(yè)默認(rèn)的規(guī)則幀率是需要24fps,除了一些極個別的電影超高幀率之外(如李安的比利林恩.中場戰(zhàn)事達(dá)到超高幀率120fps),辣么有的同學(xué)就問了:是不是幀率越高越好,這里可以給到你肯定的回答:是的!就像顯示器的分辨率一樣,之前認(rèn)為1080p足夠了,現(xiàn)在用到了4K,5K之后才發(fā)現(xiàn)以前的真沒法看。當(dāng)然支持高幀率也需要對應(yīng)的硬件設(shè)備,emm..話題跑偏了,回到Android流暢度上來,現(xiàn)在Android平臺App或者是游戲普遍需要達(dá)到60fps用戶肉眼才能感覺到“不卡”。咦?不是24fps嗎?那么問題來了,為什么電影只需要24fps就能是流暢的效果,而App/游戲需要達(dá)到60fps?

動態(tài)模糊

首先小伙伴們可以看下這張圖,設(shè)計功力較渣,大家見諒

第一部分為電影物體運(yùn)動軌跡,不理解,沒關(guān)系,再來看下這張圖

wtf???并不是電影不高清,而且主角在激烈的戰(zhàn)斗?。。?!
怎么樣,相信聰明如你應(yīng)該懂了,電影每幀不僅會記錄當(dāng)前時間點(diǎn)的信息,還會記錄物體的運(yùn)行軌跡。所以我們看到是模糊的效果。
但是游戲/App的幀呢?請看下半部分,每幀只會記下當(dāng)前時間點(diǎn)的信息,并不會記錄物體的運(yùn)行軌跡,每一幀都是清晰的,經(jīng)過GPU渲染加載出來的。
所以動態(tài)模糊也是為什么電影只需要24fps的一個原因,那么除了動態(tài)模糊還有別的因素會影響的嗎?
有的!

幀間隔/垂直同步/Vsync

說到幀間隔這個名詞大家可能比較陌生,垂直同步相信很多玩游戲的小伙伴在游戲的設(shè)置菜單有見過,那么他是用來做什么的呢?
還是來看下面這張圖:

可以看到在電影播放的時候,每幀的間隔時間都是相等的,過度非常平滑。
而在游戲幀/App幀,可能有些場景幀間隔時間較大(比如人民群眾喜聞樂見的國民級手游王者榮耀在團(tuán)戰(zhàn)的時候),有些場景間隔時間較小(頁面不復(fù)雜/簡單應(yīng)用場景),為什么會造成這個原因呢?
這得從App的渲染機(jī)制/原理講起,CPU負(fù)責(zé)將頁面的布局/元素進(jìn)行計算將數(shù)據(jù)推給GPU進(jìn)行處理,GPU負(fù)責(zé)進(jìn)行柵格化(也就是將UI元素繪制到屏幕上),所以幀間隔時間跟頁面結(jié)構(gòu)復(fù)雜程度相關(guān),頁面結(jié)構(gòu)越復(fù)雜,CPU/GPU所需要的時間越多。
講到這里,可能有些同學(xué)馬上想到是不是可以有某種技術(shù)可以讓幀間隔的時間保持一致?沒錯,就是垂直同步!系統(tǒng)會每間隔一段時間發(fā)送一個Vsync同步信號,當(dāng)接收到了Vsync就會刷FrameBuffer(簡單理解就是去刷新屏幕顯示),所以有了垂直同步可以解決掉幀間隔不同步的問題。但是事情往往不會這么簡單的,有了垂直同步就可以高枕無憂了嗎?并不會!

丟幀

雖然開啟了垂直同步能夠保證幀間隔時間相等,但是能夠保證每幀都能夠及時的渲染出來嗎?并不能,來看下面這張圖:

系統(tǒng)會每隔16ms去發(fā)送Vsync信號通知CPU/GPU可以開始渲染工作了,為什么是16ms?機(jī)智如你應(yīng)該能想到60fps的倒數(shù)就是16.67ms(省略后面的小數(shù)點(diǎn))。如果要能夠達(dá)到60fps的話,那么就要求每一幀都應(yīng)該在16ms之內(nèi)繪制完畢,否則就出現(xiàn)了右邊圖里面的情況-丟幀!16ms之內(nèi)沒有完成該幀的繪制,那么就必須要等到下次系統(tǒng)的Vsync信號過來了,中間經(jīng)過的時間就是16ms*2(大致為34ms)。而且丟幀也是App卡頓的根本原因?。?!

好了,關(guān)于流暢度的解析就先到這里,下篇再給大家講解怎么監(jiān)控指標(biāo)以及怎么測試的問題。

來源:http://www./content-4-186851.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多