使用 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 剖析中包含的每個方法。在左邊的表格中,所有可用的方法都列出其總計自我時間。

總計時間是方法在呼叫堆疊中任何地方所花費的總時間,或換句話說,方法執行其自身程式碼和其呼叫的任何方法程式碼所花費的時間。

自我時間是方法在呼叫堆疊頂端所花費的總時間,或換句話說,方法僅執行其自身程式碼所花費的時間。

Screenshot of a call tree table

從左邊表格中選取方法會顯示該方法的呼叫圖表。呼叫圖表顯示方法的呼叫者和被呼叫者,以及其各自的呼叫者/被呼叫者百分比。

火焰圖表

火焰圖表檢視是呼叫樹狀結構的圖形表示。這是 CPU 剖析的自上而下檢視,因此在此圖表中,最上層的方法呼叫其下方的方法。每個火焰圖表元素的寬度代表方法在呼叫堆疊中所花費的時間量。

如同呼叫樹狀結構,此檢視有助於識別 CPU 剖析中昂貴的路徑。

Screenshot of a flame chart

說明功能表,可透過按一下搜尋欄旁的?圖示開啟,提供有關如何在圖表中導覽和縮放,以及色彩編碼圖例的資訊。火焰圖表說明截圖

CPU 採樣率

DevTools 設定 VM 收集 CPU 樣本的預設比率:1 個樣本 / 250 μs(微秒)。此比率會在 CPU 分析器頁面上預設選取為「Cpu 採樣率:中」。此比率可以使用頁面頂端的選取器修改。

Screenshot of cpu sampling rate menu

採樣率分別為 1,000 Hz、4,000 Hz 和 20,000 Hz。了解修改此設定的權衡非常重要。

使用較高採樣率記錄的剖析會產生更細緻的 CPU 剖析,且有更多樣本。由於 VM 會更頻繁中斷以收集樣本,這可能會影響應用程式的效能。這也會導致 VM 的 CPU 樣本緩衝區更快溢位。VM 儲存 CPU 樣本資訊的空間有限。在較高的採樣率下,空間會填滿並開始溢位,比使用較低採樣率時更快。這表示您可能無法存取記錄的剖析開始時的 CPU 樣本,具體取決於緩衝區是否在記錄期間溢位。

使用較低採樣率記錄的剖析會產生較粗略的 CPU 剖析,且有較少樣本。這較少影響應用程式的效能,但您可能無法存取剖析期間 CPU 執行狀況的相關資訊。VM 的樣本緩衝區也會填得較慢,因此您可以看到較長時間的應用程式執行時間的 CPU 樣本。這表示您有較高的機會檢視記錄的剖析開始時的 CPU 樣本。

篩選

在檢視 CPU 剖析時,你可以依函式庫、方法名稱或 UserTag 來篩選資料。

Screenshot of filter by tag menu

準則

在檢視呼叫樹或由下而上的檢視時,有時樹狀結構會很深。若要協助在深層樹狀結構中檢視父子關係,請啟用顯示準則選項。這會在樹狀結構中的父子之間加入垂直準則。

Screenshot of display options

其他資源

若要了解如何使用 DevTools 來分析運算密集型 Mandelbrot 應用程式的 CPU 使用率,請查看引導式的 CPU Profiler 檢視教學。另外,了解如何在應用程式使用平行運算的隔離時分析 CPU 使用率。