Kategorie: Entwickler
Ab Engineversion: 1.0 OC
StopScriptProfiler
Beschreibung
Stoppt den Scriptprofiler, und gibt das Ergebnis im Log aus.
Syntax
bool StopScriptProfiler();
Anmerkung
Mit dem Scriptprofiler lässt sich messen, wie viel Rechenzeit die Scriptengine in welchen Scriptfunktionen aufwendet. Dies kann nützlich sein, um in langsam laufenden Szenarien zu prüfen, ob und wo sich Flaschenhälse in der Ausführung von Scripten befinden. Gemessen werden immer jeweils die Scriptausführungen zwischen einem StartScriptProfiler und einem StopScriptProfiler-Aufruf.
Beispiel
Zunächst wird der Profiler gestartet, indem man irgendwo StartScriptProfiler ausführt - zum Beispiel im Konsolenfenster, wenn die Engine im Entwicklermodus gestartet wird. Nach einer Weile Spiel führt man dann StopScriptProfiler aus, und erhält zum Beispiel folgende Ausgabe im Log:
Profiler statistics: ============================== 00037ms global Explode 00035ms Firestone::Hit 00020ms Tree_Coniferous::Damage 00020ms Tree_Coniferous::ChopDown 00018ms game DeployPlayer 00018ms Loam::Hit 00018ms Bire::ControlDigDouble 00012ms Direct exec ==============================
In dieser Ausgabe sieht man, dass die größte Scriptbremse Explosionen sind. "global Explode" ist die Funktion Explode, die irgendwo global im Script definiert ist. Auf Platz zwei steht die Auftrefffunktion vom Superflint (Firestone::Hit). Hierbei ist zu beachten, dass alle Unteraufrufe von Scriptfunktionen auch immer mit einbezogen werden. Die rechenintesiven Explode-Aufrufe schlagen also sowohl in "global Explode", als auch in "Firestone::Hit" zu Buche. Rekursiv sich selbst aufrufende Funktionen zählen sich entsprechend auch für jede Rekursion doppelt.
"game DeployPlayer" ist ein Aufruf im Szenarienscript. "Direct exec" ist die Summe aller zur Laufzeit kompiliierten und ausgeführten Scripte. Das sind zum Beispiel eval oder Menü-Callbacks.
Es ist zu beachten, dass rechenintensive Scripte nicht die einzigen Bremsen im Spiel sind. Wenn ein Objekt zum Beispiel sehr viele Partikel erzeugt, kann dies das Spiel bremsen, ohne in der Scriptengine aufzutauchen. Ein anderes Beispiel wäre das Erzeugen von sehr vielen Objekten.
Siehe auch: StartScriptProfiler