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/. */
7 #ifndef nsWindowSizes_h
8 #define nsWindowSizes_h
10 #include "mozilla/Assertions.h"
11 #include "mozilla/PodOperations.h"
12 #include "mozilla/SizeOfState.h"
18 Style
, // Style stuff.
19 Other
// Everything else.
22 nsTabSizes() : mDom(0), mStyle(0), mOther(0) {}
24 void add(Kind kind
, size_t n
) {
36 MOZ_CRASH("bad nsTabSizes kind");
45 #define ZERO_SIZE(kind, mSize) mSize(0),
46 #define ADD_TO_TAB_SIZES(kind, mSize) aSizes->add(nsTabSizes::kind, mSize);
47 #define ADD_TO_TOTAL_SIZE(kind, mSize) total += mSize;
48 #define DECL_SIZE(kind, mSize) size_t mSize;
50 #define NS_STYLE_SIZES_FIELD(name_) mStyle##name_
55 #define STYLE_STRUCT(name_) NS_STYLE_SIZES_FIELD(name_)(0),
56 #include "nsStyleStructList.h"
62 void addToTabSizes(nsTabSizes
* aSizes
) const {
63 #define STYLE_STRUCT(name_) \
64 aSizes->add(nsTabSizes::Style, NS_STYLE_SIZES_FIELD(name_));
65 #include "nsStyleStructList.h"
69 size_t getTotalSize() const {
72 #define STYLE_STRUCT(name_) total += NS_STYLE_SIZES_FIELD(name_);
73 #include "nsStyleStructList.h"
79 #define STYLE_STRUCT(name_) size_t NS_STYLE_SIZES_FIELD(name_);
80 #include "nsStyleStructList.h"
83 // Present just to absorb the trailing comma in the constructor.
87 #define NS_ARENA_SIZES_FIELD(classname) mArena##classname
92 #define PRES_ARENA_OBJECT(name_) NS_ARENA_SIZES_FIELD(name_)(0),
93 #define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_)
94 #include "nsPresArenaObjectList.h"
95 #include "nsDisplayListArenaTypes.h"
96 #undef PRES_ARENA_OBJECT
97 #undef DISPLAY_LIST_ARENA_OBJECT
101 void addToTabSizes(nsTabSizes
* aSizes
) const {
102 #define PRES_ARENA_OBJECT(name_) \
103 aSizes->add(nsTabSizes::Other, NS_ARENA_SIZES_FIELD(name_));
104 #define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_)
105 #include "nsPresArenaObjectList.h"
106 #include "nsDisplayListArenaTypes.h"
107 #undef PRES_ARENA_OBJECT
108 #undef DISPLAY_LIST_ARENA_OBJECT
111 size_t getTotalSize() const {
114 #define PRES_ARENA_OBJECT(name_) total += NS_ARENA_SIZES_FIELD(name_);
115 #define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_)
116 #include "nsPresArenaObjectList.h"
117 #include "nsDisplayListArenaTypes.h"
118 #undef PRES_ARENA_OBJECT
119 #undef DISPLAY_LIST_ARENA_OBJECT
124 #define PRES_ARENA_OBJECT(name_) size_t NS_ARENA_SIZES_FIELD(name_);
125 #define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_)
126 #include "nsPresArenaObjectList.h"
127 #include "nsDisplayListArenaTypes.h"
128 #undef PRES_ARENA_OBJECT
129 #undef DISPLAY_LIST_ARENA_OBJECT
131 // Present just to absorb the trailing comma in the constructor.
136 #define FOR_EACH_SIZE(MACRO) \
137 MACRO(DOM, mDOMElementNodesSize) \
138 MACRO(DOM, mDOMTextNodesSize) \
139 MACRO(DOM, mDOMCDATANodesSize) \
140 MACRO(DOM, mDOMCommentNodesSize) \
141 MACRO(DOM, mDOMEventTargetsSize) \
142 MACRO(DOM, mDOMMediaQueryLists) \
143 MACRO(DOM, mDOMPerformanceEventEntries) \
144 MACRO(DOM, mDOMPerformanceUserEntries) \
145 MACRO(DOM, mDOMPerformanceResourceEntries) \
146 MACRO(DOM, mDOMResizeObserverControllerSize)
148 nsDOMSizes() : FOR_EACH_SIZE(ZERO_SIZE
) mDOMOtherSize(0) {}
150 void addToTabSizes(nsTabSizes
* aSizes
) const {
151 FOR_EACH_SIZE(ADD_TO_TAB_SIZES
)
152 aSizes
->add(nsTabSizes::DOM
, mDOMOtherSize
);
155 size_t getTotalSize() const {
157 FOR_EACH_SIZE(ADD_TO_TOTAL_SIZE
)
158 total
+= mDOMOtherSize
;
162 FOR_EACH_SIZE(DECL_SIZE
)
164 size_t mDOMOtherSize
;
168 class nsWindowSizes
{
169 #define FOR_EACH_SIZE(MACRO) \
170 MACRO(Style, mLayoutStyleSheetsSize) \
171 MACRO(Style, mLayoutShadowDomStyleSheetsSize) \
172 MACRO(Style, mLayoutShadowDomAuthorStyles) \
173 MACRO(Other, mLayoutPresShellSize) \
174 MACRO(Other, mLayoutRetainedDisplayListSize) \
175 MACRO(Style, mLayoutStyleSetsStylistRuleTree) \
176 MACRO(Style, mLayoutStyleSetsStylistElementAndPseudosMaps) \
177 MACRO(Style, mLayoutStyleSetsStylistInvalidationMap) \
178 MACRO(Style, mLayoutStyleSetsStylistRevalidationSelectors) \
179 MACRO(Style, mLayoutStyleSetsStylistOther) \
180 MACRO(Style, mLayoutStyleSetsOther) \
181 MACRO(Style, mLayoutElementDataObjects) \
182 MACRO(Other, mLayoutTextRunsSize) \
183 MACRO(Other, mLayoutPresContextSize) \
184 MACRO(Other, mLayoutFramePropertiesSize) \
185 MACRO(Style, mLayoutComputedValuesDom) \
186 MACRO(Style, mLayoutComputedValuesNonDom) \
187 MACRO(Style, mLayoutComputedValuesVisited) \
188 MACRO(Style, mLayoutSvgMappedDeclarations) \
189 MACRO(Other, mPropertyTablesSize) \
190 MACRO(Other, mBindingsSize)
193 explicit nsWindowSizes(mozilla::SizeOfState
& aState
)
194 : FOR_EACH_SIZE(ZERO_SIZE
) mDOMEventTargetsCount(0),
195 mDOMEventListenersCount(0),
200 void addToTabSizes(nsTabSizes
* aSizes
) const {
201 FOR_EACH_SIZE(ADD_TO_TAB_SIZES
)
202 mDOMSizes
.addToTabSizes(aSizes
);
203 mArenaSizes
.addToTabSizes(aSizes
);
204 mStyleSizes
.addToTabSizes(aSizes
);
207 size_t getTotalSize() const {
210 FOR_EACH_SIZE(ADD_TO_TOTAL_SIZE
)
211 total
+= mDOMSizes
.getTotalSize();
212 total
+= mArenaSizes
.getTotalSize();
213 total
+= mStyleSizes
.getTotalSize();
218 FOR_EACH_SIZE(DECL_SIZE
);
220 uint32_t mDOMEventTargetsCount
;
221 uint32_t mDOMEventListenersCount
;
223 nsDOMSizes mDOMSizes
;
225 nsArenaSizes mArenaSizes
;
227 nsStyleSizes mStyleSizes
;
229 mozilla::SizeOfState
& mState
;
235 #undef ADD_TO_TAB_SIZES
236 #undef ADD_TO_TOTAL_SIZE
239 #endif // nsWindowSizes_h