Verwenden von C++-Profilern

Um die Leistung von Godot zu optimieren, müssen Sie zunächst wissen, was zu optimieren ist. Zu diesem Zweck sind Profiler nützliche Werkzeuge.

Bemerkung

Es gibt einen eingebauten GDScript-Profiler im Editor, aber die Verwendung des C++-Profilers kann in Fällen nützlich sein, in denen der GDScript-Profiler nicht genau genug ist oder Informationen aufgrund von Fehlern im Profiler fehlen.

Godot einrichten

Um nützliche Profiling-Informationen zu erhalten, ist es absolut erforderlich, einen Godot-Build zu verwenden, der Debugsymbole enthält. Offizielle Binärdateien enthalten keine Debugsymbole, da diese die Downloadgröße erheblich vergrößern würden.

To get profiling data that best matches the production environment (but with debugging symbols), you should compile binaries with the production=yes debug_symbols=yes SCons options.

Es ist möglich, einen Profiler auf weniger optimierten Builds laufen zu lassen (z.B. target=debug ohne LTO), aber die Ergebnisse werden natürlich weniger repräsentativ für die realen Bedingungen sein.

Warnung

Entfernen Sie nicht Debugging-Symbole in den Binärdateien mit dem Befehl strip nach dem Kompilieren der Binärdateien. Andernfalls erhalten Sie keine nützlichen Profiling-Informationen mehr, wenn Sie einen Profiler ausführen.

Benchmarking von Start-/Stopzeiten

Wenn Sie die Leistung beim Starten und Stoppen von Godot optimieren wollen, können Sie dem Profiler sagen, dass er die Kommandozeilenoption --quit für die Godot-Binärdatei verwenden soll. Dies wird Godot beenden, kurz nachdem es gestartet ist. Die Option --quit funktioniert mit --editor, --project-manager oder --path <Pfad zum Projektverzeichnis> (der ein Projekt direkt startet).

Siehe auch

Siehe Befehlszeilen-Anleitung für weitere von Godot unterstützte Kommandozeilenargumente.

Profiler-spezifische Anweisungen

VerySleepy

  • Starten Sie zuerst den Godot-Editor oder Ihr Projekt. Wenn Sie den Projektmanager starten, stellen Sie sicher, dass Sie zuerst ein Projekt bearbeiten oder ausführen. Andernfalls wird der Profiler den untergeordneten Prozess nicht verfolgen, da der Projektmanager für jedes bearbeitete oder ausgeführte Projekt einen untergeordneten Prozess erzeugt.

  • Öffnen Sie VerySleepy und wählen Sie die ausführbare Godot-Datei in der Liste der Prozesse auf der linken Seite aus:

../../_images/cpp_profiler_verysleepy_select_process.png
  • Klicken Sie rechts auf die Schaltfläche Profile All, um die Profilierung zu starten.

  • Führen Sie die Aktionen aus, die Sie im Editor oder im Projekt profilieren möchten. Wenn Sie fertig sind, klicken Sie auf Stop (nicht Abbruch).

  • Warten Sie, bis das Ergebnisfenster angezeigt wird.

  • Sobald das Ergebnisfenster angezeigt wird, filtern Sie die Ansicht, um externe Module (wie z. B. den Grafiktreiber) zu entfernen. Sie können nach Modulen filtern, indem Sie eine Zeile suchen, deren Modul mit dem Namen der ausführbaren Godot-Datei übereinstimmt, mit der rechten Maustaste auf diese Zeile klicken und dann Modul nach <Name der ausführbaren Godot-Datei> filtern in der angezeigten Dropdown-Liste wählen.

  • Ihr Ergebnisfenster sollte nun etwa so aussehen:

../../_images/cpp_profiler_verysleepy_results_filtered.png

HotSpot

  • Öffnen Sie HotSpot. Klicken Sie auf Daten aufzeichnen:

