mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
Iterator over heap instances (#8548)
Provide "dumpHeapInstances" for iterating over type statistics of heaps. This can be used to present structured heap information as an alternative to "dumpNumberOfInstances".
This commit is contained in:
committed by
Andreas Rumpf
parent
bbc404d80d
commit
be4816f509
@@ -37,22 +37,28 @@ when defined(nimTypeNames):
|
||||
a[j] = v
|
||||
if h == 1: break
|
||||
|
||||
proc dumpNumberOfInstances* =
|
||||
# also add the allocated strings to the list of known types:
|
||||
iterator dumpHeapInstances*(): tuple[name: cstring; count: int; sizes: int] =
|
||||
## Iterate over summaries of types on heaps.
|
||||
## This data may be inaccurate if allocations
|
||||
## are made by the iterator body.
|
||||
if strDesc.nextType == nil:
|
||||
strDesc.nextType = nimTypeRoot
|
||||
strDesc.name = "string"
|
||||
nimTypeRoot = addr strDesc
|
||||
var it = nimTypeRoot
|
||||
while it != nil:
|
||||
if (it.instances > 0 or it.sizes != 0):
|
||||
yield (it.name, it.instances, it.sizes)
|
||||
it = it.nextType
|
||||
|
||||
proc dumpNumberOfInstances* =
|
||||
var a: InstancesInfo
|
||||
var n = 0
|
||||
var it = nimTypeRoot
|
||||
var totalAllocated = 0
|
||||
while it != nil:
|
||||
if (it.instances > 0 or it.sizes != 0) and n < a.len:
|
||||
a[n] = (it.name, it.instances, it.sizes)
|
||||
inc n
|
||||
for it in dumpHeapInstances():
|
||||
a[n] = it
|
||||
inc n
|
||||
inc totalAllocated, it.sizes
|
||||
it = it.nextType
|
||||
sortInstances(a, n)
|
||||
for i in 0 .. n-1:
|
||||
c_fprintf(stdout, "[Heap] %s: #%ld; bytes: %ld\n", a[i][0], a[i][1], a[i][2])
|
||||
|
||||
Reference in New Issue
Block a user