Android 設(shè)備上的一些開發(fā)人員選項,可幫助你應(yīng)用在運行其 UI 時可視化遇到的問題,例如執(zhí)行了多余的渲染工作,或執(zhí)行長線程和 GPU 操作。
要了解有關(guān)設(shè)備上開發(fā)人員選項的更多信息,包括如何啟用它們,請閱讀配置設(shè)備上的開發(fā)人員選項。
一、分析 GPU 渲染速度
Profile GPU Rendering 工具以滾動直方圖的形式顯示相對于每幀 16 ms 的基準測試渲染 UI 窗口的幀所花費的時間。
在性能較差的 GPU 上,可用的填充率(GPU 可以填充幀緩沖區(qū)的速度)可能非常低。隨著繪制幀所需的像素數(shù)量增加,GPU 可能需要更長的時間來處理新命令,并要求系統(tǒng)的其余部分等待直到它能夠趕上來。分析工具可以幫助你識別 GPU 何時不堪重負。
注意:此分析工具不適用于使用 NDK 的應(yīng)用程序。這是因為只要 OpenGL 采用全屏上下文,系統(tǒng)就會將框架消息推送到后臺。在這種情況下,你可能會發(fā)現(xiàn) GPU 制造商提供的分析工具很有幫助。
1.1 啟用分析器
在開始之前,請確保你使用的是 Android 4.1(API 級別 16)或更高版本的設(shè)備,以及啟用開發(fā)人員選項。要在使用應(yīng)用程序時開始分析設(shè)備 GPU 渲染,請執(zhí)行以下操作:
在你的設(shè)備上,打開設(shè)置,然后點擊開發(fā)者選項。
在監(jiān)控(Monitoring)部分中,選擇 GPU 呈現(xiàn)模式分析(Profile GPU Rendering)。
在 GPU 呈現(xiàn)模式分析(Profile GPU Rendering)對話框中,選擇在屏幕上顯示為條形圖(On screen as bars),以覆蓋設(shè)備屏幕上的圖形。
打開要分析的應(yīng)用程序。
1.2 檢查輸出
在圖 1 中所示的 Profile GPU Rendering 圖的放大圖像中,你可以看到彩色部分,如 Android 6.0(API 級別 23)所示。

以下是有關(guān)渲染圖的一些注意事項:
對于每個可見的應(yīng)用程序,該工具都會顯示一個圖表。
沿水平軸的每個直方條代表一幀,每個直方條的高度表示該幀渲染所用的時間(以毫秒為單位)。
綠色水平線代表 16 毫秒。要達到每秒 60 幀,每幀的直方條需要保持在此線以下。任何時候一個直方條超過這條線,都有可能出現(xiàn)卡頓。
該工具通過使直方條更寬且更不透明來突出顯示超過 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 中的組件欄。

注意:雖然工具名為 Profile GPU Rendering,但所有受監(jiān)視的進程實際上都在 CPU 中進行。通過向 GPU 提交命令來進行渲染,GPU 以異步的方式渲染屏幕。在某些情況下,GPU 可能需要做太多工作,而 CPU 必須等待它才能提交新命令。發(fā)生這種情況時,你會在橙色和紅色條中看到尖峰,并且命令提交將被阻塞,直到 GPU 命令隊列上有空閑。
二、GPU 過度繪制可視化
GPU 過度繪制可視化可幫助你通過對 UI 進行顏色編碼來識別是否存在過度繪制。當(dāng)你的應(yīng)用在同一幀內(nèi)多次繪制相同的像素時,會發(fā)生過度繪制。這可能是一個性能問題,因為額外的 GPU 工作會渲染用戶無法看到的像素。所以,你應(yīng)該盡可能地修復(fù)過度繪制事件。
要可視化你的設(shè)備上的過度繪制,請按以下步驟操作:
在你的設(shè)備上,打開“設(shè)置”,然后點擊“開發(fā)者選項”。
向下滾動到硬件加速渲染部分,然后選擇調(diào)試 GPU 過度繪制(Debug GPU Overdraw)。
在調(diào)試 GPU 過度繪制(Debug GPU Overdraw)對話框中,選擇顯示過度繪制區(qū)域(Show overdraw areas)。
Android UI 元素過度繪制色譜圖如下:



請注意,這些顏色是半透明的,因此你在屏幕上看到的確切顏色取決于 UI 的內(nèi)容?,F(xiàn)在你可以識別出布局中出現(xiàn)過度繪制的位置,更多詳情請看 Reduce overdraw。
請記住,一些過度繪制是不可避免的。當(dāng)你調(diào)整用戶界面時,盡量讓渲染圖顯示大多數(shù)真實顏色或僅 1 倍過度繪制(藍色)。