性能優(yōu)化的目的不是優(yōu)化項目客叉,而是優(yōu)化編碼習(xí)慣施掏。--jett
CPU 與GPU工作流程
VSYNC(vertical synchorinzed) 垂直同步信號
VR 視頻看上去頭暈是因為幀數(shù)不夠
CPU處理信息--->GPU繪制信息,這兩個過程在周期中無論那個過程未完成搀菩,都會丟幀 如image5 中的“綠色方塊兒2福青、3、4”
查看方法
開發(fā)者選項->Profile GPU rendering/調(diào)試GPU過度繪制
配置文件 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 渲染,請按照以下步驟操作:
- 在設(shè)備上蒿涎,轉(zhuǎn)到"設(shè)置"并點按"開發(fā)人員選項"哀托。
- 在"監(jiān)視"部分中,選擇"配置文件 GPU 渲染"劳秋。
- 在"配置文件 GPU 渲染"對話框中仓手,選擇"在屏幕上"作為條形圖,以覆蓋設(shè)備屏幕上的圖形玻淑。
- 打開要分析的應(yīng)用嗽冒。
檢查輸出
在圖 1 所示的配置文件 GPU 渲染圖的放大圖像中,您可以看到在 Android 6.0(API 級別 23)上顯示的彩色部分补履。
圖1添坊。放大的配置文件 GPU 渲染圖。
以下是有關(guān)輸出的一些需要注意的事項:
- 對于每個可見的應(yīng)用程序箫锤,該工具將顯示一個圖形贬蛙。
- 沿水平軸的每個垂直條表示一個幀,每個垂直條的高度表示幀渲染所需的時間(以毫秒為單位)谚攒。
- 水平綠線表示 16 毫秒阳准。要達到每秒 60 幀,每個幀的垂直條需要保持在這條線以下五鲫。當條形超出此行時溺职,動畫中可能會暫停。
- 該工具通過使相應(yīng)的條形更寬且透明度更低來突出顯示超過 16 毫秒閾值的幀位喂。
- 每個條形都有映射到渲染管道中階段的顏色組件浪耘。組件的數(shù)量因設(shè)備的 API 級別而異。
下表提供了使用運行 Android 6.0 及更高版本的設(shè)備時探查器輸出中垂直條的每個段的說明塑崖。
4.0(API 級別 14)和 5.0(API 級別 21)之間的 Android 版本具有藍色七冲、紫色、紅色和橙色段规婆。4.0 以下的 Android 版本只有藍色澜躺、紅色和橙色組件蝉稳。下表顯示了 Android 4.0 和 5.0 中的組件欄。
有關(guān)如何解釋分析工具提供的信息的信息掘鄙,請閱讀使用配置文件GPU 渲染進行分析耘戚。
注:雖然此工具名為配置文件 GPU 渲染,但所有受監(jiān)視的進程實際上都發(fā)生在 CPU 中操漠。渲染通過向 GPU 提交命令而發(fā)生收津,GPU 以異步方式呈現(xiàn)屏幕。在某些情況下浊伙,GPU 可能有太多的工作要做撞秋,并且 CPU 必須等待才能提交新命令。發(fā)生這種情況時嚣鄙,您將在橙色和紅色條形中看到峰值吻贿,并且命令提交將阻止,直到在 GPU 命令隊列上創(chuàng)建更多空間哑子。
過度繪制優(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ù)工作