首次探究效能問題時,追蹤記錄通常是最佳資訊來源。追蹤記錄可用於擬定假設,並決定該從何處著手。
Android 支援兩種層級的追蹤:系統追蹤和方法追蹤。
由於系統追蹤只會追蹤特別標示的追蹤區域,因此不會 減輕負擔,並不會影響應用程式效能。系統追蹤是很實用的功能,可協助您查看程式碼特定區段的執行時間。
方法追蹤功能會追蹤應用程式中的每個函式呼叫。所費不貲 所以對應用程式效能有很大的影響 發生什麼情況、實際呼叫的函式,以及頻率 也就是如何呼叫
根據預設,系統追蹤不會包含個別可組合函式。在方法追蹤中可以使用。
我們目前正在測試新的系統追蹤功能,以顯示系統追蹤中的可組合函式。這種方法可以兼顧系統追蹤的低度干擾,以及組合內方法追蹤層級的詳細資料。
設定組合追蹤
如要試用專案中的重組追蹤功能,您至少須更新到下列版本:
- Android Studio Flamingo
- Compose UI:1.3.0
- Compose Compiler: 1.3.0
執行追蹤的裝置或模擬器的最低 API 級別為 30。
此外,您需要在 Compose 執行階段追蹤中新增依附元件:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
透過這個依附元件,使用包含重組的系統追蹤時 就可以自動看到可組合函式
進行系統追蹤
如要進行系統追蹤,並查看新重組追蹤的實際運作情形,請按照下列步驟操作:
開啟分析器:
圖 2. Android Studio - 開始剖析 按一下「CPU timeline」
圖 3. Android Studio Profiler - CPU 時間軸 在應用程式中前往要追蹤的 UI,然後選取「系統」 追蹤和記錄
圖 4. 追蹤選項 - 系統追蹤 使用應用程式以引起重組及停止記錄。追蹤記錄處理完畢並且顯示之後,應該就能在重組追蹤中看到可組合項。您可以使用鍵盤和滑鼠,在追蹤記錄周圍縮放及平移。如果不清楚如何導覽追蹤記錄,請參閱記錄追蹤說明文件。
圖 5. 系統追蹤 按兩下圖表中可組合項,即可前往該原始碼。
您還可以在火焰圖中查看可組合項,以及檔案和行數:
圖 6. 火焰圖
注意事項
APK 大小負擔
我們的目標是盡可能降低功能負擔 Compose 應用程式的 APK 大小會因追蹤字串而增加 Compose 編譯器內嵌在 APK 中嵌入的內容。這個大小增加可設為 如果應用程式並未使用太多 Compose 或更大型的完整 Compose 應用程式。這些追蹤字串會額外經過模糊處理,因此會出現在 和追蹤工具Compose 編譯器會將這些程式碼插入 自 1.3.0 版起。
您可以新增下列 ProGuard 規則,在實際工作環境版本中移除追蹤字串:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
這些函式日後可能會變更,但 Compose 版本資訊中會說明所有變更。
請注意,保留這些 APK 並對 APK 大小造成些許影響, 要剖析的 APK 與應用程式使用者執行的 APK 相同。
準確計時
就像進行效能測試一樣,如要正確剖析,您必須
應用程式 profileable
和 non-debuggable
(視可分析的應用程式而定)。
從終端機擷取追蹤記錄
您可以從終端機擷取組合追蹤記錄。如要這麼做 執行 Android Studio 平常為您自動執行的步驟。
新增依附元件
請先將其他依附元件新增至應用程式。
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
產生記錄指令
- 使用 Perfetto 產生記錄指令。
手動新增
track_event
資料來源區段,如以下範例所示:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
擷取追蹤記錄
- 啟動應用程式,並準備好您想追蹤的部分。
透過發布廣播,在應用程式中啟用追蹤功能。
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
啟動先前建立的錄製指令。
開啟追蹤記錄
adb pull <location>
來自裝置的追蹤記錄 ( 。在 Perfetto 中開啟。
使用 Jetpack Macrobenchmark 擷取追蹤記錄
您可以使用 Jetpack Macrobenchmark 衡量效能。 其中會提供追蹤記錄做為結果如要啟用組合追蹤,請使用 Macrobenchmark,您必須:
將以下額外依附元件新增至 Macrobenchmark 測試模組:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
新增
androidx.benchmark.fullTracing.enable=true
檢測引數 再執行基準測試檢查 Macrobenchmark 檢測 引數進一步瞭解 Macrobenchmark 檢測引數
意見回饋
我們很樂意瞭解您對這項功能的意見回饋、發現的任何相關錯誤,以及任何要求。您可以透過這個問題 追蹤器。