Bug 1035570 (part 1) - DMD: Rename TraceRecord as Record. r=erahm.

DMD used to have "stack trace records" and "stack frame records". Bug 1013011
removed the latter, and now "stack trace record" and |TraceRecord| are a bit
unwieldy. This patch changes them to "heap block record" and |Record|.

--HG--
extra : rebase_source : 1d674db9866221f6a170d0eb05aa77fc9f4a1924
This commit is contained in:
Nicholas Nethercote 2014-06-05 18:57:02 -07:00
Родитель 438e827662
Коммит cb210b1e27
3 изменённых файлов: 120 добавлений и 122 удалений

Просмотреть файл

@ -1345,10 +1345,10 @@ namespace mozilla {
namespace dmd {
//---------------------------------------------------------------------------
// Stack trace records
// Heap block records
//---------------------------------------------------------------------------
class TraceRecordKey
class RecordKey
{
public:
const StackTrace* const mAllocStackTrace; // never null
@ -1357,7 +1357,7 @@ protected:
const StackTrace* const mReportStackTrace2; // nullptr if not 2x-reported
public:
TraceRecordKey(const Block& aB)
RecordKey(const Block& aB)
: mAllocStackTrace(aB.AllocStackTrace()),
mReportStackTrace1(aB.ReportStackTrace1()),
mReportStackTrace2(aB.ReportStackTrace2())
@ -1367,16 +1367,16 @@ public:
// Hash policy.
typedef TraceRecordKey Lookup;
typedef RecordKey Lookup;
static uint32_t hash(const TraceRecordKey& aKey)
static uint32_t hash(const RecordKey& aKey)
{
return mozilla::HashGeneric(aKey.mAllocStackTrace,
aKey.mReportStackTrace1,
aKey.mReportStackTrace2);
}
static bool match(const TraceRecordKey& aA, const TraceRecordKey& aB)
static bool match(const RecordKey& aA, const RecordKey& aB)
{
return aA.mAllocStackTrace == aB.mAllocStackTrace &&
aA.mReportStackTrace1 == aB.mReportStackTrace1 &&
@ -1437,18 +1437,17 @@ public:
}
};
// A collection of one or more heap blocks with a common TraceRecordKey.
class TraceRecord : public TraceRecordKey
// A collection of one or more heap blocks with a common RecordKey.
class Record : public RecordKey
{
// The TraceRecordKey base class serves as the key in TraceRecordTables.
// These two fields constitute the value, so it's ok for them to be
// |mutable|.
mutable uint32_t mNumBlocks; // number of blocks with this TraceRecordKey
// The RecordKey base class serves as the key in RecordTables. These two
// fields constitute the value, so it's ok for them to be |mutable|.
mutable uint32_t mNumBlocks; // number of blocks with this RecordKey
mutable RecordSize mRecordSize; // combined size of those blocks
public:
explicit TraceRecord(const TraceRecordKey& aKey)
: TraceRecordKey(aKey),
explicit Record(const RecordKey& aKey)
: RecordKey(aKey),
mNumBlocks(0),
mRecordSize()
{}
@ -1471,25 +1470,24 @@ public:
static int QsortCmp(const void* aA, const void* aB)
{
const TraceRecord* const a = *static_cast<const TraceRecord* const*>(aA);
const TraceRecord* const b = *static_cast<const TraceRecord* const*>(aB);
const Record* const a = *static_cast<const Record* const*>(aA);
const Record* const b = *static_cast<const Record* const*>(aB);
return RecordSize::Cmp(a->mRecordSize, b->mRecordSize);
}
};
typedef js::HashSet<TraceRecord, TraceRecord, InfallibleAllocPolicy>
TraceRecordTable;
typedef js::HashSet<Record, Record, InfallibleAllocPolicy> RecordTable;
void
TraceRecord::Print(const Writer& aWriter, LocationService* aLocService,
uint32_t aM, uint32_t aN, const char* aStr, const char* astr,
size_t aCategoryUsableSize, size_t aCumulativeUsableSize,
size_t aTotalUsableSize) const
Record::Print(const Writer& aWriter, LocationService* aLocService,
uint32_t aM, uint32_t aN, const char* aStr, const char* astr,
size_t aCategoryUsableSize, size_t aCumulativeUsableSize,
size_t aTotalUsableSize) const
{
bool showTilde = mRecordSize.IsSampled();
W("%s: %s block%s in stack trace record %s of %s\n",
W("%s: %s block%s in heap block record %s of %s\n",
aStr,
Show(mNumBlocks, gBuf1, kBufLen, showTilde), Plural(mNumBlocks),
Show(aM, gBuf2, kBufLen),
@ -1807,32 +1805,32 @@ ReportOnAlloc(const void* aPtr)
//---------------------------------------------------------------------------
static void
PrintSortedTraceRecords(const Writer& aWriter, LocationService* aLocService,
const char* aStr, const char* astr,
const TraceRecordTable& aRecordTable,
size_t aCategoryUsableSize, size_t aTotalUsableSize)
PrintSortedRecords(const Writer& aWriter, LocationService* aLocService,
const char* aStr, const char* astr,
const RecordTable& aRecordTable,
size_t aCategoryUsableSize, size_t aTotalUsableSize)
{
StatusMsg(" creating and sorting %s stack trace record array...\n", astr);
StatusMsg(" creating and sorting %s heap block record array...\n", astr);
// Convert the table into a sorted array.
js::Vector<const TraceRecord*, 0, InfallibleAllocPolicy> recordArray;
js::Vector<const Record*, 0, InfallibleAllocPolicy> recordArray;
recordArray.reserve(aRecordTable.count());
for (TraceRecordTable::Range r = aRecordTable.all();
for (RecordTable::Range r = aRecordTable.all();
!r.empty();
r.popFront()) {
recordArray.infallibleAppend(&r.front());
}
qsort(recordArray.begin(), recordArray.length(), sizeof(recordArray[0]),
TraceRecord::QsortCmp);
Record::QsortCmp);
WriteTitle("%s stack trace records\n", aStr);
WriteTitle("%s heap block records\n", aStr);
if (recordArray.length() == 0) {
W("(none)\n\n");
return;
}
StatusMsg(" printing %s stack trace record array...\n", astr);
StatusMsg(" printing %s heap block record array...\n", astr);
size_t cumulativeUsableSize = 0;
// Limit the number of records printed, because fix-linux-stack.pl is too
@ -1841,13 +1839,13 @@ PrintSortedTraceRecords(const Writer& aWriter, LocationService* aLocService,
uint32_t numRecords = recordArray.length();
uint32_t maxRecords = gOptions->MaxRecords();
for (uint32_t i = 0; i < numRecords; i++) {
const TraceRecord* r = recordArray[i];
const Record* r = recordArray[i];
cumulativeUsableSize += r->GetRecordSize().Usable();
if (i < maxRecords) {
r->Print(aWriter, aLocService, i+1, numRecords, aStr, astr,
aCategoryUsableSize, cumulativeUsableSize, aTotalUsableSize);
} else if (i == maxRecords) {
W("%s: stopping after %s stack trace records\n\n", aStr,
W("%s: stopping after %s heap block records\n\n", aStr,
Show(maxRecords, gBuf1, kBufLen));
}
}
@ -1956,20 +1954,20 @@ Dump(Writer aWriter)
static int dumpCount = 1;
StatusMsg("Dump %d {\n", dumpCount++);
StatusMsg(" gathering stack trace records...\n");
StatusMsg(" gathering heap block records...\n");
TraceRecordTable unreportedTraceRecordTable;
(void)unreportedTraceRecordTable.init(1024);
RecordTable unreportedRecordTable;
(void)unreportedRecordTable.init(1024);
size_t unreportedUsableSize = 0;
size_t unreportedNumBlocks = 0;
TraceRecordTable onceReportedTraceRecordTable;
(void)onceReportedTraceRecordTable.init(1024);
RecordTable onceReportedRecordTable;
(void)onceReportedRecordTable.init(1024);
size_t onceReportedUsableSize = 0;
size_t onceReportedNumBlocks = 0;
TraceRecordTable twiceReportedTraceRecordTable;
(void)twiceReportedTraceRecordTable.init(0);
RecordTable twiceReportedRecordTable;
(void)twiceReportedRecordTable.init(0);
size_t twiceReportedUsableSize = 0;
size_t twiceReportedNumBlocks = 0;
@ -1978,26 +1976,26 @@ Dump(Writer aWriter)
for (BlockTable::Range r = gBlockTable->all(); !r.empty(); r.popFront()) {
const Block& b = r.front();
TraceRecordTable* table;
RecordTable* table;
uint32_t numReports = b.NumReports();
if (numReports == 0) {
unreportedUsableSize += b.UsableSize();
unreportedNumBlocks++;
table = &unreportedTraceRecordTable;
table = &unreportedRecordTable;
} else if (numReports == 1) {
onceReportedUsableSize += b.UsableSize();
onceReportedNumBlocks++;
table = &onceReportedTraceRecordTable;
table = &onceReportedRecordTable;
} else {
MOZ_ASSERT(numReports == 2);
twiceReportedUsableSize += b.UsableSize();
twiceReportedNumBlocks++;
table = &twiceReportedTraceRecordTable;
table = &twiceReportedRecordTable;
}
TraceRecordKey key(b);
TraceRecordTable::AddPtr p = table->lookupForAdd(key);
RecordKey key(b);
RecordTable::AddPtr p = table->lookupForAdd(key);
if (!p) {
TraceRecord tr(b);
Record tr(b);
(void)table->add(p, tr);
}
p->Add(b);
@ -2017,20 +2015,20 @@ Dump(Writer aWriter)
// Allocate this on the heap instead of the stack because it's fairly large.
LocationService* locService = InfallibleAllocPolicy::new_<LocationService>();
PrintSortedTraceRecords(aWriter, locService,
"Twice-reported", "twice-reported",
twiceReportedTraceRecordTable,
twiceReportedUsableSize, totalUsableSize);
PrintSortedRecords(aWriter, locService,
"Twice-reported", "twice-reported",
twiceReportedRecordTable,
twiceReportedUsableSize, totalUsableSize);
PrintSortedTraceRecords(aWriter, locService,
"Unreported", "unreported",
unreportedTraceRecordTable,
unreportedUsableSize, totalUsableSize);
PrintSortedRecords(aWriter, locService,
"Unreported", "unreported",
unreportedRecordTable,
unreportedUsableSize, totalUsableSize);
PrintSortedTraceRecords(aWriter, locService,
"Once-reported", "once-reported",
onceReportedTraceRecordTable,
onceReportedUsableSize, totalUsableSize);
PrintSortedRecords(aWriter, locService,
"Once-reported", "once-reported",
onceReportedRecordTable,
onceReportedUsableSize, totalUsableSize);
bool showTilde = anyBlocksSampled;
WriteTitle("Summary\n");
@ -2089,25 +2087,25 @@ Dump(Writer aWriter)
W("\nData structures that are destroyed after Dump() ends:\n");
size_t unreportedSize =
unreportedTraceRecordTable.sizeOfIncludingThis(MallocSizeOf);
unreportedRecordTable.sizeOfIncludingThis(MallocSizeOf);
W(" Unreported table: %10s bytes (%s entries, %s used)\n",
Show(unreportedSize, gBuf1, kBufLen),
Show(unreportedTraceRecordTable.capacity(), gBuf2, kBufLen),
Show(unreportedTraceRecordTable.count(), gBuf3, kBufLen));
Show(unreportedSize, gBuf1, kBufLen),
Show(unreportedRecordTable.capacity(), gBuf2, kBufLen),
Show(unreportedRecordTable.count(), gBuf3, kBufLen));
size_t onceReportedSize =
onceReportedTraceRecordTable.sizeOfIncludingThis(MallocSizeOf);
onceReportedRecordTable.sizeOfIncludingThis(MallocSizeOf);
W(" Once-reported table: %10s bytes (%s entries, %s used)\n",
Show(onceReportedSize, gBuf1, kBufLen),
Show(onceReportedTraceRecordTable.capacity(), gBuf2, kBufLen),
Show(onceReportedTraceRecordTable.count(), gBuf3, kBufLen));
Show(onceReportedSize, gBuf1, kBufLen),
Show(onceReportedRecordTable.capacity(), gBuf2, kBufLen),
Show(onceReportedRecordTable.count(), gBuf3, kBufLen));
size_t twiceReportedSize =
twiceReportedTraceRecordTable.sizeOfIncludingThis(MallocSizeOf);
twiceReportedRecordTable.sizeOfIncludingThis(MallocSizeOf);
W(" Twice-reported table: %10s bytes (%s entries, %s used)\n",
Show(twiceReportedSize, gBuf1, kBufLen),
Show(twiceReportedTraceRecordTable.capacity(), gBuf2, kBufLen),
Show(twiceReportedTraceRecordTable.count(), gBuf3, kBufLen));
Show(twiceReportedSize, gBuf1, kBufLen),
Show(twiceReportedRecordTable.capacity(), gBuf2, kBufLen),
Show(twiceReportedRecordTable.count(), gBuf3, kBufLen));
W(" Location service: %10s bytes\n",
Show(locService->SizeOfIncludingThis(), gBuf1, kBufLen));
@ -2356,7 +2354,7 @@ RunTestMode(FILE* fp)
}
MOZ_ASSERT(gSmallBlockActualSizeCounter == 0);
// This allocates 16, 32, ..., 128 bytes, which results in a stack trace
// This allocates 16, 32, ..., 128 bytes, which results in a heap block
// record that contains a mix of sample and non-sampled blocks, and so should
// be printed with '~' signs.
for (int i = 1; i <= 8; i++) {

Просмотреть файл

@ -62,7 +62,7 @@ def main():
# Filter output
# In stack trace records we filter out most stack frames. The only thing
# In heap block records we filter out most stack frames. The only thing
# we leave behind is a "DMD.cpp" entry if we see one or more frames that
# have DMD.cpp in them. There is simply too much variation to do anything
# better than that.
@ -76,7 +76,7 @@ def main():
for line in fin:
if re.match(r" (Allocated at|Reported( again)? at)", line):
# It's a stack trace record.
# It's a heap block record.
print(line, end='', file=fout)
# Filter the stack trace -- print a single line if we see one

Просмотреть файл

@ -6,19 +6,19 @@ $DMD = '--mode=test'
Sample-below size = 1
------------------------------------------------------------------
Twice-reported stack trace records
Twice-reported heap block records
------------------------------------------------------------------
(none)
------------------------------------------------------------------
Unreported stack trace records
Unreported heap block records
------------------------------------------------------------------
(none)
------------------------------------------------------------------
Once-reported stack trace records
Once-reported heap block records
------------------------------------------------------------------
(none)
@ -40,10 +40,10 @@ $DMD = '--mode=test'
Sample-below size = 1
------------------------------------------------------------------
Twice-reported stack trace records
Twice-reported heap block records
------------------------------------------------------------------
Twice-reported: 1 block in stack trace record 1 of 4
Twice-reported: 1 block in heap block record 1 of 4
80 bytes (79 requested / 1 slop)
0.66% of the heap (0.66% cumulative); 29.41% of twice-reported (29.41% cumulative)
Allocated at
@ -55,7 +55,7 @@ Twice-reported: 1 block in stack trace record 1 of 4
Reported again at
... DMD.cpp
Twice-reported: 1 block in stack trace record 2 of 4
Twice-reported: 1 block in heap block record 2 of 4
80 bytes (78 requested / 2 slop)
0.66% of the heap (1.32% cumulative); 29.41% of twice-reported (58.82% cumulative)
Allocated at
@ -67,7 +67,7 @@ Twice-reported: 1 block in stack trace record 2 of 4
Reported again at
... DMD.cpp
Twice-reported: 1 block in stack trace record 3 of 4
Twice-reported: 1 block in heap block record 3 of 4
80 bytes (77 requested / 3 slop)
0.66% of the heap (1.99% cumulative); 29.41% of twice-reported (88.24% cumulative)
Allocated at
@ -79,7 +79,7 @@ Twice-reported: 1 block in stack trace record 3 of 4
Reported again at
... DMD.cpp
Twice-reported: 1 block in stack trace record 4 of 4
Twice-reported: 1 block in heap block record 4 of 4
32 bytes (30 requested / 2 slop)
0.26% of the heap (2.25% cumulative); 11.76% of twice-reported (100.00% cumulative)
Allocated at
@ -92,32 +92,32 @@ Twice-reported: 1 block in stack trace record 4 of 4
... DMD.cpp
------------------------------------------------------------------
Unreported stack trace records
Unreported heap block records
------------------------------------------------------------------
Unreported: 9 blocks in stack trace record 1 of 3
Unreported: 9 blocks in heap block record 1 of 3
1,008 bytes (900 requested / 108 slop)
8.34% of the heap (8.34% cumulative); 81.82% of unreported (81.82% cumulative)
Allocated at
... DMD.cpp
Unreported: 2 blocks in stack trace record 2 of 3
Unreported: 2 blocks in heap block record 2 of 3
112 bytes (112 requested / 0 slop)
0.93% of the heap (9.27% cumulative); 9.09% of unreported (90.91% cumulative)
Allocated at
... DMD.cpp
Unreported: 2 blocks in stack trace record 3 of 3
Unreported: 2 blocks in heap block record 3 of 3
112 bytes (112 requested / 0 slop)
0.93% of the heap (10.19% cumulative); 9.09% of unreported (100.00% cumulative)
Allocated at
... DMD.cpp
------------------------------------------------------------------
Once-reported stack trace records
Once-reported heap block records
------------------------------------------------------------------
Once-reported: 1 block in stack trace record 1 of 11
Once-reported: 1 block in heap block record 1 of 11
8,192 bytes (4,097 requested / 4,095 slop)
67.77% of the heap (67.77% cumulative); 77.40% of once-reported (77.40% cumulative)
Allocated at
@ -126,7 +126,7 @@ Once-reported: 1 block in stack trace record 1 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 2 of 11
Once-reported: 1 block in heap block record 2 of 11
1,024 bytes (1,023 requested / 1 slop)
8.47% of the heap (76.24% cumulative); 9.67% of once-reported (87.07% cumulative)
Allocated at
@ -135,7 +135,7 @@ Once-reported: 1 block in stack trace record 2 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 3 of 11
Once-reported: 1 block in heap block record 3 of 11
512 bytes (512 requested / 0 slop)
4.24% of the heap (80.48% cumulative); 4.84% of once-reported (91.91% cumulative)
Allocated at
@ -144,7 +144,7 @@ Once-reported: 1 block in stack trace record 3 of 11
Reported at
... DMD.cpp
Once-reported: 2 blocks in stack trace record 4 of 11
Once-reported: 2 blocks in heap block record 4 of 11
240 bytes (240 requested / 0 slop)
1.99% of the heap (82.46% cumulative); 2.27% of once-reported (94.18% cumulative)
Allocated at
@ -153,7 +153,7 @@ Once-reported: 2 blocks in stack trace record 4 of 11
Reported at
... DMD.cpp
Once-reported: 2 blocks in stack trace record 5 of 11
Once-reported: 2 blocks in heap block record 5 of 11
240 bytes (240 requested / 0 slop)
1.99% of the heap (84.45% cumulative); 2.27% of once-reported (96.45% cumulative)
Allocated at
@ -162,7 +162,7 @@ Once-reported: 2 blocks in stack trace record 5 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 6 of 11
Once-reported: 1 block in heap block record 6 of 11
96 bytes (96 requested / 0 slop)
0.79% of the heap (85.24% cumulative); 0.91% of once-reported (97.35% cumulative)
Allocated at
@ -171,7 +171,7 @@ Once-reported: 1 block in stack trace record 6 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 7 of 11
Once-reported: 1 block in heap block record 7 of 11
96 bytes (96 requested / 0 slop)
0.79% of the heap (86.04% cumulative); 0.91% of once-reported (98.26% cumulative)
Allocated at
@ -180,7 +180,7 @@ Once-reported: 1 block in stack trace record 7 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 8 of 11
Once-reported: 1 block in heap block record 8 of 11
80 bytes (80 requested / 0 slop)
0.66% of the heap (86.70% cumulative); 0.76% of once-reported (99.02% cumulative)
Allocated at
@ -189,7 +189,7 @@ Once-reported: 1 block in stack trace record 8 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 9 of 11
Once-reported: 1 block in heap block record 9 of 11
80 bytes (80 requested / 0 slop)
0.66% of the heap (87.36% cumulative); 0.76% of once-reported (99.77% cumulative)
Allocated at
@ -198,7 +198,7 @@ Once-reported: 1 block in stack trace record 9 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 10 of 11
Once-reported: 1 block in heap block record 10 of 11
16 bytes (10 requested / 6 slop)
0.13% of the heap (87.49% cumulative); 0.15% of once-reported (99.92% cumulative)
Allocated at
@ -207,7 +207,7 @@ Once-reported: 1 block in stack trace record 10 of 11
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 11 of 11
Once-reported: 1 block in heap block record 11 of 11
8 bytes (0 requested / 8 slop)
0.07% of the heap (87.56% cumulative); 0.08% of once-reported (100.00% cumulative)
Allocated at
@ -233,10 +233,10 @@ $DMD = '--mode=test'
Sample-below size = 1
------------------------------------------------------------------
Twice-reported stack trace records
Twice-reported heap block records
------------------------------------------------------------------
Twice-reported: 1 block in stack trace record 1 of 2
Twice-reported: 1 block in heap block record 1 of 2
80 bytes (77 requested / 3 slop)
2.82% of the heap (2.82% cumulative); 90.91% of twice-reported (90.91% cumulative)
Allocated at
@ -248,7 +248,7 @@ Twice-reported: 1 block in stack trace record 1 of 2
Reported again at
... DMD.cpp
Twice-reported: 1 block in stack trace record 2 of 2
Twice-reported: 1 block in heap block record 2 of 2
8 bytes (0 requested / 8 slop)
0.28% of the heap (3.10% cumulative); 9.09% of twice-reported (100.00% cumulative)
Allocated at
@ -261,32 +261,32 @@ Twice-reported: 1 block in stack trace record 2 of 2
... DMD.cpp
------------------------------------------------------------------
Unreported stack trace records
Unreported heap block records
------------------------------------------------------------------
Unreported: 9 blocks in stack trace record 1 of 3
Unreported: 9 blocks in heap block record 1 of 3
1,008 bytes (900 requested / 108 slop)
35.49% of the heap (35.49% cumulative); 48.84% of unreported (48.84% cumulative)
Allocated at
... DMD.cpp
Unreported: 6 blocks in stack trace record 2 of 3
Unreported: 6 blocks in heap block record 2 of 3
528 bytes (528 requested / 0 slop)
18.59% of the heap (54.08% cumulative); 25.58% of unreported (74.42% cumulative)
Allocated at
... DMD.cpp
Unreported: 6 blocks in stack trace record 3 of 3
Unreported: 6 blocks in heap block record 3 of 3
528 bytes (528 requested / 0 slop)
18.59% of the heap (72.68% cumulative); 25.58% of unreported (100.00% cumulative)
Allocated at
... DMD.cpp
------------------------------------------------------------------
Once-reported stack trace records
Once-reported heap block records
------------------------------------------------------------------
Once-reported: 1 block in stack trace record 1 of 4
Once-reported: 1 block in heap block record 1 of 4
512 bytes (512 requested / 0 slop)
18.03% of the heap (18.03% cumulative); 74.42% of once-reported (74.42% cumulative)
Allocated at
@ -295,7 +295,7 @@ Once-reported: 1 block in stack trace record 1 of 4
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 2 of 4
Once-reported: 1 block in heap block record 2 of 4
80 bytes (79 requested / 1 slop)
2.82% of the heap (20.85% cumulative); 11.63% of once-reported (86.05% cumulative)
Allocated at
@ -304,7 +304,7 @@ Once-reported: 1 block in stack trace record 2 of 4
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 3 of 4
Once-reported: 1 block in heap block record 3 of 4
80 bytes (78 requested / 2 slop)
2.82% of the heap (23.66% cumulative); 11.63% of once-reported (97.67% cumulative)
Allocated at
@ -313,7 +313,7 @@ Once-reported: 1 block in stack trace record 3 of 4
Reported at
... DMD.cpp
Once-reported: 1 block in stack trace record 4 of 4
Once-reported: 1 block in heap block record 4 of 4
16 bytes (10 requested / 6 slop)
0.56% of the heap (24.23% cumulative); 2.33% of once-reported (100.00% cumulative)
Allocated at
@ -339,59 +339,59 @@ $DMD = '--mode=test'
Sample-below size = 128
------------------------------------------------------------------
Twice-reported stack trace records
Twice-reported heap block records
------------------------------------------------------------------
(none)
------------------------------------------------------------------
Unreported stack trace records
Unreported heap block records
------------------------------------------------------------------
Unreported: ~4 blocks in stack trace record 1 of 7
Unreported: ~4 blocks in heap block record 1 of 7
~512 bytes (~512 requested / ~0 slop)
35.96% of the heap (35.96% cumulative); 35.96% of unreported (35.96% cumulative)
Allocated at
... DMD.cpp
Unreported: 1 block in stack trace record 2 of 7
Unreported: 1 block in heap block record 2 of 7
256 bytes (256 requested / 0 slop)
17.98% of the heap (53.93% cumulative); 17.98% of unreported (53.93% cumulative)
Allocated at
... DMD.cpp
Unreported: 1 block in stack trace record 3 of 7
Unreported: 1 block in heap block record 3 of 7
144 bytes (144 requested / 0 slop)
10.11% of the heap (64.04% cumulative); 10.11% of unreported (64.04% cumulative)
Allocated at
... DMD.cpp
Unreported: 1 block in stack trace record 4 of 7
Unreported: 1 block in heap block record 4 of 7
128 bytes (128 requested / 0 slop)
8.99% of the heap (73.03% cumulative); 8.99% of unreported (73.03% cumulative)
Allocated at
... DMD.cpp
Unreported: ~1 block in stack trace record 5 of 7
Unreported: ~1 block in heap block record 5 of 7
~128 bytes (~128 requested / ~0 slop)
8.99% of the heap (82.02% cumulative); 8.99% of unreported (82.02% cumulative)
Allocated at
... DMD.cpp
Unreported: ~1 block in stack trace record 6 of 7
Unreported: ~1 block in heap block record 6 of 7
~128 bytes (~128 requested / ~0 slop)
8.99% of the heap (91.01% cumulative); 8.99% of unreported (91.01% cumulative)
Allocated at
... DMD.cpp
Unreported: ~1 block in stack trace record 7 of 7
Unreported: ~1 block in heap block record 7 of 7
~128 bytes (~128 requested / ~0 slop)
8.99% of the heap (100.00% cumulative); 8.99% of unreported (100.00% cumulative)
Allocated at
... DMD.cpp
------------------------------------------------------------------
Once-reported stack trace records
Once-reported heap block records
------------------------------------------------------------------
(none)