Profiling / Benchmarking

Ein allgemeines Beispiel zur Verwendung der Klasse timer finden sie hier.

Letzte Änderung :
30.07.2025, 07:35 Uhr

Profiling / Benchmarking

static int timer::start(char* label)

Beginnt die Zeitmessung eines cscript-Programmabschnittes.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
label String oder char* - frei wählbarer Name des Timers

Einfacher Timer zum Messen der Ausführzeit von Skriptanweisungen.

int main ()
{
    //  ...
    timer::reset ();
    for (i = 0; i < 10; ++i) 
    {
        timer::start ("create and save snapshot");
// einige Anweisungen ...
timer::stop ("create and save snapshot"); } timer::dump (); return 0; }

Version 2.1 (P/R 770)

priint:comet InDesign® Plug-Ins, comet_pdf

timer::stop
system::time_diff

static int timer::frame_start(
  ItemRef frameRef,
  char* key,
  float intervall,
  int flags = 0)

Starte einen Timer, der zur nächsten Ruhezeit des Programmes bestimmte Gestaltungsregeln des Rahmens ausführt. Ein Rahmen darf beliebig viele solcher Timer haben. Sie sollten aber darauf achten, dass die Timer möglichst kurze Ausführzeiten haben! Wird der Rahmen gelöscht, werden aktive Timer automatisch entfernt.

Im Parameter key der Funktion legen Sie fest, welche Gestaltungsregel(n) der Timer ausführen soll. Dazu legen Sie innerhalb der Gestaltungsregeln einen Wenn Ereignis ausführen-Block für das Ereignis key an. Alle Regeln innerhalb dieses Blockes werden dann ausschließlich von diesem Timer ausgeführt. Hier ein Screenshot für einen Timer namens TIMER:Mein Timer:

Bitte beachten Sie : Damit die Timer-Bedingung aktiviert ist, muss mindestens eine Regel der Bedingung einen Ausführzeitpunkt gesetzt haben. Es ist egal, welchen Ausführzeitpunkt Sie wählen, es ist nur wichtig, dass mindestens eine Bedingung aktiviert ist.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

-1199 : Aufruf von comet_pdf
frameRef ItemRef - Für diesen Rahmen soll der Timer definiert werden. Wird der Rahmen gelöscht oder das Dokument geschlossen, wird der Timer automatisch gestoppt.
key String oder char* - Name des Ereignisses, dessen Gestaltungsgegeln ausgeführt werden sollen.
intervall float - Start/Intervall des Timers in Sekunden

<= 1.0 : Einmaliges Ausführen des Timers
>= 1.0 : Wiederholtes Ausführen des Timers im angegebenen Intervall

Die minmale absolute Länge des Intervalls beträgt 1 Sekunde!
flags int 0 Zusatzangaben zum Timer

0 : keine weiteren Angaben
1 : Timer nur ausführen, wenn das Dokument das aktuelle Front-Dokument ist

In einem Textrahmen soll die verbleibende Zeit einer festgelegten Zeitspanne (z.B. die Länge eines Vortrages) gezeigt werden. Ist die Zeit abgelaufen, wird der Text "Ende!" angezeigt. Nachdem der Timer mit timer::frame_start (gFrame, "Mein Timer", 5.0); gestartet wurde, kann das folgende Skript für die entsprechende Gestaltungsregel (Aktion mit der ClassID 36) verwendet werden.

#include "internal/types.h"
int kTimeSpan = 1200; char kKey[] = "Mein Timer";
int main () { char dt [512]; char now [512]; char str [512]; int sec = 0;
system::now (now, ddmmyyyy_hhmmss); timer::frame_get_start (gFrame, kKey, dt);
sec = kTimeSpan - system::time_diff (now, dt, ddmmyyyy_hhmmss);
sprintf (str, "%02d:%02d", sec/60, sec-((sec/60)*60)); if (sec < 0) { strcpy (str, "Ende!"); timer::frame_stop (gFrame, kKey); }
frame::replace (gFrame, str); return 0; }

v4.1.7, R26311
flags since v4.1.8 R27522

priint:comet InDesign® Plug-Ins, comet_pdf

timer::frame_stop
timer::frame_get_start

static int timer::document_start(
  ItemRef ref,
  int actionID,
  float intervall,
  int flags = 0)

Installiere einen Idle-Time-Handler zur Ausführung eines Skriptes an einem Dokument. Es sind beliebig viele Timer erlaubt. Sie sollten aber darauf achten, dass die Timer möglichst kurze Ausführzeiten haben! Wird das Dokument geschlossen, werden aktive Timer dieses Dokumentes automatisch entfernt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

-1199 : Aufruf von comet_pdf
ref ItemRef - Referenz auf das Dokument. Sie können ein beliebiges Objekt (z.B. gFrame) des gewünschten Dokumentes verwenden.

