tjk: I noticed the following example on comp.lang.tcl and thought that it was
so I decided it was worth preserving on the wiki.
Fredrik wrote: sorry if this is a stupid question, but I would like to get into profiling of some of my TclOO classes, i.e. some use cases for their methods. Now, I see that the Tcllib profiler package redefines the "proc" command to do the dynamic source code analysis. Now, would that behave anywhere near correctly on a TclOO object method call?
DKF responded: No.
Frederick: If not, which I would guess is the case, are there alternatives which would work?
DKF: Mix in some kind of interceptor class into an object you want to watch, like this:
oo::class create interceptor { filter INTERCEPT method INTERCEPT args { set t [time { catch {next {*}$args} msg opts }] puts "[lindex $t 0]µs for [lindex $args 0] on [self]" return -options $opts $msg } } # A silly example class oo::class create example { method bar x { for {set i 0} {$i<$x} {incr i} { incr out $i } return $out } } example create foo puts [foo bar 500] # Attach the instrumentation and rerun with a little profiling... oo::objdefine foo mixin interceptor puts [foo bar 500]
OK, that's a very noddy example but it shows how to do it.
Donal.