| Index: Source/platform/PartitionAllocMemoryDumpProvider.cpp
|
| diff --git a/Source/platform/PartitionAllocMemoryDumpProvider.cpp b/Source/platform/PartitionAllocMemoryDumpProvider.cpp
|
| index 3102f5913e52a96595a12099b0260c0b962c77a8..09b6be9110d8443a65b72116bc7253bafc9cabba 100644
|
| --- a/Source/platform/PartitionAllocMemoryDumpProvider.cpp
|
| +++ b/Source/platform/PartitionAllocMemoryDumpProvider.cpp
|
| @@ -8,7 +8,6 @@
|
| #include "public/platform/WebMemoryAllocatorDump.h"
|
| #include "public/platform/WebProcessMemoryDump.h"
|
| #include "wtf/Partitions.h"
|
| -#include "wtf/Threading.h"
|
|
|
| namespace blink {
|
|
|
| @@ -16,9 +15,12 @@ namespace {
|
|
|
| using namespace WTF;
|
|
|
| +const char kPartitionAllocDumpName[] = "partition_alloc";
|
| +const char kPartitionsDumpName[] = "partitions";
|
| +
|
| String getPartitionDumpName(const char* partitionName)
|
| {
|
| - return String::format("partition_alloc/thread_%lu/%s", static_cast<unsigned long>(WTF::currentThread()), partitionName);
|
| + return String::format("%s/%s/%s", kPartitionAllocDumpName, kPartitionsDumpName, partitionName);
|
| }
|
|
|
| // This class is used to invert the dependency of PartitionAlloc on the
|
| @@ -28,38 +30,34 @@ class PartitionStatsDumperImpl final : public PartitionStatsDumper {
|
| public:
|
| PartitionStatsDumperImpl(WebProcessMemoryDump* memoryDump, WebMemoryDumpLevelOfDetail levelOfDetail)
|
| : m_memoryDump(memoryDump)
|
| - , m_levelOfDetail(levelOfDetail)
|
| - , m_uid(0) { }
|
| + , m_uid(0)
|
| + , m_totalActiveBytes(0)
|
| + {
|
| + }
|
|
|
| // PartitionStatsDumper implementation.
|
| void partitionDumpTotals(const char* partitionName, const PartitionMemoryStats*) override;
|
| void partitionsDumpBucketStats(const char* partitionName, const PartitionBucketMemoryStats*) override;
|
|
|
| + size_t totalActiveBytes() const { return m_totalActiveBytes; }
|
| +
|
| private:
|
| WebProcessMemoryDump* m_memoryDump;
|
| - WebMemoryDumpLevelOfDetail m_levelOfDetail;
|
| - size_t m_uid;
|
| + unsigned long m_uid;
|
| + size_t m_totalActiveBytes;
|
| };
|
|
|
| void PartitionStatsDumperImpl::partitionDumpTotals(const char* partitionName, const PartitionMemoryStats* memoryStats)
|
| {
|
| + m_totalActiveBytes += memoryStats->totalActiveBytes;
|
| String dumpName = getPartitionDumpName(partitionName);
|
| WebMemoryAllocatorDump* allocatorDump = m_memoryDump->createMemoryAllocatorDump(dumpName);
|
| - allocatorDump->AddScalar("size", "bytes", memoryStats->totalMmappedBytes);
|
| - allocatorDump->AddScalar("committed_size", "bytes", memoryStats->totalCommittedBytes);
|
| - allocatorDump->AddScalar("active_size", "bytes", memoryStats->totalActiveBytes);
|
| - allocatorDump->AddScalar("resident_size", "bytes", memoryStats->totalResidentBytes);
|
| + allocatorDump->AddScalar("size", "bytes", memoryStats->totalResidentBytes);
|
| + allocatorDump->AddScalar("allocated_objects_size", "bytes", memoryStats->totalActiveBytes);
|
| + allocatorDump->AddScalar("virtual_size", "bytes", memoryStats->totalMmappedBytes);
|
| + allocatorDump->AddScalar("virtual_committed_size", "bytes", memoryStats->totalCommittedBytes);
|
| allocatorDump->AddScalar("decommittable_size", "bytes", memoryStats->totalDecommittableBytes);
|
| allocatorDump->AddScalar("discardable_size", "bytes", memoryStats->totalDiscardableBytes);
|
| -
|
| - // If detailed dumps, allocated_objects size will be aggregated from the
|
| - // children.
|
| - if (m_levelOfDetail == WebMemoryDumpLevelOfDetail::High)
|
| - return;
|
| -
|
| - dumpName = dumpName + "/allocated_objects";
|
| - WebMemoryAllocatorDump* objectsDump = m_memoryDump->createMemoryAllocatorDump(dumpName);
|
| - objectsDump->AddScalar("size", "bytes", memoryStats->totalActiveBytes);
|
| }
|
|
|
| void PartitionStatsDumperImpl::partitionsDumpBucketStats(const char* partitionName, const PartitionBucketMemoryStats* memoryStats)
|
| @@ -67,26 +65,21 @@ void PartitionStatsDumperImpl::partitionsDumpBucketStats(const char* partitionNa
|
| ASSERT(memoryStats->isValid);
|
| String dumpName = getPartitionDumpName(partitionName);
|
| if (memoryStats->isDirectMap)
|
| - dumpName.append(String::format("/directMap_%lu", static_cast<unsigned long>(++m_uid)));
|
| + dumpName.append(String::format("/directMap_%lu", ++m_uid));
|
| else
|
| dumpName.append(String::format("/bucket_%u", static_cast<unsigned>(memoryStats->bucketSlotSize)));
|
|
|
| WebMemoryAllocatorDump* allocatorDump = m_memoryDump->createMemoryAllocatorDump(dumpName);
|
| allocatorDump->AddScalar("size", "bytes", memoryStats->residentBytes);
|
| + allocatorDump->AddScalar("allocated_objects_size", "bytes", memoryStats->activeBytes);
|
| allocatorDump->AddScalar("slot_size", "bytes", memoryStats->bucketSlotSize);
|
| - allocatorDump->AddScalar("active_size", "bytes", memoryStats->activeBytes);
|
| - allocatorDump->AddScalar("resident_size", "bytes", memoryStats->residentBytes);
|
| allocatorDump->AddScalar("decommittable_size", "bytes", memoryStats->decommittableBytes);
|
| allocatorDump->AddScalar("discardable_size", "bytes", memoryStats->discardableBytes);
|
| - allocatorDump->AddScalar("num_active", "objects", memoryStats->numActivePages);
|
| - allocatorDump->AddScalar("num_full", "objects", memoryStats->numFullPages);
|
| - allocatorDump->AddScalar("num_empty", "objects", memoryStats->numEmptyPages);
|
| - allocatorDump->AddScalar("num_decommitted", "objects", memoryStats->numDecommittedPages);
|
| - allocatorDump->AddScalar("page_size", "bytes", memoryStats->allocatedPageSize);
|
| -
|
| - dumpName = dumpName + "/allocated_objects";
|
| - WebMemoryAllocatorDump* objectsDump = m_memoryDump->createMemoryAllocatorDump(dumpName);
|
| - objectsDump->AddScalar("size", "bytes", memoryStats->activeBytes);
|
| + allocatorDump->AddScalar("total_pages_size", "bytes", memoryStats->allocatedPageSize);
|
| + allocatorDump->AddScalar("active_pages", "objects", memoryStats->numActivePages);
|
| + allocatorDump->AddScalar("full_pages", "objects", memoryStats->numFullPages);
|
| + allocatorDump->AddScalar("empty_pages", "objects", memoryStats->numEmptyPages);
|
| + allocatorDump->AddScalar("decommitted_pages", "objects", memoryStats->numDecommittedPages);
|
| }
|
|
|
| } // namespace
|
| @@ -97,12 +90,21 @@ PartitionAllocMemoryDumpProvider* PartitionAllocMemoryDumpProvider::instance()
|
| return &instance;
|
| }
|
|
|
| -bool PartitionAllocMemoryDumpProvider::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, blink::WebProcessMemoryDump* memoryDump)
|
| +bool PartitionAllocMemoryDumpProvider::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, WebProcessMemoryDump* memoryDump)
|
| {
|
| PartitionStatsDumperImpl partitionStatsDumper(memoryDump, levelOfDetail);
|
|
|
| + WebMemoryAllocatorDump* partitionsDump = memoryDump->createMemoryAllocatorDump(
|
| + String::format("%s/%s", kPartitionAllocDumpName, kPartitionsDumpName));
|
| +
|
| // This method calls memoryStats.partitionsDumpBucketStats with memory statistics.
|
| WTF::Partitions::dumpMemoryStats(levelOfDetail == WebMemoryDumpLevelOfDetail::Low, &partitionStatsDumper);
|
| +
|
| + WebMemoryAllocatorDump* allocatedObjectsDump = memoryDump->createMemoryAllocatorDump(
|
| + String::format("%s/allocated_objects", kPartitionAllocDumpName));
|
| + allocatedObjectsDump->AddScalar("size", "bytes", partitionStatsDumper.totalActiveBytes());
|
| + memoryDump->AddOwnershipEdge(allocatedObjectsDump->guid(), partitionsDump->guid());
|
| +
|
| return true;
|
| }
|
|
|
|
|