The timerate command does calibrated performance measurement of a Tcl command or script, script. The
script should be written so that it can be executed multiple times during the performance measurement
process. Time is measured in elapsed time using the finest timer resolution as possible, not CPU time;
if script interacts with the OS, the cost of that interaction is included. This command may be used to
provide information as to how well a script or Tcl command is performing, and can help determine
bottlenecks and fine-tune application performance.
The first and second form will evaluate script until the interval time given in milliseconds elapses, or
for 1000 milliseconds (1 second) if time is not specified.
The parameter max-count could additionally impose a further restriction by the maximal number of
iterations to evaluate the script. If max-count is specified, the evaluation will stop either this count
of iterations is reached or the time is exceeded.
It will then return a canonical Tcl-list of the form:
0.095977µs/#52095836#10419167#/sec5000.000net-ms
which indicates:
• the average amount of time required per iteration, in microseconds ([lindex $result 0])
• the count how many times it was executed ([lindex $result 2])
• the estimated rate per second ([lindex $result 4])
• the estimated real execution time without measurement overhead ([lindex $result 6])
The following options may be supplied to the timerate command:
-calibrate
To measure very fast scripts as exactly as possible, a calibration process may be required. The
-calibrate option is used to calibrate timerate itself, calculating the estimated overhead of the
given script as the default overhead for future invocations of the timerate command. If the time
parameter is not specified, the calibrate procedure runs for up to 10 seconds.
Note that the calibration process is not thread safe in the current implementation.
-overheadestimate
The -overhead parameter supplies an estimate (in microseconds, which may be a floating point
number) of the measurement overhead of each iteration of the tested script. This quantity will be
subtracted from the measured time prior to reporting results. This can be useful for removing the
cost of interpreter state reset commands from the script being measured.
-direct
The -direct option causes direct execution of the supplied script, without compilation, in a
manner similar to the time command. It can be used to measure the cost of Tcl_EvalObjEx, of the
invocation of canonical lists, and of the uncompiled versions of bytecoded commands.
As opposed to the time command, which runs the tested script for a fixed number of iterations, the
timerate command runs it for a fixed time. Additionally, the compiled variant of the script will be used
during the entire measurement, as if the script were part of a compiled procedure, if the -direct option
is not specified. The fixed time period and possibility of compilation allow for more precise results and
prevent very long execution times by slow scripts, making it practical for measuring scripts with highly
uncertain execution times.