Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/base/nsWindowSizes.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef nsWindowSizes_h
8
#define nsWindowSizes_h
9
10
#include "mozilla/Assertions.h"
11
#include "mozilla/PodOperations.h"
12
#include "mozilla/SizeOfState.h"
13
14
class nsTabSizes {
15
public:
16
  enum Kind {
17
      DOM,        // DOM stuff.
18
      Style,      // Style stuff.
19
      Other       // Everything else.
20
  };
21
22
  nsTabSizes()
23
    : mDom(0)
24
    , mStyle(0)
25
    , mOther(0)
26
0
  {
27
0
  }
28
29
  void add(Kind kind, size_t n)
30
0
  {
31
0
    switch (kind) {
32
0
      case DOM:   mDom   += n; break;
33
0
      case Style: mStyle += n; break;
34
0
      case Other: mOther += n; break;
35
0
      default:    MOZ_CRASH("bad nsTabSizes kind");
36
0
    }
37
0
  }
38
39
  size_t mDom;
40
  size_t mStyle;
41
  size_t mOther;
42
};
43
44
#define ZERO_SIZE(kind, mSize)         mSize(0),
45
0
#define ADD_TO_TAB_SIZES(kind, mSize)  aSizes->add(nsTabSizes::kind, mSize);
46
0
#define ADD_TO_TOTAL_SIZE(kind, mSize) total += mSize;
47
#define DECL_SIZE(kind, mSize)         size_t mSize;
48
49
0
#define NS_STYLE_SIZES_FIELD(name_) mStyle##name_
50
51
struct nsStyleSizes
52
{
53
  nsStyleSizes()
54
    :
55
      #define STYLE_STRUCT(name_) \
56
        NS_STYLE_SIZES_FIELD(name_)(0),
57
      #include "nsStyleStructList.h"
58
      #undef STYLE_STRUCT
59
60
      dummy()
61
0
  {}
62
63
  void addToTabSizes(nsTabSizes* aSizes) const
64
0
  {
65
0
    #define STYLE_STRUCT(name_) \
66
0
      aSizes->add(nsTabSizes::Style, NS_STYLE_SIZES_FIELD(name_));
67
0
    #include "nsStyleStructList.h"
68
0
    #undef STYLE_STRUCT
69
0
  }
70
71
  size_t getTotalSize() const
72
0
  {
73
0
    size_t total = 0;
74
0
75
0
    #define STYLE_STRUCT(name_) \
76
0
      total += NS_STYLE_SIZES_FIELD(name_);
77
0
    #include "nsStyleStructList.h"
78
0
    #undef STYLE_STRUCT
79
0
80
0
    return total;
81
0
  }
82
83
  #define STYLE_STRUCT(name_) \
84
    size_t NS_STYLE_SIZES_FIELD(name_);
85
  #include "nsStyleStructList.h"
86
  #undef STYLE_STRUCT
87
88
  // Present just to absorb the trailing comma in the constructor.
89
  int dummy;
90
};
91
92
0
#define NS_ARENA_SIZES_FIELD(classname) mArena##classname
93
94
struct nsArenaSizes {
95
#define FOR_EACH_SIZE(macro) \
96
0
  macro(Other, mLineBoxes) \
97
0
  macro(Style, mRuleNodes) \
98
0
  macro(Style, mComputedStyles)
99
100
  nsArenaSizes()
101
    :
102
      FOR_EACH_SIZE(ZERO_SIZE)
103
104
      #define FRAME_ID(classname, ...) \
105
        NS_ARENA_SIZES_FIELD(classname)(0),
106
      #define ABSTRACT_FRAME_ID(...)
107
      #include "nsFrameIdList.h"
108
      #undef FRAME_ID
109
      #undef ABSTRACT_FRAME_ID
110
111
      dummy()
112
0
  {}
113
114
  void addToTabSizes(nsTabSizes* aSizes) const
115
0
  {
116
0
    FOR_EACH_SIZE(ADD_TO_TAB_SIZES)
117
0
118
0
    #define FRAME_ID(classname, ...) \
119
0
      aSizes->add(nsTabSizes::Other, NS_ARENA_SIZES_FIELD(classname));
120
0
    #define ABSTRACT_FRAME_ID(...)
121
0
    #include "nsFrameIdList.h"
122
0
    #undef FRAME_ID
123
0
    #undef ABSTRACT_FRAME_ID
124
0
  }
125
126
  size_t getTotalSize() const
127
0
  {
128
0
    size_t total = 0;
129
0
130
0
    FOR_EACH_SIZE(ADD_TO_TOTAL_SIZE)
131
0
132
0
    #define FRAME_ID(classname, ...) \
133
0
      total += NS_ARENA_SIZES_FIELD(classname);
134
0
    #define ABSTRACT_FRAME_ID(...)
135
0
    #include "nsFrameIdList.h"
136
0
    #undef FRAME_ID
137
0
    #undef ABSTRACT_FRAME_ID
138
0
139
0
    return total;
140
0
  }
141
142
  FOR_EACH_SIZE(DECL_SIZE)
143
144
  #define FRAME_ID(classname, ...) \
145
    size_t NS_ARENA_SIZES_FIELD(classname);
146
  #define ABSTRACT_FRAME_ID(...)
147
  #include "nsFrameIdList.h"
148
  #undef FRAME_ID
149
  #undef ABSTRACT_FRAME_ID
150
151
  // Present just to absorb the trailing comma in the constructor.
152
  int dummy;
153
154
#undef FOR_EACH_SIZE
155
};
156
157
class nsWindowSizes
158
{
159
#define FOR_EACH_SIZE(macro) \
160
0
  macro(DOM,   mDOMElementNodesSize) \
161
0
  macro(DOM,   mDOMTextNodesSize) \
162
0
  macro(DOM,   mDOMCDATANodesSize) \
163
0
  macro(DOM,   mDOMCommentNodesSize) \
164
0
  macro(DOM,   mDOMEventTargetsSize) \
165
0
  macro(DOM,   mDOMMediaQueryLists) \
166
0
  macro(DOM,   mDOMPerformanceUserEntries) \
167
0
  macro(DOM,   mDOMPerformanceResourceEntries) \
168
0
  macro(DOM,   mDOMOtherSize) \
169
0
  macro(Style, mLayoutStyleSheetsSize) \
170
0
  macro(Style, mLayoutShadowDomStyleSheetsSize) \
171
0
  macro(Style, mLayoutShadowDomAuthorStyles) \
172
0
  macro(Other, mLayoutPresShellSize) \
173
0
  macro(Style, mLayoutStyleSetsStylistRuleTree) \
174
0
  macro(Style, mLayoutStyleSetsStylistElementAndPseudosMaps) \
175
0
  macro(Style, mLayoutStyleSetsStylistInvalidationMap) \
176
0
  macro(Style, mLayoutStyleSetsStylistRevalidationSelectors) \
177
0
  macro(Style, mLayoutStyleSetsStylistOther) \
178
0
  macro(Style, mLayoutStyleSetsOther) \
179
0
  macro(Style, mLayoutElementDataObjects) \
180
0
  macro(Other, mLayoutTextRunsSize) \
181
0
  macro(Other, mLayoutPresContextSize) \
182
0
  macro(Other, mLayoutFramePropertiesSize) \
183
0
  macro(Style, mLayoutComputedValuesDom) \
184
0
  macro(Style, mLayoutComputedValuesNonDom) \
185
0
  macro(Style, mLayoutComputedValuesVisited) \
186
0
  macro(Other, mPropertyTablesSize) \
187
0
  macro(Other, mBindingsSize) \
188
189
public:
190
  explicit nsWindowSizes(mozilla::SizeOfState& aState)
191
    :
192
      FOR_EACH_SIZE(ZERO_SIZE)
193
      mDOMEventTargetsCount(0),
194
      mDOMEventListenersCount(0),
195
      mArenaSizes(),
196
      mStyleSizes(),
197
      mState(aState)
198
0
  {}
199
200
0
  void addToTabSizes(nsTabSizes* aSizes) const {
201
0
    FOR_EACH_SIZE(ADD_TO_TAB_SIZES)
202
0
    mArenaSizes.addToTabSizes(aSizes);
203
0
    mStyleSizes.addToTabSizes(aSizes);
204
0
  }
205
206
  size_t getTotalSize() const
207
0
  {
208
0
    size_t total = 0;
209
0
210
0
    FOR_EACH_SIZE(ADD_TO_TOTAL_SIZE)
211
0
    total += mArenaSizes.getTotalSize();
212
0
    total += mStyleSizes.getTotalSize();
213
0
214
0
    return total;
215
0
  }
216
217
  FOR_EACH_SIZE(DECL_SIZE);
218
219
  uint32_t mDOMEventTargetsCount;
220
  uint32_t mDOMEventListenersCount;
221
222
  nsArenaSizes mArenaSizes;
223
224
  nsStyleSizes mStyleSizes;
225
226
  mozilla::SizeOfState& mState;
227
228
#undef FOR_EACH_SIZE
229
};
230
231
#undef ZERO_SIZE
232
#undef ADD_TO_TAB_SIZES
233
#undef ADD_TO_TOTAL_SIZE
234
#undef DECL_SIZE
235
236
#endif // nsWindowSizes_h