在 Perfetto UI 中以圖表呈現設定檔

從測試裝置擷取設定檔或從後端下載設定檔後,您可以在 Perfetto UI 中開啟檔案,查看時間軸、執行緒狀態和記憶體保留圖表。本頁面說明如何瀏覽使用 ProfilingManager 擷取的遮蓋系統追蹤記錄和 Java 記憶體快照資料。

以視覺化方式呈現系統追蹤記錄

在 Perfetto UI 中開啟 .perfetto-trace 檔案,檢查 CPU 和執行緒活動隨時間的變化。

Perfetto UI 中經過遮蓋的系統追蹤記錄時間軸
圖 1. 經過遮蓋的追蹤記錄範例。

為保護使用者隱私,ProfilingManager 會將所有其他程序的 CPU 活動合併為單一 OtherProcesses 追蹤記錄,藉此遮蓋系統追蹤記錄。檢查這個合併軌跡,仍可判斷應用程式速度緩慢的原因是內部瓶頸,還是整體裝置負載。

圖 2 醒目顯示經過遮蓋的系統追蹤記錄主要部分:

Perfetto UI 中經過遮蓋的系統追蹤記錄編號部分
圖 2. 遮蓋追蹤記錄的各個部分。
  1. CPU 清單:顯示裝置上所有可用的處理器。
  2. CPU tasks:顯示各 CPU 執行的執行緒。
  3. 其他程序檢視畫面:顯示其他程序耗用的 CPU 資源。
  4. Process View:顯示應用程式的程序。
  5. Threads View:顯示程序中執行的執行緒及其執行緒狀態 (可執行 (R)、執行中 (R)、休眠 (S)、不中斷休眠 (D)),這些狀態會直接對應至 Linux 程序狀態。
  6. 追蹤記錄切片:這個部分會顯示應用程式開發人員或架構新增的追蹤記錄註解。這類註解包含 Trace.beginSection 和 Trace.endSection 之間的運算。

如要進一步瞭解 Perfetto UI 和追蹤記錄視覺化,請參閱 Perfetto 文件。

以圖表呈現 Java 記憶體快照資料

使用 PROFILING_TYPE_JAVA_HEAP_DUMP 擷取 Java 記憶體快照資料後,請在 Perfetto UI 中開啟產生的 .perfetto-java-heap-dump 檔案,找出記憶體流失問題或最佳化記憶體用量。在「Heapdump Explorer」中,您可以探索堆積圖、檢查累積物件大小的火焰圖,以及瀏覽類別、物件和支配項,如圖 3 所示。

Perfetto UI Heapdump Explorer 顯示 Java 堆積物件大小的火焰圖。
圖 3. Perfetto UI 中的 Java 記憶體快照資料火焰圖。

ProfilingManager 記憶體快照資料與 HPROF 轉儲的差異

與標準 .hprof 記憶體快照資料 (例如使用 Debug.dumpHprofData 或在 Android Studio 中擷取的資料) 不同,ProfilingManager 會擷取 Perfetto ART 記憶體快照資料 (.perfetto-java-heap-dump)。ProfilingManager 不會傾印原始記憶體內容,而是記錄物件保留圖表和大小中繼資料,同時省略儲存在物件中的原始資料:

  • 收集的資料:
    • 類別和類型:類別名稱、父類別階層、類別載入器、執行個體大小和參照類型 (例如一般類別、陣列、字串,或弱、軟、終結器和虛擬參照)。
    • 物件執行個體和大小:每個物件的淺層大小 (self_size)、堆積區域 (HEAP_TYPE_APP、HEAP_TYPE_ZYGOTE 或 HEAP_TYPE_BOOT_IMAGE),以及透過 NativeAllocationRegistry 註冊的相關聯原生記憶體。
    • 參照和 GC 根層級:垃圾收集根層級 (例如 JNI 全域和本機、Java 堆疊框架和執行緒物件) 和欄位層級參照鏈結,顯示哪個物件保留另一個物件,以及透過哪個欄位名稱。
    • 選取大小中繼資料:特定架構類型的非機密中繼資料,例如 Bitmap 維度 (mWidth 和 mHeight)。
  • 省略內容:實際原始欄位值、String 字元內容,以及原始陣列酬載 (byte[]、char[] 和其他原始陣列)。省略原始物件內容可保護正式版裝置上的使用者隱私,並大幅縮減 dump 檔案的大小。

後續步驟

除了在 Perfetto UI 中進行視覺檢查外,您也可以使用 PerfettoSQL 查詢設定檔、大量分析追蹤記錄,或使用 AI 分析設定檔。