summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/tracelogger/drainTraceLogger.js
blob: e394074bdd635450beeb1ecdd34b5a3cb05b0cbd (plain)
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 )");
}