UI繪制優(yōu)化

性能優(yōu)化的目的不是優(yōu)化項目客叉,而是優(yōu)化編碼習(xí)慣施掏。--jett

CPU 與GPU工作流程

image.png

image1.png

image2.png

image3.png

image4.png

VSYNC(vertical synchorinzed) 垂直同步信號
VR 視頻看上去頭暈是因為幀數(shù)不夠

image5.png

CPU處理信息--->GPU繪制信息,這兩個過程在周期中無論那個過程未完成搀菩,都會丟幀 如image5 中的“綠色方塊兒2福青、3、4”

image.png

image6.png

image7.png
查看方法

開發(fā)者選項->Profile GPU rendering/調(diào)試GPU過度繪制

image8.png

配置文件 GPU 渲染速度

配置文件 GPU 渲染工具作為滾動直方圖顯示渲染 UI 窗口的幀相對于每幀 16 毫秒的基準需要多少時間的可視化表示而咆。

在功能較低的 GPU 上,可用填充速率(GPU 填充幀緩沖區(qū)的速度)可能相當?shù)湍桓ぁkS著繪制幀所需的像素數(shù)增加暴备,GPU 可能需要更長時間來處理新命令,并要求系統(tǒng)的其余部分等待们豌,直到它能夠趕上馍驯。分析工具可幫助您識別 GPU 何時在繪制像素時不堪重負或因大量透支而不堪重負阁危。

注意:此分析工具不能與使用 NDK 的應(yīng)用使用。這是因為每當 OpenGL 采用全屏上下文時汰瘫,系統(tǒng)都會將框架消息推送到后臺。在這種情況下擂煞,您可能會發(fā)現(xiàn) GPU 制造商提供的分析工具很有幫助混弥。

啟用探查器

開始之前,請確保使用運行 Android 4.1 (API 16) 或更高版本的設(shè)備对省,并啟用開發(fā)人員選項蝗拿。若要在使用應(yīng)用時開始分析設(shè)備 GPU 渲染,請按照以下步驟操作:

  1. 在設(shè)備上蒿涎,轉(zhuǎn)到"設(shè)置"并點按"開發(fā)人員選項"哀托。
  2. 在"監(jiān)視"部分中,選擇"配置文件 GPU 渲染"劳秋。
  3. 在"配置文件 GPU 渲染"對話框中仓手,選擇"在屏幕上"作為條形圖,以覆蓋設(shè)備屏幕上的圖形玻淑。
  4. 打開要分析的應(yīng)用嗽冒。

檢查輸出

在圖 1 所示的配置文件 GPU 渲染圖的放大圖像中,您可以看到在 Android 6.0(API 級別 23)上顯示的彩色部分补履。

image

圖1添坊。放大的配置文件 GPU 渲染圖。

以下是有關(guān)輸出的一些需要注意的事項:

  • 對于每個可見的應(yīng)用程序箫锤,該工具將顯示一個圖形贬蛙。
  • 沿水平軸的每個垂直條表示一個幀,每個垂直條的高度表示幀渲染所需的時間(以毫秒為單位)谚攒。
  • 水平綠線表示 16 毫秒阳准。要達到每秒 60 幀,每個幀的垂直條需要保持在這條線以下五鲫。當條形超出此行時溺职,動畫中可能會暫停。
  • 該工具通過使相應(yīng)的條形更寬且透明度更低來突出顯示超過 16 毫秒閾值的幀位喂。
  • 每個條形都有映射到渲染管道中階段的顏色組件浪耘。組件的數(shù)量因設(shè)備的 API 級別而異。

下表提供了使用運行 Android 6.0 及更高版本的設(shè)備時探查器輸出中垂直條的每個段的說明塑崖。


表1.Android 6.0 及更高版本的組件條

4.0(API 級別 14)和 5.0(API 級別 21)之間的 Android 版本具有藍色七冲、紫色、紅色和橙色段规婆。4.0 以下的 Android 版本只有藍色澜躺、紅色和橙色組件蝉稳。下表顯示了 Android 4.0 和 5.0 中的組件欄。


表2.**Android 4.0 和 5.0 中的組件條

有關(guān)如何解釋分析工具提供的信息的信息掘鄙,請閱讀使用配置文件GPU 渲染進行分析耘戚。

注:雖然此工具名為配置文件 GPU 渲染,但所有受監(jiān)視的進程實際上都發(fā)生在 CPU 中操漠。渲染通過向 GPU 提交命令而發(fā)生收津,GPU 以異步方式呈現(xiàn)屏幕。在某些情況下浊伙,GPU 可能有太多的工作要做撞秋,并且 CPU 必須等待才能提交新命令。發(fā)生這種情況時嚣鄙,您將在橙色和紅色條形中看到峰值吻贿,并且命令提交將阻止,直到在 GPU 命令隊列上創(chuàng)建更多空間哑子。

image9.png

過度繪制優(yōu)化(主要是減少GPU工作量)

1.減少背景重復(fù)

注意主題中的設(shè)置

去掉單個Activity主題設(shè)置屬性舅列,可以在*setContentView*之前
 getWindows().setBackgroundDrawable(null) 

去掉所有activity中主題設(shè)置中的屬性 直接在 styles.xml中設(shè)置
<item name="ansroid:windowBackground">@null<item>

非業(yè)務(wù)需求,不要設(shè)置背景

