StopScriptProfiler

Kategorie: Entwickler
Ab Engineversion: 1.0 OC

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
Sven2, 2007-03