| Index: third_party/WebKit/Source/wtf/Partitions.h
|
| diff --git a/third_party/WebKit/Source/wtf/Partitions.h b/third_party/WebKit/Source/wtf/Partitions.h
|
| index 5651c2b870effe6fbb3128125e9ac48c450560d7..1127e1c66a4ca5a75e48201fb510d5e5ac59a98c 100644
|
| --- a/third_party/WebKit/Source/wtf/Partitions.h
|
| +++ b/third_party/WebKit/Source/wtf/Partitions.h
|
| @@ -39,116 +39,105 @@
|
| namespace WTF {
|
|
|
| class WTF_EXPORT Partitions {
|
| -public:
|
| - // Name of allocator used by tracing for marking sub-allocations while take
|
| - // memory snapshots.
|
| - static const char* const kAllocatedObjectPoolName;
|
| -
|
| - static void initialize(HistogramEnumerationFunction);
|
| - static void shutdown();
|
| - ALWAYS_INLINE static PartitionRootGeneric* bufferPartition()
|
| - {
|
| - ASSERT(s_initialized);
|
| - return m_bufferAllocator.root();
|
| - }
|
| -
|
| - ALWAYS_INLINE static PartitionRootGeneric* fastMallocPartition()
|
| - {
|
| - ASSERT(s_initialized);
|
| - return m_fastMallocAllocator.root();
|
| - }
|
| -
|
| - ALWAYS_INLINE static PartitionRoot* nodePartition()
|
| - {
|
| - ASSERT(s_initialized);
|
| - return m_nodeAllocator.root();
|
| - }
|
| - ALWAYS_INLINE static PartitionRoot* layoutPartition()
|
| - {
|
| - ASSERT(s_initialized);
|
| - return m_layoutAllocator.root();
|
| - }
|
| -
|
| - static size_t currentDOMMemoryUsage()
|
| - {
|
| - ASSERT(s_initialized);
|
| - return m_nodeAllocator.root()->totalSizeOfCommittedPages;
|
| - }
|
| -
|
| - static size_t totalSizeOfCommittedPages()
|
| - {
|
| - size_t totalSize = 0;
|
| - totalSize += m_fastMallocAllocator.root()->totalSizeOfCommittedPages;
|
| - totalSize += m_bufferAllocator.root()->totalSizeOfCommittedPages;
|
| - totalSize += m_nodeAllocator.root()->totalSizeOfCommittedPages;
|
| - totalSize += m_layoutAllocator.root()->totalSizeOfCommittedPages;
|
| - return totalSize;
|
| - }
|
| -
|
| - static void decommitFreeableMemory();
|
| -
|
| - static void reportMemoryUsageHistogram();
|
| -
|
| - static void dumpMemoryStats(bool isLightDump, PartitionStatsDumper*);
|
| -
|
| - ALWAYS_INLINE static void* bufferMalloc(size_t n, const char* typeName)
|
| - {
|
| - return partitionAllocGeneric(bufferPartition(), n, typeName);
|
| - }
|
| - ALWAYS_INLINE static void bufferFree(void* p)
|
| - {
|
| - partitionFreeGeneric(bufferPartition(), p);
|
| - }
|
| - ALWAYS_INLINE static size_t bufferActualSize(size_t n)
|
| - {
|
| - return partitionAllocActualSize(bufferPartition(), n);
|
| - }
|
| - static void* fastMalloc(size_t n, const char* typeName)
|
| - {
|
| - return partitionAllocGeneric(Partitions::fastMallocPartition(), n, typeName);
|
| - }
|
| - static void* fastZeroedMalloc(size_t n, const char* typeName)
|
| - {
|
| - void* result = fastMalloc(n, typeName);
|
| - memset(result, 0, n);
|
| - return result;
|
| - }
|
| - static void* fastRealloc(void* p, size_t n, const char* typeName)
|
| - {
|
| - return partitionReallocGeneric(Partitions::fastMallocPartition(), p, n, typeName);
|
| - }
|
| - static void fastFree(void* p)
|
| - {
|
| - partitionFreeGeneric(Partitions::fastMallocPartition(), p);
|
| - }
|
| -
|
| - static void handleOutOfMemory();
|
| -
|
| -private:
|
| - static SpinLock s_initializationLock;
|
| - static bool s_initialized;
|
| -
|
| - // We have the following four partitions.
|
| - // - Node partition: A partition to allocate Nodes. We prepare a
|
| - // dedicated partition for Nodes because Nodes are likely to be
|
| - // a source of use-after-frees. Another reason is for performance:
|
| - // Since Nodes are guaranteed to be used only by the main
|
| - // thread, we can bypass acquiring a lock. Also we can improve memory
|
| - // locality by putting Nodes together.
|
| - // - Layout object partition: A partition to allocate LayoutObjects.
|
| - // we prepare a dedicated partition for the same reason as Nodes.
|
| - // - Buffer partition: A partition to allocate objects that have a strong
|
| - // risk where the length and/or the contents are exploited from user
|
| - // scripts. Vectors, HashTables, ArrayBufferContents and Strings are
|
| - // allocated in the buffer partition.
|
| - // - Fast malloc partition: A partition to allocate all other objects.
|
| - static PartitionAllocatorGeneric m_fastMallocAllocator;
|
| - static PartitionAllocatorGeneric m_bufferAllocator;
|
| - static SizeSpecificPartitionAllocator<3328> m_nodeAllocator;
|
| - static SizeSpecificPartitionAllocator<1024> m_layoutAllocator;
|
| - static HistogramEnumerationFunction m_histogramEnumeration;
|
| + public:
|
| + // Name of allocator used by tracing for marking sub-allocations while take
|
| + // memory snapshots.
|
| + static const char* const kAllocatedObjectPoolName;
|
| +
|
| + static void initialize(HistogramEnumerationFunction);
|
| + static void shutdown();
|
| + ALWAYS_INLINE static PartitionRootGeneric* bufferPartition() {
|
| + ASSERT(s_initialized);
|
| + return m_bufferAllocator.root();
|
| + }
|
| +
|
| + ALWAYS_INLINE static PartitionRootGeneric* fastMallocPartition() {
|
| + ASSERT(s_initialized);
|
| + return m_fastMallocAllocator.root();
|
| + }
|
| +
|
| + ALWAYS_INLINE static PartitionRoot* nodePartition() {
|
| + ASSERT(s_initialized);
|
| + return m_nodeAllocator.root();
|
| + }
|
| + ALWAYS_INLINE static PartitionRoot* layoutPartition() {
|
| + ASSERT(s_initialized);
|
| + return m_layoutAllocator.root();
|
| + }
|
| +
|
| + static size_t currentDOMMemoryUsage() {
|
| + ASSERT(s_initialized);
|
| + return m_nodeAllocator.root()->totalSizeOfCommittedPages;
|
| + }
|
| +
|
| + static size_t totalSizeOfCommittedPages() {
|
| + size_t totalSize = 0;
|
| + totalSize += m_fastMallocAllocator.root()->totalSizeOfCommittedPages;
|
| + totalSize += m_bufferAllocator.root()->totalSizeOfCommittedPages;
|
| + totalSize += m_nodeAllocator.root()->totalSizeOfCommittedPages;
|
| + totalSize += m_layoutAllocator.root()->totalSizeOfCommittedPages;
|
| + return totalSize;
|
| + }
|
| +
|
| + static void decommitFreeableMemory();
|
| +
|
| + static void reportMemoryUsageHistogram();
|
| +
|
| + static void dumpMemoryStats(bool isLightDump, PartitionStatsDumper*);
|
| +
|
| + ALWAYS_INLINE static void* bufferMalloc(size_t n, const char* typeName) {
|
| + return partitionAllocGeneric(bufferPartition(), n, typeName);
|
| + }
|
| + ALWAYS_INLINE static void bufferFree(void* p) {
|
| + partitionFreeGeneric(bufferPartition(), p);
|
| + }
|
| + ALWAYS_INLINE static size_t bufferActualSize(size_t n) {
|
| + return partitionAllocActualSize(bufferPartition(), n);
|
| + }
|
| + static void* fastMalloc(size_t n, const char* typeName) {
|
| + return partitionAllocGeneric(Partitions::fastMallocPartition(), n,
|
| + typeName);
|
| + }
|
| + static void* fastZeroedMalloc(size_t n, const char* typeName) {
|
| + void* result = fastMalloc(n, typeName);
|
| + memset(result, 0, n);
|
| + return result;
|
| + }
|
| + static void* fastRealloc(void* p, size_t n, const char* typeName) {
|
| + return partitionReallocGeneric(Partitions::fastMallocPartition(), p, n,
|
| + typeName);
|
| + }
|
| + static void fastFree(void* p) {
|
| + partitionFreeGeneric(Partitions::fastMallocPartition(), p);
|
| + }
|
| +
|
| + static void handleOutOfMemory();
|
| +
|
| + private:
|
| + static SpinLock s_initializationLock;
|
| + static bool s_initialized;
|
| +
|
| + // We have the following four partitions.
|
| + // - Node partition: A partition to allocate Nodes. We prepare a
|
| + // dedicated partition for Nodes because Nodes are likely to be
|
| + // a source of use-after-frees. Another reason is for performance:
|
| + // Since Nodes are guaranteed to be used only by the main
|
| + // thread, we can bypass acquiring a lock. Also we can improve memory
|
| + // locality by putting Nodes together.
|
| + // - Layout object partition: A partition to allocate LayoutObjects.
|
| + // we prepare a dedicated partition for the same reason as Nodes.
|
| + // - Buffer partition: A partition to allocate objects that have a strong
|
| + // risk where the length and/or the contents are exploited from user
|
| + // scripts. Vectors, HashTables, ArrayBufferContents and Strings are
|
| + // allocated in the buffer partition.
|
| + // - Fast malloc partition: A partition to allocate all other objects.
|
| + static PartitionAllocatorGeneric m_fastMallocAllocator;
|
| + static PartitionAllocatorGeneric m_bufferAllocator;
|
| + static SizeSpecificPartitionAllocator<3328> m_nodeAllocator;
|
| + static SizeSpecificPartitionAllocator<1024> m_layoutAllocator;
|
| + static HistogramEnumerationFunction m_histogramEnumeration;
|
| };
|
|
|
| -} // namespace WTF
|
| +} // namespace WTF
|
|
|
| -#endif // Partitions_h
|
| +#endif // Partitions_h
|
|
|