Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2755)

Unified Diff: Source/wtf/Partitions.cpp

Issue 1053793004: Add a UseCounter that measures the amount of memory used in PartitionAlloc (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/wtf/Partitions.cpp
diff --git a/Source/wtf/Partitions.cpp b/Source/wtf/Partitions.cpp
index 800632ea4a009c43f26dd95ac4e1a18aab0a100b..c82b375b026b38f3b85c370ee67e3883bcfed560 100644
--- a/Source/wtf/Partitions.cpp
+++ b/Source/wtf/Partitions.cpp
@@ -33,6 +33,7 @@
#include "wtf/DefaultAllocator.h"
#include "wtf/FastMalloc.h"
+#include "wtf/MainThread.h"
namespace WTF {
@@ -42,17 +43,19 @@ PartitionAllocatorGeneric Partitions::m_fastMallocAllocator;
PartitionAllocatorGeneric Partitions::m_bufferAllocator;
SizeSpecificPartitionAllocator<3328> Partitions::m_objectModelAllocator;
SizeSpecificPartitionAllocator<1024> Partitions::m_renderingAllocator;
+HistogramEnumerationFunction Partitions::m_histogramEnumeration = nullptr;
-void Partitions::initialize()
+void Partitions::initialize(HistogramEnumerationFunction histogramEnumeration)
{
static int lock = 0;
// Guard against two threads hitting here in parallel.
spinLockLock(&lock);
if (!s_initialized) {
- m_fastMallocAllocator.init();
- m_bufferAllocator.init();
- m_objectModelAllocator.init();
- m_renderingAllocator.init();
+ m_fastMallocAllocator.init(Partitions::notifyCommittedMemoryChanged);
+ m_bufferAllocator.init(Partitions::notifyCommittedMemoryChanged);
+ m_objectModelAllocator.init(Partitions::notifyCommittedMemoryChanged);
+ m_renderingAllocator.init(Partitions::notifyCommittedMemoryChanged);
+ m_histogramEnumeration = histogramEnumeration;
s_initialized = true;
}
spinLockUnlock(&lock);
@@ -69,4 +72,26 @@ void Partitions::shutdown()
(void) m_fastMallocAllocator.shutdown();
}
+void Partitions::notifyCommittedMemoryChanged()
+{
+ static size_t supportedMaxSizeInMB = 4 * 1024;
+ static size_t observedMaxSizeInMB = 0;
+
+ if (!m_histogramEnumeration)
+ return;
+ // We only report the memory in the main thread.
+ if (!isMainThread())
+ return;
+ // +1 is for rounding up the sizeInMB.
+ size_t sizeInMB = Partitions::totalSizeOfCommittedPages() / 1024 / 1024 + 1;
+ if (sizeInMB >= supportedMaxSizeInMB)
+ sizeInMB = supportedMaxSizeInMB - 1;
+ if (sizeInMB > observedMaxSizeInMB) {
+ // Send a UseCounter only when we see the highest memory usage
+ // we've ever seen.
+ m_histogramEnumeration("PartitionAlloc.CommittedSize", sizeInMB, supportedMaxSizeInMB);
Chris Evans 2015/04/06 04:39:53 Hmm! Can we be sure that this histogram enumeratio
haraken 2015/04/06 06:14:14 It can potentially be re-entered, but is it really
+ observedMaxSizeInMB = sizeInMB;
+ }
+}
+
} // namespace WTF
« Source/wtf/PartitionAlloc.cpp ('K') | « Source/wtf/Partitions.h ('k') | Source/wtf/WTF.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698