您好,登錄后才能下訂單哦!
渲染性能到底怎么表現?
應用設計師們為了讓應用呈現很棒的使用體驗,對界面進行渲染,但是這些華麗的圖片及轉場,會使應用出現卡屏、運行不流暢的用戶體驗(比如切換界面、滑動滾動條等)。
2.了解下渲染性能的原理
系統會在每16ms內對你的活動進行重新繪制,這意味著你必須在16ms內完成屏幕的更新(包括計算、繪圖等操作),也就是16ms一幀。但是如果你超過了一幀超過16ms(比如32ms),就會導致丟幀現象,也就是32ms內,你依然停在之前那個畫面,這樣的丟幀就會導致界面出現卡頓。
3.渲染性能與GPU、CPU的關系
當你的應用需要將按鈕,輸入框等繪制到屏幕時,需要在CPU上將他們轉換成像素和紋理,然后送至GPU(圖形處理器)進行光柵化,然后呈現到屏幕上。
以上方法速度較慢,我們可以通過Opengles Api 加快速度,Opengles Api可以將上傳的內容留在GPU,然后下次你要繪制時,只要參考GPU中已經存在的網格,告訴Opengles Api怎么繪制就行了。
5.android繪圖基本過程
android系統在你需要為應用繪圖之前,都會將xml的文件轉為為GPU可接受的文件,然后在屏幕上渲染。但是,這要借助內部對象displaylist(顯示列表),它包括了GPU需要渲染的所有信息,還包括open GL ES 渲染所需要的所有命令。
首次繪圖,會先生成一個顯示列表,然后再提交命令至GPU,來執行顯示列表。
如果將來還像渲染這個視圖,比如只是在屏幕上換了位置,我們只需要再次執行顯示列表。
如果將來我們的視圖發生改變,之前的顯示列表可能不在有效,我們就需要重新生成顯示列表,然后再次去執行,然后在屏幕上顯示。
當視圖、布局發生改變時,會產生額外的步驟,比如按鈕大小發生改變,或是布局位置發生變化,那么父容器都將啟動相關視圖進行位置的重新計算和編排,這就會導致額外的渲染。如果有大量的視圖需要更改,這就會導致大量的性能問題,所以,你需要的就是布局失效最小化。
6.了解下VSYNC
VSYNC:即垂直同步,理解之前,我們先弄懂下兩個概念。
刷新頻率:即顯示器每秒的刷新速度(次數)。
幀頻:GPU每秒可以繪制的幀數。
GPU獲取數據進行繪制,然后在屏幕上顯示。
如果幀頻大于顯示器刷新頻率,就會造成畫面撕裂等問題。
以上問題的愿意在于,GPU繪制的每一個新的幀會覆蓋上一個幀,從頂部開始。現在,當屏幕刷新時,它不知道緩沖是從什么時候開始的,因此他可能從GPU當中獲取的幀是未完成的。這就意味著有著上一幀的一半和當前幀的一半,解決這個問題就要采用雙緩沖技術,實際上,GPU將幀繪制到內存后(也稱為后臺緩沖),還會復制一份到內存副區域(幀緩沖區)。當他繪制第二幀到內存的時候,幀緩沖區不收影響。當屏幕刷新時,他會從幀緩沖區刷新,這就要用到VSYNC了。VSYNC避免了屏幕刷新時,從后臺緩沖區復制到幀緩沖區。
所以,幀頻大于屏幕刷新頻率是理想的,但是如果幀頻小于屏幕刷新頻率,就會出現問題。這樣會導致刷新時,屏幕左右兩側的幀顯示的一樣。
例如,當幀頻大于屏幕刷新頻率時,應用是流暢的,當幀頻突然小于刷新頻率時,就會出現卡頓、延遲等現象。
7.導致超出16ms的原因
1.重新繪制視圖層級的內容,這會浪費CPU資源。
2.over draw(過度繪制)
3.一次又一次的運行大量畫面,導致CPU和GPU組件大量騷動
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。