1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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 )");
}
|