0 : keine Bindung an ein Dokument (ab v4.3 R34900)

Beachten Sie bitte, dass im 0-Fall auch die Funktionen timer::document_get_start und timer::document_stop mit der Dokument-Referenz 0 gerufen werden müssen.

actionID int - ID der Aktion der Timerfunktion. Die Aktion muss die ClassID 62 haben. In dem Skript sind neben gFrame und gDocument folgende zusätzliche globale Variablen definiert:
  • char gDocumentID[]. Die Dokument-ID des Timer-Dokumentes oder leer ("")
  • int * gPendingCall. Setzen Sie diese Variable auf den Wert 1 (*gPendingCall = 1;) in folgenden Fällen:
    1. Ein globaler Progress-Balken wird gezeigt
    2. Das Skript benötigt einen weiteren Aufruf z.B. dann wenn das Skript in jeweils einem Schritt ein Dokument öffnet und bearbeitet und in einem zweiten Schritt dieses Dokument wieder schließt.
intervall float - Start/Intervall des Timers in Sekunden

<= 0.0 : Einmaliges Ausführen des Timers
> 0.0 : Wiederholtes Ausführen des Timers im angegebenen Intervall

Die minmale absolute Länge des Intervalls beträgt 1 Sekunde!
flags int 0 Zusatzangaben zum Timer

0 : keine weiteren Angaben
1 : Timer nur ausführen, wenn das Dokument das aktuelle Front-Dokument ist

Das folgende Skript (als Aktion der ID 123456 und mit der ClassID 62 gesichert) schreibt nach dem Timterstart timer::start (gFrame, 123456, 10.0); alle 10 Sekunden eine Meldung ins Logfile:

#include "internal/types.h"
int main () { String nm = string::alloc (); String dt = string::alloc ();
document::name (nm, gDocument); system::now (dt, hhmmss); wlog ("", "#### Doc timer called for '%s' : %s\n", nm, dt);
return 0; }

v4.1.7, R26311
flags seit v4.1.8 R27522
ref = 0 seit v4.3 R34900

priint:comet InDesign® Plug-Ins, comet_pdf

timer::document_stop
timer::document_get_start

static int timer::stop(char* label)

Beendet die Zeitmessung eines cScript Programmabschnitts. Zu jedem timer::start Aufruf sollte ein korrespondierender timer::stop Aufruf mit demselben Label vorhanden sein.

In einer zweiten Version mit zwei Parametern stoppt die Funktion einen laufenden Timer eines definierten Schlüssels für diesen Rahmen.

Name Typ Default Beschreibung
Return int   0 oder fehlercode

-1199 : Aufruf von comet_pdf
label String oder char* - Name des Timers

Version 2.1 (P/R 770)

priint:comet InDesign® Plug-Ins, comet_pdf

timer::start
timer::get_start
system::time_diff

static int timer::frame_stop(ItemRef frameRef, char* key)

Beende einen Timer eines Rahmens.

Name Typ Default Beschreibung
Return int   0 oder fehlercode

-1199 : Aufruf von comet_pdf
frameRef ItemRef - gültige Rahmenreferenz
label String oder char* - Name des Timers

v4.1.7, R26311

priint:comet InDesign® Plug-Ins, comet_pdf

timer::frame_start
timer::frame_get_start

static int timer::document_stop(ItemRef ref, int actionID)

Beende einen Timer eines Dokumentes.

Name Typ Default Beschreibung
Return int   0 oder fehlercode

-1199 : Aufruf von comet_pdf
ref ItemRef - Referenz für das Dokument. Sie können ein beliebiges Objekt (z.B. gFrame) des gewünschten Dokumentes verwenden.
actionID int - ID der Aktion, die der Timer ausführt

v4.1.7, R26311

priint:comet InDesign® Plug-Ins, comet_pdf

timer::document_start
timer::document_get_start

static int timer::frame_get_start(
  ItemRef frameRef,
  char* key,
  char* out_startDateTime)

Wann wurde ein Timer eines Rahmens gestartet?

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

502 : Kein Timer gestartet für diesen Rahmen und diesen Schlüssel
-1199 : Aufruf von comet_pdf
frameRef ItemRef - gültige Rahmenreferenz
key String oder char* - Schlüssel des Timers
out_startDateTime String oder char* 0 Startzeit des Timers im Format YYYYMMDDHHMMSS. Der Parameter darf 0 sein. In diesem Fall testet die Funktion lediglich, ob ein Timer gestartet wurde. Sonst muss die Variable einen allokierten String mind. der Länge 15 haben.

v4.1.7, R26311

priint:comet InDesign® Plug-Ins, comet_pdf

timer::frame_start
timer::frame_stop
system::time_diff

