Maybe you find it useful for profiling..
Also see:
http://hg.mozilla.org/tamarin-central/file/dab354bc047c/extensions/Trace.as
<canvas debug="true">
<passthrough>
import flash.trace.Trace;
</passthrough>
<attribute name="traceLog" value="$once{[]}" />
<!--
Trace.OFF
Trace.METHODS
Trace.METHODS_WITH_ARGS
Trace.METHODS_AND_LINES
Trace.METHODS_AND_LINES_WITH_ARGS
-->
<attribute name="traceLevel" value="$once{Trace.METHODS_WITH_ARGS}"
type="number"/>
<method name="traceListener" args="file_name:String, linenum:int,
method_name:String, method_args:String">
if (! (method_name == '' ||
method_name.indexOf('Array') == 0 ||
method_name.indexOf('Object') == 0 ||
method_name.indexOf('Function') == 0 ||
method_name.indexOf('String') == 0 ||
method_name.indexOf('Math$') == 0 ||
method_name.indexOf('global/') == 0 ||
method_name.indexOf('flash.') == 0 ||
method_name.indexOf('mx.') == 0)) {
canvas.traceLog.push(file_name, linenum, method_name, method_args);
}
</method>
<method name="setTrace" args="on:Boolean">
if (on) {
Debug.info("start tracing")
canvas.traceLog = [];
Trace.setLevel(canvas.traceLevel, Trace.LISTENER);
Trace.setListener(canvas.traceListener);
} else {
Trace.setListener(null);
Trace.setLevel(Trace.OFF, Trace.LISTENER);
Debug.info("done tracing, %d elements", canvas.traceLog.length / 4)
}
</method>
<method name="dumpTrace" ><![CDATA[
var log = canvas.traceLog;
var MAX = Math.min(4*200, log.length);
var i = 0;
function dump () {
var max = Math.min(i + 4*100, MAX);
for (; i<max; i+=4) {
Debug.write("file=%s, line=%d, method=%s, args=%s", log[i],
log[i+1], log[i+2], log[i+3]);
}
if (max != MAX) {
LzTimeKernel.setTimeout(dump, 1);
} else if (MAX < log.length) {
Debug.info("omitted %d entries", (log.length - MAX) / 4);
}
}
dump();
]]></method>
<button text="enable" onclick="canvas.setTrace(true)" />
<button x="100" text="disable" onclick="canvas.setTrace(false)" />
<button x="200" text="dump trace" onclick="canvas.dumpTrace()" />
</canvas>