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:
parent
bbc404d80d
commit
be4816f509
1 changed files with 14 additions and 8 deletions
|
|
@ -37,22 +37,28 @@ when defined(nimTypeNames):
|
||||||
a[j] = v
|
a[j] = v
|
||||||
if h == 1: break
|
if h == 1: break
|
||||||
|
|
||||||
proc dumpNumberOfInstances* =
|
iterator dumpHeapInstances*(): tuple[name: cstring; count: int; sizes: int] =
|
||||||
# also add the allocated strings to the list of known types:
|
## Iterate over summaries of types on heaps.
|
||||||
|
## This data may be inaccurate if allocations
|
||||||
|
## are made by the iterator body.
|
||||||
if strDesc.nextType == nil:
|
if strDesc.nextType == nil:
|
||||||
strDesc.nextType = nimTypeRoot
|
strDesc.nextType = nimTypeRoot
|
||||||
strDesc.name = "string"
|
strDesc.name = "string"
|
||||||
nimTypeRoot = addr strDesc
|
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 a: InstancesInfo
|
||||||
var n = 0
|
var n = 0
|
||||||
var it = nimTypeRoot
|
|
||||||
var totalAllocated = 0
|
var totalAllocated = 0
|
||||||
while it != nil:
|
for it in dumpHeapInstances():
|
||||||
if (it.instances > 0 or it.sizes != 0) and n < a.len:
|
a[n] = it
|
||||||
a[n] = (it.name, it.instances, it.sizes)
|
|
||||||
inc n
|
inc n
|
||||||
inc totalAllocated, it.sizes
|
inc totalAllocated, it.sizes
|
||||||
it = it.nextType
|
|
||||||
sortInstances(a, n)
|
sortInstances(a, n)
|
||||||
for i in 0 .. n-1:
|
for i in 0 .. n-1:
|
||||||
c_fprintf(stdout, "[Heap] %s: #%ld; bytes: %ld\n", a[i][0], a[i][1], a[i][2])
|
c_fprintf(stdout, "[Heap] %s: #%ld; bytes: %ld\n", a[i][0], a[i][1], a[i][2])
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue