Talk:Nasal performance and benchmarks
I would suggest to use an empty vector and append all data to that - that way, you can use an arbitrary front-end to process/visualize the data, i.e. either print() (headless) or even the Canvas system (e.g. rleibner's plotting helpers). As a matter of fact, it is a good idea to only sample all data pointers and gather them inside a container, and do the processing afterwards. That way, we can also visualize frame rate/frame spacing (e.g. to show how the GC kicks in).
Basically, it would make sense to accept a delegate callback, which would in turn handle all record keeping, e.g. by appending hashes to a vector for all important data points - using systime() to obtain a time stamp for each step.
That way, it would even be possible to procedurally create output for different purposes (e.g. XML or wiki markup for tables shown here)