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¶