New Graphics Improvement in Android 4.3

來源:互聯網
上載者:User
下一個版本的Android,姑且認為是4.3,圖形效能會有哪些提升?Android團隊的圖形專家Chet Haase和Romain Guy在Google IO 2013的演講Android Graphics Performance上為我們透露了部分資訊,演講的內容包括架構效能提升,效能分析工具的改善和應用最佳化的一些建議,本文根據演講內容寫成,希望對做Android圖形效能研究的朋友有所協助。參考連結Android Graphics Performance – YouTube:http://www.youtube.com/watch?v=vQZFaec9NpAAndroid Graphics Performance – Slides:http://www.curious-creature.org/2013/05/17/android-sessions-at-google-io-2013/Why your Android Apps Suck:http://rogeryi.wordpress.com/2013/03/26/why-your-android-apps-suck/我的這篇文章對Android圖形子系統做了一個基本分析,和對其架構做了對比和評價,可以作為後續內容的背景知識。Android DisplayList 機制淺析:http://rogeryi.wordpress.com/2012/11/19/android-displaylist-introductio/這篇文章簡單分析了Android DisplayList的機制。如何使用systrace做效能分析:http://rogeryi.wordpress.com/2012/11/30/android-systrace-in-4_1/介紹了效能分析工具systrace的使用。架構效能提升繪圖指令重排和合并Android 4.3會對UI介面的繪圖指令進行重新排列並且對同類型的繪圖指令進行合并,從而減少對GPU發出的glDrawXXX命令的個數和避免頻繁改變GL繪圖流水線的狀態(比如切換不同的Shader等等),最大化利用GPU加快繪圖速度。演講中示範了一個例子,的UI介面包括兩個Checkbox的Icon和文本,兩個Button的9-patch背景和文本,如果只是按照介面本身的UI組件排列順序,繪製的順序應該是:1,繪製Checkbox Icon2,繪製Checkbox文本“Include metadata”3,繪製Checkbox Icon4,繪製Checkbox文本“Maximize compatibility”5,繪製Button的9-patch背景6,繪製Button文本“Save”7,繪製Button的9-patch背景8,繪製Button文本“Cancel”上面的繪製包括8個繪圖指令和7次Shader的變化。經過重新排序後,變成:1,繪製Checkbox Icon2,繪製Checkbox Icon3,繪製Button的9-patch背景4,繪製Button的9-patch背景5,繪製Checkbox文本“Include metadata”6,繪製Checkbox文本“Maximize compatibility”7,繪製Button文本“Save”8,繪製Button文本“Cancel”最佳化後的繪製包括8個繪圖指令和2次Shader的變化。經過合并後,變成:1,繪製兩個Checkbox Icon2,繪製兩個Button的9-patch背景3,繪製四個文本進一步的最佳化後的繪製只需3個繪圖指令和2次Shader的變化。多線程繪製

首先要說明的是,Android GUI架構的線程架構並沒有變,一樣還是在主線程進行繪製(在主線程繪製而不是單獨的渲染線程的弊端可以參考我的文章Why your Android Apps Suck)。只是一些比較耗時的渲染,比如Shadow和Path Effect的產生,可以通過多線程並發加快速度而已,具體線程的數目跟CPU的核心數有關。支援非矩形裁剪HW Canvas終於支援非矩形裁剪了,不過考慮到相容性問題,估計也沒人敢用……開發人員工具Overdraw顯示其實4.2就已經有了,對瞭解自己的應用是否過度繪製的開發人員來說還是相當有用,最理想的情況是沒有任何Overdraw,每個地區的像素只需要一次繪製,藍色代表一次Overdraw,這意味著藍色地區的像素被繪製了兩次,綠色是兩次,紅色是三次,深紅色是四次。當然實際上一次或者兩次Overdraw很難完全避免,特別是介面包含一些複雜組合和半透明混合的效果,不過開發人員可以通過這些資訊來分析哪些Overdraw實際上是可以避免的,最後的最佳化建議環節Chet
Haase和Romain Guy也通過一個實際的例子來示範一個應用如何對Overdraw進行最佳化。gfxinfo可以輸出最近120幀繪製的耗時資訊,其中Draw表示DisplayList產生的耗時,Process表示DisplayList執行的耗時,Execute表示視窗swap buffers的耗時,新的版本支援直接顯示這些資訊在應用的視窗上,這樣就更加方便了。systrace在新的版本支援直接啟動,不需要事先到開發人員選項裡面去設定,並且公開了Java API供開發人員分析自己的方法(其實4.1和4.2的版本也可以調用非公開的API)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.