diff options
Diffstat (limited to 'dom/base/nsWindowSizes.h')
-rw-r--r-- | dom/base/nsWindowSizes.h | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/dom/base/nsWindowSizes.h b/dom/base/nsWindowSizes.h new file mode 100644 index 0000000000..5284202b3e --- /dev/null +++ b/dom/base/nsWindowSizes.h @@ -0,0 +1,212 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsWindowSizes_h +#define nsWindowSizes_h + +#include "mozilla/Assertions.h" +#include "mozilla/PodOperations.h" +#include "mozilla/SizeOfState.h" + +class nsTabSizes { + public: + enum Kind { + DOM, // DOM stuff. + Style, // Style stuff. + Other // Everything else. + }; + + nsTabSizes() : mDom(0), mStyle(0), mOther(0) {} + + void add(Kind kind, size_t n) { + switch (kind) { + case DOM: + mDom += n; + break; + case Style: + mStyle += n; + break; + case Other: + mOther += n; + break; + default: + MOZ_CRASH("bad nsTabSizes kind"); + } + } + + size_t mDom; + size_t mStyle; + size_t mOther; +}; + +#define ZERO_SIZE(kind, mSize) mSize(0), +#define ADD_TO_TAB_SIZES(kind, mSize) aSizes->add(nsTabSizes::kind, mSize); +#define ADD_TO_TOTAL_SIZE(kind, mSize) total += mSize; +#define DECL_SIZE(kind, mSize) size_t mSize; + +#define NS_STYLE_SIZES_FIELD(name_) mStyle##name_ + +struct nsStyleSizes { + nsStyleSizes() + : +#define STYLE_STRUCT(name_) NS_STYLE_SIZES_FIELD(name_)(0), +#include "nsStyleStructList.h" +#undef STYLE_STRUCT + + dummy() { + } + + void addToTabSizes(nsTabSizes* aSizes) const { +#define STYLE_STRUCT(name_) \ + aSizes->add(nsTabSizes::Style, NS_STYLE_SIZES_FIELD(name_)); +#include "nsStyleStructList.h" +#undef STYLE_STRUCT + } + + size_t getTotalSize() const { + size_t total = 0; + +#define STYLE_STRUCT(name_) total += NS_STYLE_SIZES_FIELD(name_); +#include "nsStyleStructList.h" +#undef STYLE_STRUCT + + return total; + } + +#define STYLE_STRUCT(name_) size_t NS_STYLE_SIZES_FIELD(name_); +#include "nsStyleStructList.h" +#undef STYLE_STRUCT + + // Present just to absorb the trailing comma in the constructor. + int dummy; +}; + +#define NS_ARENA_SIZES_FIELD(classname) mArena##classname + +struct nsArenaSizes { + nsArenaSizes() + : +#define PRES_ARENA_OBJECT(name_) NS_ARENA_SIZES_FIELD(name_)(0), +#define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_) +#include "nsPresArenaObjectList.h" +#include "nsDisplayListArenaTypes.h" +#undef PRES_ARENA_OBJECT +#undef DISPLAY_LIST_ARENA_OBJECT + dummy() { + } + + void addToTabSizes(nsTabSizes* aSizes) const { +#define PRES_ARENA_OBJECT(name_) \ + aSizes->add(nsTabSizes::Other, NS_ARENA_SIZES_FIELD(name_)); +#define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_) +#include "nsPresArenaObjectList.h" +#include "nsDisplayListArenaTypes.h" +#undef PRES_ARENA_OBJECT +#undef DISPLAY_LIST_ARENA_OBJECT + } + + size_t getTotalSize() const { + size_t total = 0; + +#define PRES_ARENA_OBJECT(name_) total += NS_ARENA_SIZES_FIELD(name_); +#define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_) +#include "nsPresArenaObjectList.h" +#include "nsDisplayListArenaTypes.h" +#undef PRES_ARENA_OBJECT +#undef DISPLAY_LIST_ARENA_OBJECT + + return total; + } + +#define PRES_ARENA_OBJECT(name_) size_t NS_ARENA_SIZES_FIELD(name_); +#define DISPLAY_LIST_ARENA_OBJECT(name_) PRES_ARENA_OBJECT(name_) +#include "nsPresArenaObjectList.h" +#include "nsDisplayListArenaTypes.h" +#undef PRES_ARENA_OBJECT +#undef DISPLAY_LIST_ARENA_OBJECT + + // Present just to absorb the trailing comma in the constructor. + int dummy; +}; + +class nsWindowSizes { +#define FOR_EACH_SIZE(MACRO) \ + MACRO(DOM, mDOMElementNodesSize) \ + MACRO(DOM, mDOMTextNodesSize) \ + MACRO(DOM, mDOMCDATANodesSize) \ + MACRO(DOM, mDOMCommentNodesSize) \ + MACRO(DOM, mDOMEventTargetsSize) \ + MACRO(DOM, mDOMMediaQueryLists) \ + MACRO(DOM, mDOMPerformanceUserEntries) \ + MACRO(DOM, mDOMPerformanceResourceEntries) \ + MACRO(DOM, mDOMResizeObserverControllerSize) \ + MACRO(DOM, mDOMOtherSize) \ + MACRO(Style, mLayoutStyleSheetsSize) \ + MACRO(Style, mLayoutShadowDomStyleSheetsSize) \ + MACRO(Style, mLayoutShadowDomAuthorStyles) \ + MACRO(Other, mLayoutPresShellSize) \ + MACRO(Other, mLayoutRetainedDisplayListSize) \ + MACRO(Style, mLayoutStyleSetsStylistRuleTree) \ + MACRO(Style, mLayoutStyleSetsStylistElementAndPseudosMaps) \ + MACRO(Style, mLayoutStyleSetsStylistInvalidationMap) \ + MACRO(Style, mLayoutStyleSetsStylistRevalidationSelectors) \ + MACRO(Style, mLayoutStyleSetsStylistOther) \ + MACRO(Style, mLayoutStyleSetsOther) \ + MACRO(Style, mLayoutElementDataObjects) \ + MACRO(Other, mLayoutTextRunsSize) \ + MACRO(Other, mLayoutPresContextSize) \ + MACRO(Other, mLayoutFramePropertiesSize) \ + MACRO(Style, mLayoutComputedValuesDom) \ + MACRO(Style, mLayoutComputedValuesNonDom) \ + MACRO(Style, mLayoutComputedValuesVisited) \ + MACRO(Style, mLayoutSvgMappedDeclarations) \ + MACRO(Other, mPropertyTablesSize) \ + MACRO(Other, mBindingsSize) + + public: + explicit nsWindowSizes(mozilla::SizeOfState& aState) + : FOR_EACH_SIZE(ZERO_SIZE) mDOMEventTargetsCount(0), + mDOMEventListenersCount(0), + mArenaSizes(), + mStyleSizes(), + mState(aState) {} + + void addToTabSizes(nsTabSizes* aSizes) const { + FOR_EACH_SIZE(ADD_TO_TAB_SIZES) + mArenaSizes.addToTabSizes(aSizes); + mStyleSizes.addToTabSizes(aSizes); + } + + size_t getTotalSize() const { + size_t total = 0; + + FOR_EACH_SIZE(ADD_TO_TOTAL_SIZE) + total += mArenaSizes.getTotalSize(); + total += mStyleSizes.getTotalSize(); + + return total; + } + + FOR_EACH_SIZE(DECL_SIZE); + + uint32_t mDOMEventTargetsCount; + uint32_t mDOMEventListenersCount; + + nsArenaSizes mArenaSizes; + + nsStyleSizes mStyleSizes; + + mozilla::SizeOfState& mState; + +#undef FOR_EACH_SIZE +}; + +#undef ZERO_SIZE +#undef ADD_TO_TAB_SIZES +#undef ADD_TO_TOTAL_SIZE +#undef DECL_SIZE + +#endif // nsWindowSizes_h |