static int timer::document_get_start(
  ItemRef ref,
  char* key,
  char* out_startDateTime)

Wann wurde ein Timer eines Dokumentes gestartet?

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

502 : Kein Timer gestartet für diesen Rahmen und diesen Schlüssel
-1199 : Aufruf von comet_pdf
ref ItemRef - Referenz für das Dokument. Sie können ein beliebiges Objekt (z.B. gFrame) des gewünschten Dokumentes verwenden.
actionID int - ID der Aktion, die der Timer ausführen soll
out_startDateTime String oder char* 0 Startzeit des Timers im Format YYYYMMDDHHMMSS. Der Parameter darf 0 sein. In diesem Fall testet die Funktion lediglich, ob ein Timer gestartet wurde. Sonst muss die Variable einen allokierten String mind. der Länge 15 haben.

v4.1.7, R26311

priint:comet InDesign® Plug-Ins, comet_pdf

timer::document_start
timer::document_stop
system::time_diff

static int timer::reset(char* label = 0)

Setzt alle Werte zurück

Name Typ Default Beschreibung
Return int   0
label String oder char* 0 frei wählbare Bezeichnung. Hier muss die selbe Bezeichnung wie bei start verwendet werden.

Version 2.1 (P/R 770)

priint:comet InDesign® Plug-Ins, comet_pdf

timer::start

static int timer::dump(char* label)

Gib die gemessenen Zeiten in die Log-Datei aus.

Name Typ Default Beschreibung
Return int   0
label String oder char* - frei wählbare Bezeichnung. Hier muss die selbe Bezeichnung wie bei start verwendet werden.

Version 2.1 (P/R 770)

priint:comet InDesign® Plug-Ins, comet_pdf

timer::start

static float timer::get_seconds(char* label, int what)

Hole eine gemessene Zeit.

Name Typ Default Beschreibung
Return float   Gemessene Zeit in Sekunden oder -1.0 im Fehlerfall
label String oder char* - Name des Timers aus start
what int - Welche Zeit wollen Sie wissen?

0 : ΔTs Durchschnittszeit, die für eine Zeitmessung selbst benötigt wurde.

1 : schnellste
2 : schnellste - ΔTs
3 : langsamste
4 : langsamste - ΔTs
5 : Durchschnitt
6 : Durchschnitt - ΔTs
7 : erste
8 : erste - ΔTs
9 : letzte
10 : letzte - ΔTs
11 : Summe
12 : Summe - ΔTs

Version 2.1, R 1678, 18. Nov. 2009

priint:comet InDesign® Plug-Ins, comet_pdf

timer::get_counter
timer::start
timer::stop
timer::dump

static int timer::get_counter(char* label, int what)

Hole einen gemessenen Wert.

Name Typ Default Beschreibung
Return int   Gemessener Wert oder -1 im Fehlerfall
label String oder char* - frei wählbare Bezeichnung. Hier muss die selbe Bezeichnung wie bei start verwendet werden.
what int - Welchen Wert wollen Sie wissen?

1 : Anzahl der Aufrufe
2 : max. Rekurssionstiefe
3 : Stack

Version 2.1, R 1678, 18. Nov. 2009

priint:comet InDesign® Plug-Ins, comet_pdf

timer::get_seconds
timer::start
timer::stop
timer::dump

Messen der Zeitaufwände einzelner Skriptteile : "Klammern" Sie Teile Ihres Skriptes in start/stop_timer Aufrufe. Jeder Timer bekommt einen neuen Namen. Im Logfile können Sie die Ergebnisse durch eine Suche nach dem verwendeten Timer-Präfix leicht finden.


char stTimerPrefix[] = "XXXX";
int stTimerID = 0; char stTimerLabel [256];
char * timer_label () { sprintf (stTimerLabel, "%s %d", stTimerPrefix, stTimerID); return stTimerLabel; }
int start_timer () { ++stTimerID; timer::start (timer_label ()); return 0; }
int stop_timer () { float duration = 0.0; int hh = 0, mm = 0, ss = 0, milli = 0; timer::stop (timer_label ());
duration = timer::get_seconds (timer_label (),11); hh = toint (duration / 3600.0); mm = (toint (duration) % 3600) / 60; ss = toint (duration) % 60; milli = toint (duration * 1000.0 + 0.5) % 1000;
wlog("","%s stopped : %02d:%02d:%02d+%03d (%f)\n", timer_label (), hh, mm, ss, milli, duration);
timer::reset (timer_label ()); return 0; }
int main () { start_timer (); // // script statements // stop_timer ();
start_timer (); // // script statements // stop_timer ();
return 0; }

Seit
Plugin Version 2.1
Letzte Änderung
30.07.2025, 07:35 Uhr
Autor
Christoph Soergel

Alphabetic index HTML hierarchy of classes or Java