The simple-profiling Module#
This module provides an easy to use interface for measuring application performance.
Simple Profiling#
- timing Statement Macro#
Returns the time, in seconds and microseconds, spent executing the body of code it is wrapped around.
- Macro Call:
timing () [ body ] end [ timing ]
- Parameters:
body – A Dylan body bnf
- Values:
- Discussion:
Returns the time, in seconds and microseconds, spent executing the body of code it is wrapped around.
The first value returned is the number of whole seconds spent in body. The second value returned is the number of microseconds spent in body in addition to seconds.
- Example:
timing () for (i from 0 to 200) format-to-string("%d %d", i, i + 1) end end; => 1 671000
- profiling Macro#
Gives access to the CPU time, in seconds and microseconds, as well as some memory allocation statistics, spent executing the body of code it is wrapped around.
- Macro Call:
profiling ([profiling-type, ...]) body results results end
- Parameters:
profiling-type – Any of
cpu-time-seconds
,cpu-time-microseconds
,allocation
andallocation-stats
.body – A Dylan body bnf
results – A Dylan body bnf
- Discussion:
This macro takes a set of profiling-type parameters, performs the body of code and then executes the results. Within the results block, there will be bindings with the names of the profiling types which have the corresponding value.
Note
Using
allocation-stats
is more involved and not as flexible as one might hope. This needs further documentation and perhaps an improved implementation.Note
The memory allocation statistics may not work on all run-times and platforms.
- Example:
profiling (cpu-time-seconds, cpu-time-microseconds, allocation) execute-command(command) results message(context, "Command took %d.%s seconds, and allocated %d bytes", cpu-time-seconds, integer-to-string(floor/(cpu-time-microseconds, 1000), size: 3), allocation) end
Internals#
These functions don’t typically need to be called directly but may be useful in some scenarios.
- <profiling-state> Type#
- Equivalent:
- <cpu-profiling-type> Type#
- Equivalent:
one-of(#"cpu-time-seconds", #"cpu-time-microseconds")
- profiling-type-result Open Generic function#
- Signature:
profiling-type-result (state keyword #key #all-keys) => (value)
- Parameters:
state – An instance of
<profiling-state>
.keyword – An instance of
<symbol>
.
- Values:
value – An instance of
<object>
.
- profiling-type-result(<profiling-state>, <cpu-profiling-type>) Method#
- profiling-type-result(<profiling-state>, singleton(#"allocation")) Method#
- profiling-type-result(<profiling-state>, singleton(#"allocation-stats")) Method#
- start-profiling Function#
- Signature:
start-profiling (profiling-types) => (state)
- Parameters:
profiling-types – A sequence of any of
#"cpu-time-seconds"
,#"cpu-time-microseconds"
,#"allocation#
and#"allocation-stats#
.
- Values:
state – An instance of
<profiling-state>
.
This is useful for when direct control over profiling is needed rather than using the
profiling
macro.
- start-profiling-type Open Generic function#
- Signature:
start-profiling-type (state keyword) => ()
- Parameters:
state – An instance of
<profiling-state>
.keyword – An instance of
<symbol>
.
- start-profiling-type(<profiling-state>, <cpu-profiling-type>) Method#
- start-profiling-type(<profiling-state>, singleton(#"allocation")) Method#
- start-profiling-type(<profiling-state>, singleton(#"allocation-stats")) Method#
- stop-profiling Function#
- Signature:
stop-profiling (state profiling-types) => ()
- Parameters:
state – An instance of
<profiling-state>
.profiling-types – A sequence of
<symbol>
. These symbols should be the same as those passed tostart-profiling
.
- stop-profiling-type Open Generic function#
- Signature:
stop-profiling-type (state keyword) => ()
- Parameters:
state – An instance of
<profiling-state>
.keyword – An instance of
<symbol>
.
- stop-profiling-type(<profiling-state>, <cpu-profiling-type>) Method#
- stop-profiling-type(<profiling-state>, singleton(#"allocation")) Method#
- stop-profiling-type(<profiling-state>, singleton(#"allocation-stats")) Method#