summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/tracelogger/drainTraceLogger.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/tracelogger/drainTraceLogger.js')
-rw-r--r--js/src/jit-test/tests/tracelogger/drainTraceLogger.js88
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 )");
+}