Support function to ReportMemoryUsage(). Provides Report on global new/delete override by the application, if applicable Returns: None
| Return Type | Function name | Arguments |
|---|---|---|
| void | _report_heap | (hzChain&,hzMeminfo&,hzMeminfo&,uint32_t&,bool,) |
Declared and defined in file: hzMemory.cpp
Function Logic:
Function body:
void _report_heap (hzChain& Z)hzMeminfo& cms, hzMeminfo& pms, uint32_t& total, bool bHtml,
{
// Category: Diagnostics
//
// Support function to ReportMemoryUsage(). Provides Report on global new/delete override by the application, if applicable
//
// Argument: Z The hzChain instance to receive the report
// Returns: None
uint32_t usage ; // Memory used by given object class
uint32_t nA ; // Iterator for all sizes
Z <<
"<div class=\"stdpg\">\n<table width=\"506\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" style=\"text-decoration:none; font-family:verdana; font-size:11px; font-weight:normal; color:#000000;\">\n<tr>\n\t<th width=\"120\">HadronZoo Entity</th>\n\t<th width=\"90\">Assigned</th>\n\t<th width=\"90\">Free</th>\n\t<th width=\"90\">Total</th>\n\t<th width=\"110\">Total RAM</th>\n</tr>\n"
;
// Managed
Z << "<tr align=\"right\"><td align=\"left\">Heap 8-byte objects</td>" ;
usage = (s_Heap->nU008 + s_Heap->nF008) * 8;
Z.Printf("<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
_snh(s_Heap->nU008), _snh(s_Heap->nF008), _snh(s_Heap->nU008 + s_Heap->nF008), _snh(usage)) ;
Z << "<tr align=\"right\"><td align=\"left\">Heap 16-byte objects</td>" ;
usage = (s_Heap->nU016 + s_Heap->nF016) * 16;
Z.Printf("<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
_snh(s_Heap->nU016), _snh(s_Heap->nF016), _snh(s_Heap->nU016 + s_Heap->nF016), _snh(usage)) ;
Z << "<tr align=\"right\"><td align=\"left\">Heap 24-byte objects</td>" ;
usage = (s_Heap->nU024 + s_Heap->nF024) * 24;
Z.Printf("<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
_snh(s_Heap->nU024), _snh(s_Heap->nF024), _snh(s_Heap->nU024 + s_Heap->nF024), _snh(usage)) ;
Z << "<tr align=\"right\"><td align=\"left\">Heap 32-byte objects</td>" ;
usage = (s_Heap->nU032 + s_Heap->nF032) * 32;
Z.Printf("<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
_snh(s_Heap->nU032), _snh(s_Heap->nF032), _snh(s_Heap->nU032 + s_Heap->nF032), _snh(usage)) ;
Z << "<tr align=\"right\"><td align=\"left\">Heap 40-byte objects</td>" ;
usage = (s_Heap->nU040 + s_Heap->nF040) * 40;
Z.Printf("<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
_snh(s_Heap->nU040), _snh(s_Heap->nF040), _snh(s_Heap->nU040 + s_Heap->nF040), _snh(usage)) ;
// Print report for oversized objects for each multiple of 8 bytes for which there are outstanding allocatons
Z << "<tr><td>Oversize (48+ bytes)</td><td></td><td></td><td></td></tr>\n" ;
for (nA = 0; nA < 1001;nA++)
{
if (!s_Heap->m_allSizes[nA] && !s_Heap->m_allSizeF[nA])
continue ;
Z.Printf("<tr align=\"right\"><td align=\"left\">Obj size %d</td>", nA * 8);
usage = s_Heap->m_allSizes[nA] * nA * 8;
Z.Printf("<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
_snh(s_Heap->m_allSizeA[nA]), _snh(s_Heap->m_allSizeF[nA]), _snh(s_Heap->m_allSizes[nA]), _snh(usage)) ;
}
Z << "<tr align=\"right\"><td align=\"left\">All objects</td>" ;
Z.Printf("<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
_snh(s_Heap->nCallsMalloc),
_snh(s_Heap->nCallsFree),
_snh(s_Heap->nCallsMalloc - s_Heap->nCallsFree),
_snh(s_Heap->nOverSize)) ;
Z <<
"</table>\n</div>\n"
;
}