diff -r 000000000000 -r 6474c204b198 dom/base/nsWindowMemoryReporter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/base/nsWindowMemoryReporter.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,247 @@ +/* -*- 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 "nsIMemoryReporter.h" +#include "nsIObserver.h" +#include "nsITimer.h" +#include "nsDataHashtable.h" +#include "nsWeakReference.h" +#include "nsAutoPtr.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: + 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); + } + + #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