*透明顏色CPU會進行計算赵抢,但GPU不會繪制

2.使用裁剪減少控件之間的重復(fù)部分
        canvas.clipRect((float)c.x,0f,(float)(mDroidCards.get(i+1).x),(float)c.height);

Android 7.0之后系統(tǒng)做出的優(yōu)化--invalidate()不再執(zhí)行測量和布局工作

布局的優(yōu)化 (主要減少CPU工作量)

常用工具

Android/sdk/tools/bin/ui automator viewer.bat
Android\sdk\tools\monitor.bat
Device Monitor窗口中Hierarchy view

三個點也是代表著View的Measure, Layout和Draw剧蹂。

  • 綠: 表示該View的此項性能比該View Tree中超過50%的View都要快;例如,代表Measure的是綠點,意味著這個視圖的測量時間快于樹中的視圖對象的50%烦却。
  • 黃: 表示該View的此項性能比該View Tree中超過50%的View都要慢宠叼;
  • 紅: 表示該View的此項性能是View Tree中最慢的;其爵。

注意點:
1.能在一個平面顯示的內(nèi)容冒冬,盡量只用一個容器
2.盡可能把相同的容器合并merge
3.能復(fù)用的代碼,用include處理摩渺,可以減少GPU重復(fù)工作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末简烤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摇幻,更是在濱河造成了極大的恐慌横侦,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,657評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰姻,死亡現(xiàn)場離奇詭異枉侧,居然都是意外死亡,警方通過查閱死者的電腦和手機狂芋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,662評論 3 385
  • 文/潘曉璐 我一進店門榨馁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帜矾,你說我怎么就攤上這事翼虫⌒既幔” “怎么了?”我有些...
    開封第一講書人閱讀 158,143評論 0 348
  • 文/不壞的土叔 我叫張陵珍剑,是天一觀的道長掸宛。 經(jīng)常有香客問我,道長招拙,這世上最難降的妖魔是什么旁涤? 我笑而不...
    開封第一講書人閱讀 56,732評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮迫像,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞳遍。我一直安慰自己闻妓,他們只是感情好,可當我...
    茶點故事閱讀 65,837評論 6 386
  • 文/花漫 我一把揭開白布掠械。 她就那樣靜靜地躺著由缆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猾蒂。 梳的紋絲不亂的頭發(fā)上均唉,一...
    開封第一講書人閱讀 50,036評論 1 291
  • 那天,我揣著相機與錄音肚菠,去河邊找鬼舔箭。 笑死,一個胖子當著我的面吹牛蚊逢,可吹牛的內(nèi)容都是我干的层扶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,126評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼烙荷,長吁一口氣:“原來是場噩夢啊……” “哼镜会!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起终抽,我...
    開封第一講書人閱讀 37,868評論 0 268
  • 序言:老撾萬榮一對情侶失蹤戳表,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昼伴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匾旭,經(jīng)...
    沈念sama閱讀 44,315評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,641評論 2 327
  • 正文 我和宋清朗相戀三年亩码,在試婚紗的時候發(fā)現(xiàn)自己被綠了季率。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,773評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡描沟,死狀恐怖飒泻,靈堂內(nèi)的尸體忽然破棺而出鞭光,到底是詐尸還是另有隱情,我是刑警寧澤泞遗,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布惰许,位于F島的核電站,受9級特大地震影響史辙,放射性物質(zhì)發(fā)生泄漏汹买。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一聊倔、第九天 我趴在偏房一處隱蔽的房頂上張望晦毙。 院中可真熱鬧,春花似錦耙蔑、人聲如沸见妒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,859評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽须揣。三九已至,卻和暖如春钱豁,著一層夾襖步出監(jiān)牢的瞬間耻卡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工牲尺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卵酪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,584評論 2 362
  • 正文 我出身青樓秸谢,卻偏偏與公主長得像凛澎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子估蹄,可洞房花燭夜當晚...
    茶點故事閱讀 43,676評論 2 351

推薦閱讀更多精彩內(nèi)容

  • UI繪制優(yōu)化 一.CPU與GPU工作流程 cpu:中央處理器(用于計算) gpu:圖形處理器(用于顯示) C...
    cat_code閱讀 456評論 0 1
  • UI繪制優(yōu)化好處塑煎,不僅可以減少卡頓,也可以加快啟動速度臭蚁,減少不必要的內(nèi)存和cpu資源消耗最铁。 UI繪制主要工作就是減...
    ArcherZang閱讀 377評論 0 0
  • 一、CPU與GPU的工作流程 二垮兑、卡頓原因分析 三冷尉、實戰(zhàn)解決過度優(yōu)化 四、過度繪制優(yōu)化(主要減少GPU工作量) 1...
    世鋒日上閱讀 371評論 0 1
  • 引言 1. Android性能優(yōu)化篇之內(nèi)存優(yōu)化--內(nèi)存泄漏 2.Android性能優(yōu)化篇之內(nèi)存優(yōu)化--內(nèi)存優(yōu)化分析...
    愛聽音樂的小石頭閱讀 5,205評論 0 11
  • 60Hz 刷新頻率由來 12 fps :由于人類眼睛的特殊生理結(jié)構(gòu)系枪,如果所看畫面之幀率高于每秒約 10-12 幀的...
    Coder_Sven閱讀 125評論 0 0