Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

使用檔案

要優化 Godot 的性能,你首先得知道要優化什麼,性能分析器在這方面非常有用。

備註

編輯器中內建了一個 GDScript 的性能分析器,但在 GDScript 性能分析器不夠精確或者因為問題而缺失資訊時,就可以使用 C++ 性能分析器。

設定 Godot

如果要獲取有用的性能分析資訊,就**必須**使用包含除錯符號的 Godot 建構。官方二進位檔案並不包含除錯符號,因為會顯著增加檔下載大小。

如果想要獲取與生產環境最接近的性能分析資料,你應該使用如下 SCons 選項來編譯器。

關閉部分優化的建構版本(比如 target=debug 但不開 LTO)也能用於性能分析,但得到的結果顯然會和實際運作時的情況會有一定差距。

警告

*請勿*在編譯完成後使用 strip 命令剝離除錯符號,否則運作性能分析器時無法得到有用的資訊。

測量啟動/關閉耗時

如果想要嘗試優化 Godot 的啟動/關閉性能,你可以讓分析器使用 Godot 二進位檔案的 --quit 命令列參數,它會讓 Godot 在啟動完成後立即退出。--quit 參數可以和 --editor--project-manager``--path <專案目錄路徑>``(該參數可以直接運作專案)搭配使用。

也參考

更多有關命令行參數的資訊,請參考 命令行教學

物理系統介紹

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
  • 在 Timer Profiler 視窗中,點擊 Target 功能表,選擇 Choose target... 然後將路徑設定為 Godot 可執行檔的路徑,在下一個視窗中設定命令列參數和環境變數。

../../../_images/cpp_profiler_time_profiler.png
  • 你也可以把 Time Profiler 附加到正在運作的程序上,在 Target 功能表中選擇即可。

  • 點擊 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