/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 |