diff options
Diffstat (limited to 'js/src/jit-test/tests/tracelogger/drainTraceLogger.js')
-rw-r--r-- | js/src/jit-test/tests/tracelogger/drainTraceLogger.js | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/tracelogger/drainTraceLogger.js b/js/src/jit-test/tests/tracelogger/drainTraceLogger.js new file mode 100644 index 000000000..e394074bd --- /dev/null +++ b/js/src/jit-test/tests/tracelogger/drainTraceLogger.js @@ -0,0 +1,88 @@ +function TestDrainTraceLoggerInvariants(obj) { + var scripts = 0; + var stops = 0; + for (var i = 0; i < objs.length; i++) { + if (objs[i].logType == "Script") { + scripts++; + assertEq("fileName" in objs[i], true); + assertEq("lineNumber" in objs[i], true); + assertEq("columnNumber" in objs[i], true); + } else if (objs[i].logType == "Stop") { + stops++; + } else { + assertEq(true, false); + } + } + assertEq(scripts, stops + 1); + // "+ 1" because we get a start for drainTraceLogger.js:1, but not the stop. +} + +function GetMaxScriptDepth(obj) { + var max_depth = 0; + var depth = 0; + for (var i = 0; i < objs.length; i++) { + if (objs[i].logType == "Stop") + depth--; + else { + depth++; + if (depth > max_depth) + max_depth = depth; + } + } + return max_depth; +} + +function foo1() { + foo2(); +} +function foo2() { + +} + +var du = new Debugger(); +if (typeof du.drainTraceLoggerScriptCalls == "function") { + // Test normal setup. + du = new Debugger(); + du.setupTraceLoggerScriptCalls(); + + du.startTraceLogger(); + du.endTraceLogger(); + + var objs = du.drainTraceLoggerScriptCalls(); + TestDrainTraceLoggerInvariants(objs); + + // Test basic script. + for (var i=0; i<20; i++) + foo1(); + + du = new Debugger(); + du.setupTraceLoggerScriptCalls(); + + du.startTraceLogger(); + foo1(); + du.endTraceLogger(); + + var objs = du.drainTraceLoggerScriptCalls(); + TestDrainTraceLoggerInvariants(objs); + assertEq(3, GetMaxScriptDepth(objs), "drainTraceLogger.js:0 + foo1 + foo2"); + assertEq(5, objs.length, "drainTraceLogger.js:0 + foo1 + foo2 + stop + stop"); + + // Test basic script. + for (var i=0; i<20; i++) + foo1(); + + du = new Debugger(); + du.setupTraceLoggerScriptCalls(); + + du.startTraceLogger(); + for (var i=0; i<100; i++) { + foo1(); + } + du.endTraceLogger(); + + var objs = du.drainTraceLoggerScriptCalls(); + TestDrainTraceLoggerInvariants(objs); + assertEq(3, GetMaxScriptDepth(objs), "drainTraceLogger.js:0 + foo1 + foo2"); + assertEq(4*100 + 1, objs.length); + assertEq(1 + 4*100, objs.length, "drainTraceLogger.js:0 + 4 * ( foo1 + foo2 + stop + stop )"); +} |