From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- dom/base/nsWindowMemoryReporter.h | 263 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 dom/base/nsWindowMemoryReporter.h (limited to 'dom/base/nsWindowMemoryReporter.h') diff --git a/dom/base/nsWindowMemoryReporter.h b/dom/base/nsWindowMemoryReporter.h new file mode 100644 index 000000000..b9e986959 --- /dev/null +++ b/dom/base/nsWindowMemoryReporter.h @@ -0,0 +1,263 @@ +/* -*- 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 nsWindowMemoryReporter_h__ +#define nsWindowMemoryReporter_h__ + +#include "nsGlobalWindow.h" +#include "nsIMemoryReporter.h" +#include "nsIObserver.h" +#include "nsITimer.h" +#include "nsDataHashtable.h" +#include "nsWeakReference.h" +#include "mozilla/Attributes.h" +#include "mozilla/Assertions.h" +#include "mozilla/MemoryReporting.h" +#include "mozilla/PodOperations.h" +#include "mozilla/TimeStamp.h" +#include "nsArenaMemoryStats.h" + +class nsWindowSizes { +#define FOR_EACH_SIZE(macro) \ + macro(DOM, mDOMElementNodesSize) \ + macro(DOM, mDOMTextNodesSize) \ + macro(DOM, mDOMCDATANodesSize) \ + macro(DOM, mDOMCommentNodesSize) \ + macro(DOM, mDOMEventTargetsSize) \ + macro(DOM, mDOMOtherSize) \ + macro(Style, mStyleSheetsSize) \ + macro(Other, mLayoutPresShellSize) \ + macro(Style, mLayoutStyleSetsSize) \ + macro(Other, mLayoutTextRunsSize) \ + macro(Other, mLayoutPresContextSize) \ + macro(Other, mPropertyTablesSize) \ + +public: + explicit nsWindowSizes(mozilla::MallocSizeOf aMallocSizeOf) + : + #define ZERO_SIZE(kind, mSize) mSize(0), + FOR_EACH_SIZE(ZERO_SIZE) + #undef ZERO_SIZE + mDOMEventTargetsCount(0), + mDOMEventListenersCount(0), + mArenaStats(), + mMallocSizeOf(aMallocSizeOf) + {} + + void addToTabSizes(nsTabSizes *sizes) const { + #define ADD_TO_TAB_SIZES(kind, mSize) sizes->add(nsTabSizes::kind, mSize); + FOR_EACH_SIZE(ADD_TO_TAB_SIZES) + #undef ADD_TO_TAB_SIZES + mArenaStats.addToTabSizes(sizes); + } + + size_t getTotalSize() const + { + size_t total = 0; + #define ADD_TO_TOTAL_SIZE(kind, mSize) total += mSize; + FOR_EACH_SIZE(ADD_TO_TOTAL_SIZE) + #undef ADD_TO_TOTAL_SIZE + total += mArenaStats.getTotalSize(); + return total; + } + + #define DECL_SIZE(kind, mSize) size_t mSize; + FOR_EACH_SIZE(DECL_SIZE); + #undef DECL_SIZE + + uint32_t mDOMEventTargetsCount; + uint32_t mDOMEventListenersCount; + + nsArenaMemoryStats mArenaStats; + mozilla::MallocSizeOf mMallocSizeOf; + +#undef FOR_EACH_SIZE +}; + +/** + * nsWindowMemoryReporter is responsible for the 'explicit/window-objects' + * memory reporter. + * + * We classify DOM window objects into one of three categories: + * + * - "active" windows, which are displayed in a tab (as the top-level window + * or an iframe), + * + * - "cached" windows, which are in the fastback cache (aka the bfcache), and + * + * - "detached" windows, which have a null docshell. A window becomes + * detached when its