使用 CPU 效能分析器檢視
瞭解如何使用 DevTools CPU 效能分析器檢視。
CPU 效能分析器檢視允許您從 Dart 或 Flutter 應用程式中記錄和分析會話。該分析器可以幫助您解決效能問題,或全面瞭解應用的 CPU 活動。Dart 虛擬機器 (VM) 會收集 CPU 樣本(即在單個時間點對 CPU 呼叫棧的快照),並將資料傳送到 DevTools 進行視覺化。透過聚合大量的 CPU 樣本,分析器可以幫助您瞭解 CPU 將大部分時間花在了哪裡。
CPU 效能分析器
#點選 Record(記錄)即可開始記錄 CPU 配置檔案。記錄完成後,點選 Stop(停止)。此時,CPU 效能分析資料會從 VM 中提取出來,並顯示在分析器檢視(呼叫樹、自下而上、方法表和火焰圖)中。
若要載入所有可用的 CPU 樣本而無需手動進行記錄和停止,您可以點選 Load all CPU samples(載入所有 CPU 樣本),這會提取 VM 已記錄並存儲在其樣本緩衝區中的所有 CPU 樣本,並在效能分析器檢視中顯示這些樣本。
預設情況下,VM 的樣本緩衝區用作環形緩衝區,這意味著一旦填滿,新樣本就會開始覆蓋緩衝區中最舊的樣本。若要讓 VM 丟棄樣本緩衝區填滿後收集的所有樣本,請將 --profile-startup 標誌傳遞給 dart run 或 flutter run。
自下而上 (Bottom up)
#此表提供了 CPU 配置檔案的自下而上表示形式。這意味著自下而上表中的每個頂級方法(即根節點)實際上是一個或多個 CPU 樣本呼叫棧中的頂部方法。換句話說,自下而上表中的每個頂級方法都是從上而下表(呼叫樹)中的葉節點。在此表中,可以展開方法以檢視其呼叫者。
此檢視有助於識別 CPU 配置檔案中耗時較長的方法。當此表中的根節點具有較高的自用時間 (self time) 時,意味著在此配置檔案中,許多 CPU 樣本結束時該方法位於呼叫棧的頂部。
請參閱下方的指南部分,瞭解如何啟用圖中所示的藍色和綠色垂直線。
工具提示可以幫助您理解每一列中的數值
- 總耗時 (Total time)
對於自下而上樹中的頂級方法
(位於至少一個 CPU 樣本頂部的棧幀),這是該方法執行自身程式碼以及它呼叫的任何方法程式碼所花費的時間。
- 自用耗時 (Self time)
對於自下而上樹中的頂級方法
(位於至少一個 CPU 樣本頂部的棧幀),這是該方法僅執行自身程式碼所花費的時間。
對於自下而上樹中的子方法(呼叫者),這是當透過子方法(呼叫者)呼叫頂級方法(被呼叫者)時,頂級方法的自用時間。
表格元素(自用耗時) 
呼叫樹 (Call tree)
#此表提供了 CPU 配置檔案的從上而下表示形式。這意味著呼叫樹中的每個頂級方法都是一個或多個 CPU 樣本的根節點。在此表中,可以展開方法以檢視其被呼叫者。
此檢視有助於識別 CPU 配置檔案中耗時較長的路徑。當此表中的根節點具有較高的總耗時時,意味著在此配置檔案中,許多 CPU 樣本開始時該方法位於呼叫棧的底部。
請參閱下方的指南部分,瞭解如何啟用圖中所示的藍色和綠色垂直線。
工具提示可以幫助您理解每一列中的數值
- 總耗時 (Total time)
方法執行自身程式碼以及
它呼叫的任何方法程式碼所花費的時間。
- 自用耗時 (Self time)
方法僅執行自身程式碼所花費的時間。
方法表 (Method table)
#方法表提供了 CPU 配置檔案中包含的每種方法的 CPU 統計資訊。在左側的表中,列出了所有可用方法及其總耗時和自用耗時。
總耗時是方法出現在呼叫棧上的任何位置所花費的總時間,換句話說,即該方法執行自身程式碼以及它所呼叫的任何方法程式碼所花費的時間。
自用耗時是方法處於呼叫棧頂部所花費的總時間,換句話說,即該方法僅執行自身程式碼所花費的時間。
從左側表中選擇一種方法會顯示該方法的呼叫圖。呼叫圖顯示了方法的呼叫者和被呼叫者,以及它們各自的呼叫者/被呼叫者百分比。
火焰圖 (Flame chart)
#火焰圖檢視是呼叫樹的圖形化表示。這是 CPU 配置檔案的從上而下檢視,因此在此圖表中,最頂層的方法呼叫其下方的方法。每個火焰圖元素的寬度表示方法在呼叫棧上花費的時間量。
與呼叫樹一樣,此檢視有助於識別 CPU 配置檔案中耗時較長的路徑。
幫助選單可以透過點選搜尋欄旁邊的 ? 圖示開啟,它提供了有關如何在該圖表中導航和縮放的資訊以及顏色編碼的圖例。 
CPU 取樣率
#DevTools 設定了一個 VM 收集 CPU 樣本的速率:1 個樣本 / 250 μs(微秒)。此項在 CPU 效能分析器頁面上預設選擇為 "Cpu sampling rate: medium"(CPU 取樣率:中)。可以透過頁面頂部的選擇器修改此速率。
低、中和高取樣率分別為 1,000 Hz、4,000 Hz 和 20,000 Hz。瞭解修改此設定的權衡至關重要。
以更高取樣率記錄的配置檔案會生成包含更多樣本的更細粒度的 CPU 配置檔案。這可能會影響應用程式的效能,因為 VM 被更頻繁地中斷以收集樣本。這也會導致 VM 的 CPU 樣本緩衝區更快地溢位。VM 儲存 CPU 樣本資訊的空間有限。在較高的取樣率下,空間會比使用較低取樣率時更快地填滿並開始溢位。這意味著根據記錄期間緩衝區是否溢位,您可能無法訪問所記錄配置檔案開始部分的 CPU 樣本。
以較低取樣率記錄的配置檔案會生成包含較少樣本的更粗粒度的 CPU 配置檔案。這會對應用程式的效能影響較小,但您可能無法獲取關於分析期間 CPU 正在執行的操作的詳細資訊。VM 的樣本緩衝區也會填充得更慢,因此您可以在更長的應用程式執行時間內檢視 CPU 樣本。這意味著您更有機會檢視所記錄配置檔案開始部分的 CPU 樣本。
過濾
#檢視 CPU 配置檔案時,您可以按庫、方法名稱或 UserTag 過濾資料。
指南
#在檢視呼叫樹或自下而上檢視時,樹有時會非常深。為了方便檢視深度樹中的父子關係,請啟用 Display guidelines(顯示參考線)選項。這會在樹中的父級和子級之間新增垂直參考線。
其他資源
#要了解如何使用 DevTools 分析計算密集型 Mandelbrot 應用的 CPU 使用情況,請檢視指導性的 CPU 效能分析器檢視教程。此外,還可以瞭解當應用程式使用隔離區 (isolates) 進行平行計算時,如何分析 CPU 使用情況。