使用 C++ 效能分析器

要優化 Godot 的效能,首先要知道該優化什麼。這時,效能分析器就是非常有用的工具。

備註

編輯器內建有 GDScript 效能分析器,但如果 GDScript 效能分析器不夠精確,或者分析器本身有 bug 導致資訊遺漏,此時可以考慮改用 C++ 效能分析器。

設定 Godot

若要取得有用的效能分析資訊,務必要 使用包含偵錯符號的 Godot 執行檔。官方釋出的二進位檔並未包含偵錯符號,因為這會大幅增加下載檔案的大小。

若想獲得最貼近生產環境(但又有除錯符號)的效能分析資料,建議用 production=yes debug_symbols=yes 的 SCons 選項編譯執行檔。

你也可以用較少優化的建構(比如 target=template_debug 且未啟用 LTO)來進行效能分析,但這樣得出的結果會和實際運作環境有些偏差。

警告

請勿 在編譯完成後使用 strip 指令移除偵錯符號,否則執行效能分析器時將無法取得有用的分析資訊。

測試啟動/關閉所需時間

若你想要優化 Godot 的啟動/關閉效能,可以讓效能分析器在執行 Godot 執行檔時加上 --quit 參數,這會讓 Godot 啟動後立即結束。 --quit 可以與 --editor--project-manager ,或 --path <專案目錄路徑> (直接執行專案)一起使用。

也參考

更多 Godot 支援的命令列參數,請參閱 命令列教學

各效能分析器的操作說明

VerySleepy

  • 請先啟動 Godot 編輯器或你的專案。如果是先啟動專案管理員,請記得要先編輯或執行專案,否則因為專案管理員會為每個專案開啟子程序,效能分析器將無法追蹤這些子程序。

  • 打開 VerySleepy,然後在左側的程序清單中選擇 Godot 執行檔:

../../../_images/cpp_profiler_verysleepy_select_process.png
  • 點擊右側的 Profile All 按鈕開始效能分析。

  • 在編輯器或專案中執行你想進行效能分析的操作,完成後點擊 Stop不是 Abort)。

  • 等待結果視窗出現。

  • 結果視窗出現後,請將檢視篩選掉外部模組(如顯示卡驅動程式)。方法是找到 Module 欄與 Godot 執行檔名稱相同的那一列,在該列上點擊右鍵,於下拉選單選擇 Filter Module to <Godot 執行檔名>

  • 此時結果視窗大致會長這樣:

../../../_images/cpp_profiler_verysleepy_results_filtered.png

HotSpot

  • 打開 HotSpot,點選 Record Data

../../../_images/cpp_profiler_hotspot_welcome.png
  • 在下一個視窗中,指定包含除錯符號的 Godot 執行檔路徑。

  • 可自行決定是否加入命令列參數,以選擇用編輯器或直接執行專案。

  • 如果 --path 參數使用的是絕對路徑,工作目錄可填任何位置。否則請確保工作目錄設定後,專案相對路徑可正確存取。

  • 若你有管理員權限,請勾選 Elevate Privileges(提升權限)。雖然對 Godot 效能分析不是必須,但可確保所有事件都能被記錄,否則可能會遺漏部分事件。設定完成後大致如下:

../../../_images/cpp_profiler_hotspot_record.png
  • 點擊 Start Recording,然後在編輯器或專案中執行你要分析的操作。

  • 可以正常結束編輯器或專案,也可以在 HotSpot 按下 Stop Profiling 提前停止。若你不在乎引擎關閉流程,提前結束分析會得到更乾淨的分析資料。

  • 點選 View Results,等待產生視覺化的效能分析結果:

../../../_images/cpp_profiler_hotspot_view_results.png
  • 可利用上方分頁切換不同檢視模式,這些檢視僅是用不同方式展示相同資料。Flame Graph (火焰圖)分頁能一目了然哪些函式最耗時。這些函式便是最應優化的目標,因為優化它們能最有效提升效能。

  • 在除 Summary 以外的所有分頁底部,都可以看到引擎啟動的 CPU 執行緒清單,並顯示各執行緒的 CPU 使用率。這有助於找出特定時間點的瓶頸執行緒。

../../../_images/cpp_profiler_hotspot_flame_graph.png

備註

如果不想將啟動過程納入效能分析,可以讓 HotSpot 直接附加到正在執行的程序:點選 Record Data,將 Launch Application 下拉選項設為 Attach To Process(es)

這種附加程序的方式和 VerySleepy 的操作流程很像。

Xcode Instruments

  • 打開 Xcode,從 Xcode 應用選單選擇 Open Developer Tool - Instruments

  • Instruments 視窗中雙擊 Time Profiler

../../../_images/cpp_profiler_xcode_menu.png
  • 在 Time Profiler 視窗中,點擊 Target 選單,選擇 Choose target...,然後於下一個視窗設定 Godot 執行檔路徑、命令列參數與環境變數。

../../../_images/cpp_profiler_time_profiler.png
  • 你也可以從 Target 選單將 Time Profiler 附加到正在執行的程序。

  • 點選 Start an immediate mode recording 按鈕開始效能分析。

../../../_images/cpp_profiler_time_profiler_record.png
  • 在編輯器或專案中執行要分析的操作,完成後點選 Stop 按鈕。

  • 等待結果顯示。

  • 在視窗底部會看到所有已啟動 CPU 執行緒的呼叫樹,以及 Heaviest Stack Trace 概覽。

  • 於(視窗底部)**Call Tree** 選單選擇 Hide system libraries,即可移除外部模組。

  • 你可以利用視窗上方的時間軸,檢視特定時間區間的詳細資訊。

../../../_images/cpp_profiler_time_profiler_result.png