使用 CPU 剖析器檢視
CPU 剖析器檢視允許您記錄並剖析 Dart 或 Flutter 應用程式的會話。該剖析器可以幫助您解決效能問題,或大致瞭解應用的 CPU 活動。Dart VM 會收集 CPU 取樣(在單個時間點 CPU 呼叫堆疊的快照),並將資料傳送到 DevTools 進行視覺化。透過聚合許多 CPU 取樣,剖析器可以幫助您瞭解 CPU 大部分時間花在了哪裡。
CPU 剖析器
#透過點選記錄開始錄製 CPU 剖析。錄製完成後,點選停止。此時,CPU 剖析資料將從 VM 中提取並顯示在剖析器檢視中(呼叫樹、從下往上、方法表和火焰圖)。
如果您想在不手動錄製和停止的情況下載入所有可用的 CPU 取樣,可以點選載入所有 CPU 取樣。這將提取 VM 已錄製並存儲在其環形緩衝區中的所有 CPU 取樣,然後將這些 CPU 取樣顯示在剖析器檢視中。
從下往上
#此表提供了 CPU 剖析的自下而上表示。這意味著“從下往上”表中的每個頂級方法(或根)實際上是一個或多個 CPU 取樣中呼叫堆疊的頂部方法。換句話說,在“從下往上”表中,每個頂級方法是“自上而下”表(呼叫樹)中的一個葉節點。在此表中,可以展開一個方法以顯示其呼叫方。
此檢視對於識別 CPU 剖析中昂貴的方法很有用。當此表中的根節點具有很高的自時間時,意味著此剖析中的許多 CPU 取樣在該方法處於呼叫堆疊頂部時結束。
請參閱下方的指南部分,瞭解如何啟用此影像中看到的藍色和綠色垂直線。
工具提示可以幫助您理解各列的值
- 總時間
- 對於“從下往上”樹中的頂級方法(至少有一個 CPU 取樣處於堆疊頂部的堆疊幀),這是該方法執行自身程式碼以及它呼叫的任何方法程式碼所花費的時間。
- 自時間
- 對於“從下往上”樹中的頂級方法(至少有一個 CPU 取樣處於堆疊頂部的堆疊幀),這是該方法僅執行自身程式碼所花費的時間。
對於“從下往上”樹中的子方法(呼叫方),這是當透過子方法(呼叫方)呼叫頂級方法(被呼叫方)時,頂級方法(被呼叫方)的自時間。
表項(自時間) 
呼叫樹
#此表提供了 CPU 剖析的自頂向下表示。這意味著呼叫樹中的每個頂級方法都是一個或多個 CPU 取樣的根。在此表中,可以展開一個方法以顯示其被呼叫方。
此檢視對於識別 CPU 剖析中昂貴的路徑很有用。當此表中的根節點具有很高的總時間時,意味著此剖析中的許多 CPU 取樣是從該方法處於呼叫堆疊底部開始的。
請參閱下方的指南部分,瞭解如何啟用此影像中看到的藍色和綠色垂直線。
工具提示可以幫助您理解各列的值
- 總時間
- 方法執行自身程式碼以及它呼叫的任何方法程式碼所花費的時間。
- 自時間
- 方法僅執行自身程式碼所花費的時間。
方法表
#方法表提供了 CPU 剖析中包含的每個方法的 CPU 統計資訊。在左側的表中,列出了所有可用方法的總時間和自時間。
總時間是指方法在呼叫堆疊的任何位置所花費的總時間,換句話說,就是方法執行自身程式碼以及它呼叫的任何方法程式碼所花費的時間。
自時間是指方法處於呼叫堆疊頂部所花費的總時間,換句話說,就是方法僅執行自身程式碼所花費的時間。

從左側表中選擇一個方法會顯示該方法的呼叫圖。呼叫圖顯示了方法的呼叫方和被呼叫方及其各自的呼叫方/被呼叫方百分比。
火焰圖
#火焰圖檢視是呼叫樹的圖形表示。這是一個 CPU 剖析的自頂向下檢視,因此在此圖中,最頂層的方法呼叫其下方的那個方法。每個火焰圖元素(火焰)的寬度表示該方法在呼叫堆疊上花費的時間。
與呼叫樹類似,此檢視有助於識別 CPU 剖析中的昂貴路徑。

幫助選單(可透過點選搜尋欄旁邊的 ? 圖示開啟)提供了有關如何在圖表中導航和縮放的資訊,以及一個顏色編碼的圖例。 
CPU 取樣率
#DevTools 設定了 VM 收集 CPU 取樣的速率:1 個取樣 / 250 μs(微秒)。在 CPU 剖析器頁面上,此選項預設選擇為“CPU 取樣率:中”。可以使用頁面頂部的選擇器修改此速率。

低、中和高取樣率分別為 1,000 Hz、4,000 Hz 和 20,000 Hz。瞭解修改此設定的權衡很重要。
以較高取樣率錄製的剖析會產生更精細的 CPU 剖析,具有更多的取樣點。這可能會影響應用的效能,因為 VM 會更頻繁地中斷以收集取樣。這還會導致 VM 的 CPU 取樣緩衝區更快溢位。VM 儲存 CPU 取樣資訊的空間是有限的。在較高的取樣率下,空間會填滿並比使用較低取樣率時更快開始溢位。這意味著,取決於緩衝區在錄製過程中是否溢位,您可能無法訪問錄製剖析開頭部分的 CPU 取樣。
以較低取樣率錄製的剖析會產生更粗粒度的 CPU 剖析,取樣點較少。這會較少影響您的應用效能,但您可能無法獲得有關 CPU 在剖析期間執行的操作的足夠資訊。VM 的取樣緩衝區也會更慢地填滿,因此您可以檢視更長時間的應用執行時間的 CPU 取樣。這意味著您更有可能檢視錄製剖析開頭部分的 CPU 取樣。
過濾
#在檢視 CPU 剖析時,您可以按庫、方法名或 UserTag 過濾資料。

指南
#檢視呼叫樹或從下往上檢視時,樹有時會非常深。為了幫助檢視深層樹中的父子關係,請啟用顯示指南選項。這將為樹中的父子之間新增垂直指南。

其他資源
#要了解如何使用 DevTools 分析計算密集型 Mandelbrot 應用的 CPU 使用情況,請檢視分步教程 CPU Profiler View。此外,還可以學習當應用使用 isolates 進行平行計算時如何分析 CPU 使用情況。