溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)

發(fā)布時(shí)間:2020-07-24 13:10:29 來(lái)源:網(wǎng)絡(luò) 閱讀:750 作者:流光漏洞 欄目:軟件技術(shù)
  1. 渲染性能到底怎么表現(xiàn)?

    應(yīng)用設(shè)計(jì)師們?yōu)榱俗寫?yīng)用呈現(xiàn)很棒的使用體驗(yàn),對(duì)界面進(jìn)行渲染,但是這些華麗的圖片及轉(zhuǎn)場(chǎng),會(huì)使應(yīng)用出現(xiàn)卡屏、運(yùn)行不流暢的用戶體驗(yàn)(比如切換界面、滑動(dòng)滾動(dòng)條等)。

2.了解下渲染性能的原理

    系統(tǒng)會(huì)在每16ms內(nèi)對(duì)你的活動(dòng)進(jìn)行重新繪制,這意味著你必須在16ms內(nèi)完成屏幕的更新(包括計(jì)算、繪圖等操作),也就是16ms一幀。但是如果你超過(guò)了一幀超過(guò)16ms(比如32ms),就會(huì)導(dǎo)致丟幀現(xiàn)象,也就是32ms內(nèi),你依然停在之前那個(gè)畫面,這樣的丟幀就會(huì)導(dǎo)致界面出現(xiàn)卡頓。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)



 

3.渲染性能與GPU、CPU的關(guān)系

  當(dāng)你的應(yīng)用需要將按鈕,輸入框等繪制到屏幕時(shí),需要在CPU上將他們轉(zhuǎn)換成像素和紋理,然后送至GPU(圖形處理器)進(jìn)行光柵化,然后呈現(xiàn)到屏幕上。

 app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


  以上方法速度較慢,我們可以通過(guò)Opengles Api 加快速度,Opengles Api可以將上傳的內(nèi)容留在GPU,然后下次你要繪制時(shí),只要參考GPU中已經(jīng)存在的網(wǎng)格,告訴Opengles Api怎么繪制就行了。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


5.android繪圖基本過(guò)程

  android系統(tǒng)在你需要為應(yīng)用繪圖之前,都會(huì)將xml的文件轉(zhuǎn)為為GPU可接受的文件,然后在屏幕上渲染。但是,這要借助內(nèi)部對(duì)象displaylist(顯示列表),它包括了GPU需要渲染的所有信息,還包括open GL ES 渲染所需要的所有命令。

  首次繪圖,會(huì)先生成一個(gè)顯示列表,然后再提交命令至GPU,來(lái)執(zhí)行顯示列表。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


  如果將來(lái)還像渲染這個(gè)視圖,比如只是在屏幕上換了位置,我們只需要再次執(zhí)行顯示列表。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


  如果將來(lái)我們的視圖發(fā)生改變,之前的顯示列表可能不在有效,我們就需要重新生成顯示列表,然后再次去執(zhí)行,然后在屏幕上顯示。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


  當(dāng)視圖、布局發(fā)生改變時(shí),會(huì)產(chǎn)生額外的步驟,比如按鈕大小發(fā)生改變,或是布局位置發(fā)生變化,那么父容器都將啟動(dòng)相關(guān)視圖進(jìn)行位置的重新計(jì)算和編排,這就會(huì)導(dǎo)致額外的渲染。如果有大量的視圖需要更改,這就會(huì)導(dǎo)致大量的性能問(wèn)題,所以,你需要的就是布局失效最小化。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


 app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


6.了解下VSYNC

  VSYNC:即垂直同步,理解之前,我們先弄懂下兩個(gè)概念。

  刷新頻率:即顯示器每秒的刷新速度(次數(shù))。

  幀頻:GPU每秒可以繪制的幀數(shù)。

  GPU獲取數(shù)據(jù)進(jìn)行繪制,然后在屏幕上顯示。

   app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


  如果幀頻大于顯示器刷新頻率,就會(huì)造成畫面撕裂等問(wèn)題。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)

  以上問(wèn)題的愿意在于,GPU繪制的每一個(gè)新的幀會(huì)覆蓋上一個(gè)幀,從頂部開始?,F(xiàn)在,當(dāng)屏幕刷新時(shí),它不知道緩沖是從什么時(shí)候開始的,因此他可能從GPU當(dāng)中獲取的幀是未完成的。這就意味著有著上一幀的一半和當(dāng)前幀的一半,解決這個(gè)問(wèn)題就要采用雙緩沖技術(shù),實(shí)際上,GPU將幀繪制到內(nèi)存后(也稱為后臺(tái)緩沖),還會(huì)復(fù)制一份到內(nèi)存副區(qū)域(幀緩沖區(qū))。當(dāng)他繪制第二幀到內(nèi)存的時(shí)候,幀緩沖區(qū)不收影響。當(dāng)屏幕刷新時(shí),他會(huì)從幀緩沖區(qū)刷新,這就要用到VSYNC了。VSYNC避免了屏幕刷新時(shí),從后臺(tái)緩沖區(qū)復(fù)制到幀緩沖區(qū)。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


 所以,幀頻大于屏幕刷新頻率是理想的,但是如果幀頻小于屏幕刷新頻率,就會(huì)出現(xiàn)問(wèn)題。這樣會(huì)導(dǎo)致刷新時(shí),屏幕左右兩側(cè)的幀顯示的一樣。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)

 例如,當(dāng)幀頻大于屏幕刷新頻率時(shí),應(yīng)用是流暢的,當(dāng)幀頻突然小于刷新頻率時(shí),就會(huì)出現(xiàn)卡頓、延遲等現(xiàn)象。

  app渲染性能相對(duì)專項(xiàng)測(cè)試?yán)碚摶A(chǔ)


 

7.導(dǎo)致超出16ms的原因

  1.重新繪制視圖層級(jí)的內(nèi)容,這會(huì)浪費(fèi)CPU資源。

  2.over draw(過(guò)度繪制)

  3.一次又一次的運(yùn)行大量畫面,導(dǎo)致CPU和GPU組件大量騷動(dòng)




  

  


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI