From 95027d872548202d4074b50e47afbdf4df2bd6e9 Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Wed, 29 Jun 2011 13:01:07 +0200 Subject: [PATCH] Bug 667468 - Add a dummy DOM memory reporter behind a compilation flag. r=njn --- dom/base/Makefile.in | 1 + dom/base/nsDOMMemoryReporter.cpp | 88 ++++++++++++++++++++++++++++++++ dom/base/nsDOMMemoryReporter.h | 62 ++++++++++++++++++++++ layout/build/nsLayoutStatics.cpp | 11 ++++ 4 files changed, 162 insertions(+) create mode 100644 dom/base/nsDOMMemoryReporter.cpp create mode 100644 dom/base/nsDOMMemoryReporter.h diff --git a/dom/base/Makefile.in b/dom/base/Makefile.in index cb98ccb277ac..39f01b5b2663 100644 --- a/dom/base/Makefile.in +++ b/dom/base/Makefile.in @@ -112,6 +112,7 @@ CPPSRCS = \ nsStructuredCloneContainer.cpp \ nsDOMNavigationTiming.cpp \ nsPerformance.cpp \ + nsDOMMemoryReporter.cpp \ $(NULL) include $(topsrcdir)/dom/dom-config.mk diff --git a/dom/base/nsDOMMemoryReporter.cpp b/dom/base/nsDOMMemoryReporter.cpp new file mode 100644 index 000000000000..9db544141670 --- /dev/null +++ b/dom/base/nsDOMMemoryReporter.cpp @@ -0,0 +1,88 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla code. + * + * The Initial Developer of the Original Code is Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Mounir Lamouri (original author) + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsDOMMemoryReporter.h" + + +nsDOMMemoryReporter::nsDOMMemoryReporter() +{ +} + +NS_IMPL_ISUPPORTS1(nsDOMMemoryReporter, nsIMemoryReporter) + +/* static */ +void +nsDOMMemoryReporter::Init() +{ + // The memory reporter manager is going to own this object. + NS_RegisterMemoryReporter(new nsDOMMemoryReporter()); +} + +NS_IMETHODIMP +nsDOMMemoryReporter::GetProcess(char** aProcess) +{ + // "" means the main process. + *aProcess = strdup(""); + return NS_OK; +} + +NS_IMETHODIMP +nsDOMMemoryReporter::GetPath(char** aMemoryPath) +{ + *aMemoryPath = strdup("explicit/dom"); + return NS_OK; +} + +NS_IMETHODIMP +nsDOMMemoryReporter::GetKind(int* aKind) +{ + *aKind = MR_HEAP; + return NS_OK; +} + +NS_IMETHODIMP +nsDOMMemoryReporter::GetDescription(char** aDescription) +{ + *aDescription = strdup("Memory used by the DOM."); + return NS_OK; +} +NS_IMETHODIMP +nsDOMMemoryReporter::GetMemoryUsed(PRInt64* aMemoryUsed) { + *aMemoryUsed = 0; + return NS_OK; +} + diff --git a/dom/base/nsDOMMemoryReporter.h b/dom/base/nsDOMMemoryReporter.h new file mode 100644 index 000000000000..48bc21141c80 --- /dev/null +++ b/dom/base/nsDOMMemoryReporter.h @@ -0,0 +1,62 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla code. + * + * The Initial Developer of the Original Code is Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Mounir Lamouri (original author) + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsDOMMemoryReporter_h__ +#define nsDOMMemoryReporter_h__ + +#include "nsIMemoryReporter.h" + + +class nsDOMMemoryReporter: public nsIMemoryReporter { +public: + NS_DECL_ISUPPORTS + + static void Init(); + + NS_IMETHOD GetProcess(char** aProcess); + NS_IMETHOD GetPath(char** aMemoryPath); + NS_IMETHOD GetKind(int* aKnd); + NS_IMETHOD GetDescription(char** aDescription); + NS_IMETHOD GetMemoryUsed(PRInt64* aMemoryUsed); + +private: + // Protect ctor, use Init() instead. + nsDOMMemoryReporter(); +}; + +#endif // nsDOMMemoryReporter_h__ + diff --git a/layout/build/nsLayoutStatics.cpp b/layout/build/nsLayoutStatics.cpp index fb61d3dfa47a..89f5d10916d5 100644 --- a/layout/build/nsLayoutStatics.cpp +++ b/layout/build/nsLayoutStatics.cpp @@ -122,6 +122,7 @@ #include "nsRefreshDriver.h" #include "nsHyphenationManager.h" +#include "nsDOMMemoryReporter.h" extern void NS_ShutdownChainItemPool(); @@ -265,12 +266,22 @@ nsLayoutStatics::Initialize() NS_SealStaticAtomTable(); +// TODO: DOM_MEMORY_REPORTER should not be defined in a regular build for the +// moment. This protection will be removed when bug 663271 will be close enough +// to a shippable state. +#ifdef DOM_MEMORY_REPORTER + nsDOMMemoryReporter::Init(); +#endif + return NS_OK; } void nsLayoutStatics::Shutdown() { + // Don't need to shutdown nsDOMMemoryReporter, that will be done by the memory + // reporter manager. + nsFrameScriptExecutor::Shutdown(); nsFocusManager::Shutdown(); #ifdef MOZ_XUL