../../_images/cpp_profiler_hotspot_welcome.png
  • Im nächsten Fenster geben Sie den Pfad zur Godot-Binärdatei an, die Debugsymbole enthält.

  • Geben Sie Befehlszeilenargumente an, um ein bestimmtes Projekt auszuführen, mit oder ohne Editor.

  • Der Pfad zum Arbeitsverzeichnis kann beliebig sein, wenn für das Kommandozeilenargument --path ein absoluter Pfad verwendet wird. Ansonsten muss er so gesetzt werden, dass der relative Pfad zum Projekt gültig ist.

  • Stellen Sie sicher, dass Privilegien erhöhen aktiviert ist, wenn Sie über Administratorrechte verfügen. Dies ist zwar für die Profilierung von Godot nicht unbedingt erforderlich, stellt aber sicher, dass alle Ereignisse erfasst werden können. Andernfalls fehlen möglicherweise einige Ereignisse in der Aufzeichnung. Ihre Einstellungen sollten jetzt etwa so aussehen:

../../_images/cpp_profiler_hotspot_record.png
  • Klicken Sie auf Aufzeichnung starten und führen Sie die Aktionen aus, die Sie im Editor/Projekt profilieren möchten.

  • Beenden Sie den Editor/das Projekt normal oder verwenden Sie die Schaltfläche Profilierung stoppen in HotSpot, um die Profilerstellung vorzeitig zu beenden. Das vorzeitige Beenden der Profilerstellung kann zu saubereren Profilen führen, wenn Sie nicht an der Beendigungsprozedur der Engine interessiert sind.

  • Klicken Sie auf Ergebnisse anzeigen und warten Sie, bis die Profilierungsvisualisierung generiert wird:

../../_images/cpp_profiler_hotspot_view_results.png
  • Verwenden Sie die Registerkarten am oberen Rand, um zwischen den verschiedenen Ansichten zu navigieren. Diese Ansichten zeigen die gleichen Daten, aber auf unterschiedliche Weise. Die Registerkarte Flammdiagramm ist eine gute Möglichkeit, um auf einen Blick zu sehen, welche Funktionen die meiste Zeit in Anspruch nehmen. Diese Funktionen sind daher die wichtigsten, die optimiert werden sollten, da eine Optimierung dieser Funktionen die Leistung am meisten verbessert.

  • Unten auf allen Registerkarten außer Zusammenfassung sehen Sie außerdem eine Liste der von der Engine gestarteten CPU-Threads mit der CPU-Auslastung für jeden Thread. So können Sie sehen, welche Threads zu einem bestimmten Zeitpunkt einen Engpass darstellen können.

../../_images/cpp_profiler_hotspot_flame_graph.png

Bemerkung

Wenn Sie nicht möchten, dass der Startvorgang in das Profil aufgenommen wird, können Sie HotSpot auch an einen laufenden Prozess anhängen, indem Sie auf Daten aufzeichnen klicken und die Dropdown-Option Anwendung starten auf An Prozess(e) anhängen setzen.

Dieser prozessanlagenbasierte Workflow ähnelt dem von VerySleepy verwendeten.

Xcode Instruments

  • Öffnen Sie Xcode. Wählen Sie Entwicklerwerkzeug öffnen - Instrumente aus dem App-Menü Xcode:

  • Doppelklicken Sie auf Time Profiler im Fenster Instrumente:

../../_images/cpp_profiler_xcode_menu.png
  • Klicken Sie im Time Profiler-Fenster auf das Menü Ziel, wählen Sie Ziel wählen... und geben Sie im nächsten Fenster den Pfad zum Godot-Binärdatei, die Befehlszeilenargumente und die Umgebungsvariablen an.

../../_images/cpp_profiler_time_profiler.png
  • Sie können den Time Profiler auch an einen laufenden Prozess anhängen, indem Sie ihn aus dem Menü Ziel auswählen.

  • Klicken Sie auf die Schaltfläche Sofortaufnahme starten, um die Profilerstellung zu starten.

../../_images/cpp_profiler_time_profiler_record.png
  • Führen Sie die Aktionen aus, die Sie im Editor oder im Projekt profilieren möchten. Wenn Sie fertig sind, klicken Sie auf die Schaltfläche Stop.

  • Warten Sie, bis die Ergebnisse angezeigt werden.

  • Im unteren Teil des Fensters sehen Sie einen Aufrufbaum für alle gestarteten CPU-Threads und die Übersicht Heaviest Stack Trace.

  • Wählen Sie Systembibliotheken ausblenden im Menü Aufrufbaum (am unteren Rand des Fensters), um externe Module zu entfernen.

  • Sie können die Zeitleiste am oberen Rand des Fensters verwenden, um Details für den jeweiligen Zeitraum anzuzeigen.

../../_images/cpp_profiler_time_profiler_result.png