summaryrefslogtreecommitdiffstats
path: root/dom/heapsnapshot/tests/unit/test_census-tree-node-05.js
blob: 20fb76bd2fa81a3bd278de886342de0095b2ad9f (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

/**
 * Tests CensusTreeNode with `allocationStack` => `objectClass` breakdown.
 */

function run_test() {
  const countBreakdown = { by: "count", count: true, bytes: true };

  const BREAKDOWN = {
    by: "allocationStack",
    then: {
      by: "objectClass",
      then: countBreakdown,
      other: countBreakdown
    },
    noStack: countBreakdown,
  };

  let stack;

  (function a() {
    (function b() {
      (function c() {
        stack = saveStack(3);
      }());
    }());
  }());

  const REPORT = new Map([
    [stack, { Foo:   { bytes: 10, count: 1 },
                  Bar:   { bytes: 20, count: 2 },
                  Baz:   { bytes: 30, count: 3 },
                  other: { bytes: 40, count: 4 }
                }],
    ["noStack", { bytes: 50, count: 5 }],
  ]);

  const EXPECTED = {
    name: null,
    bytes: 0,
    totalBytes: 150,
    count: 0,
    totalCount: 15,
    children: [
      {
        name: stack.parent.parent,
        bytes: 0,
        totalBytes: 100,
        count: 0,
        totalCount: 10,
        children: [
          {
            name: stack.parent,
            bytes: 0,
            totalBytes: 100,
            count: 0,
            totalCount: 10,
            children: [
              {
                name: stack,
                bytes: 0,
                totalBytes: 100,
                count: 0,
                totalCount: 10,
                children: [
                  {
                    name: "other",
                    bytes: 40,
                    totalBytes: 40,
                    count: 4,
                    totalCount: 4,
                    children: undefined,
                    id: 8,
                    parent: 4,
                    reportLeafIndex: 5,
                  },
                  {
                    name: "Baz",
                    bytes: 30,
                    totalBytes: 30,
                    count: 3,
                    totalCount: 3,
                    children: undefined,
                    id: 7,
                    parent: 4,
                    reportLeafIndex: 4,
                  },
                  {
                    name: "Bar",
                    bytes: 20,
                    totalBytes: 20,
                    count: 2,
                    totalCount: 2,
                    children: undefined,
                    id: 6,
                    parent: 4,
                    reportLeafIndex: 3,
                  },
                  {
                    name: "Foo",
                    bytes: 10,
                    totalBytes: 10,
                    count: 1,
                    totalCount: 1,
                    children: undefined,
                    id: 5,
                    parent: 4,
                    reportLeafIndex: 2,
                  },
                ],
                id: 4,
                parent: 3,
                reportLeafIndex: undefined,
              }
            ],
            id: 3,
            parent: 2,
            reportLeafIndex: undefined,
          }
        ],
        id: 2,
        parent: 1,
        reportLeafIndex: undefined,
      },
      {
        name: "noStack",
        bytes: 50,
        totalBytes: 50,
        count: 5,
        totalCount: 5,
        children: undefined,
        id: 9,
        parent: 1,
        reportLeafIndex: 6,
      },
    ],
    id: 1,
    parent: undefined,
    reportLeafIndex: undefined,
  };

  compareCensusViewData(BREAKDOWN, REPORT, EXPECTED);
}