Bug 1477512: Part 2 - Add memory reporting functions to nsThread. r?erahm draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 21 Jul 2018 14:17:23 -0700
changeset 821177 a987e7de4f8d3f9deb68bd0619dbb4639f57f8f3
parent 821176 dcd928484f504d5b783c8b9e5c512ba446391106
child 821178 1f902f2d190f9c6bfea0f8b6702b9ae91e4022d8
push id117030
push usermaglione.k@gmail.com
push dateSat, 21 Jul 2018 23:02:46 +0000
reviewerserahm
bugs1477512
milestone63.0a1
Bug 1477512: Part 2 - Add memory reporting functions to nsThread. r?erahm MozReview-Commit-ID: 9wlNLaY9y8I
xpcom/threads/nsThread.cpp
xpcom/threads/nsThread.h
--- a/xpcom/threads/nsThread.cpp
+++ b/xpcom/threads/nsThread.cpp
@@ -1046,16 +1046,47 @@ nsThread::GetPerformanceCounter(nsIRunna
     mozilla::dom::DocGroup* docGroup = docRunnable->DocGroup();
     if (docGroup) {
       return docGroup->GetPerformanceCounter();
     }
   }
   return nullptr;
 }
 
+size_t
+nsThread::ShallowSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
+{
+  size_t n = 0;
+  if (mShutdownContext) {
+    n += aMallocSizeOf(mShutdownContext);
+  }
+  n += mRequestedShutdownContexts.ShallowSizeOfExcludingThis(aMallocSizeOf);
+  return aMallocSizeOf(this) + aMallocSizeOf(mThread) + n;
+}
+
+size_t
+nsThread::SizeOfEventQueues(mozilla::MallocSizeOf aMallocSizeOf) const
+{
+  size_t n = 0;
+  if (mCurrentPerformanceCounter) {
+    n += aMallocSizeOf(mCurrentPerformanceCounter);
+  }
+  if (mEventTarget) {
+    // The size of mEvents is reported by mEventTarget.
+    n += mEventTarget->SizeOfIncludingThis(aMallocSizeOf);
+  }
+  return n;
+}
+
+size_t
+nsThread::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
+{
+  return ShallowSizeOfIncludingThis(aMallocSizeOf) + SizeOfEventQueues(aMallocSizeOf);
+}
+
 NS_IMETHODIMP
 nsThread::ProcessNextEvent(bool aMayWait, bool* aResult)
 {
   LOG(("THRD(%p) ProcessNextEvent [%u %u]\n", this, aMayWait,
        mNestedEventLoopDepth));
 
   if (NS_WARN_IF(PR_GetCurrentThread() != mThread)) {
     return NS_ERROR_NOT_SAME_THREAD;
--- a/xpcom/threads/nsThread.h
+++ b/xpcom/threads/nsThread.h
@@ -11,16 +11,17 @@
 #include "nsIIdlePeriod.h"
 #include "nsIThreadInternal.h"
 #include "nsISupportsPriority.h"
 #include "nsThreadUtils.h"
 #include "nsString.h"
 #include "nsTObserverArray.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/LinkedList.h"
+#include "mozilla/MemoryReporting.h"
 #include "mozilla/SynchronizedEventQueue.h"
 #include "mozilla/NotNull.h"
 #include "mozilla/TimeStamp.h"
 #include "nsAutoPtr.h"
 #include "mozilla/AlreadyAddRefed.h"
 #include "mozilla/UniquePtr.h"
 #include "mozilla/Array.h"
 #include "mozilla/dom/DocGroup.h"
@@ -138,16 +139,24 @@ public:
 
   bool ShuttingDown()
   {
     return mShutdownContext != nullptr;
   }
 
   virtual mozilla::PerformanceCounter* GetPerformanceCounter(nsIRunnable* aEvent);
 
+  size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+
+  // Returns the size of this object, its PRThread, and its shutdown contexts,
+  // but excluding its event queues.
+  size_t ShallowSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+
+  size_t SizeOfEventQueues(mozilla::MallocSizeOf aMallocSizeOf) const;
+
   static nsThreadEnumerator Enumerate();
 
 private:
   void DoMainThreadSpecificProcessing(bool aReallyWait);
 
 protected:
   friend class nsThreadShutdownEvent;