MessageTally sometimes inaccurate? (FFI involved?)
schwa at fastmail.us
Wed Dec 22 04:49:59 UTC 2004
I have a Croquet app that has a method #debugCheckForError that gets
called quite often. Depending on the application state, it might be
called 1000 times per world cycle. It looks something like:
self isDebugging ifTrue: ["do some debug stuff"]
I leave out the debug stuff because 'isDebugging' is false during my
Here's what happens when I use 'start MessageTally' from the World's
'debug...' menu (all figures are conservative, slightly understating the
problem). MessageTally reports that half the time is spent in
#debugCheckForError. I tallied for 20 seconds, so at 1000 times/frame
and 50 frames/second, this comes to 1000000 calls to
#debugCheckForError. When I compare to...
[1000000 timesRepeat: [anObject debugCheckForError]] timeToRun
...it takes roughly 800 milliseconds, more than 2 orders of magnitude
different from what MessageTally reported. Whuh?!?
I think that this might have something to do with proximity to FFI calls
(for OpenGL), but don't know exactly what. The method is typically
called in situations like...
... where the preceding messages invoke FFI functions.
One last thing: if I give #debugCheckForError an empty method body, then
#spyOn: no longer reports a disproportionate share of the total
Anyone have a clue?
More information about the Squeak-dev