| Return Type | Function name | Arguments |
|---|---|---|
| void | ReportMutexContention | (hzChain&,bool,) |
Declared in file: hzProcess.h
Defined in file : hzLock.cpp
Function Logic:
Function body:
void ReportMutexContention (hzChain& Z, bool bHtml)
{
_hzfunc(__func__) ;
static hzString S = "Untitled" ;
hzXDate now ;
hzLockRWD* pMtx ;
double fWait ;
double fInuse ;
double ratio ;
hzString vals[9];
uint64_t nWaitTotal ;
uint64_t nInuse ;
uint64_t nSpinsTotal ;
uint32_t nTriesTotal ;
uint32_t nLockOpsW ;
uint32_t nLockOpsR ;
uint32_t nUnlocks ;
char buf[24];
now.SysDateTime() ;
if (bHtml)
{
Z.Printf("<p><center>Mutex Contention Report at %s</center></p>\n", *now) ;
Z <<
"<div align="right">\n<table width="90%" align="center" border="1" cellspacing="0" cellpadding="0" style="text-decoration:none; font-family:verdana; font-size:11px; font-weight:normal; color:#000000;">\n\t<tr>\n\t\t<th>Mutex ID</th>\n\t\t<th>Wr Locks</th>\n\t\t<th>Rd Locks</th>\n\t\t<th>Unlocks</th>\n\t\t<th>Status</th>\n\t\t<th>Spins</th>\n\t\t<th>Tries</th>\n\t\t<th>Wait/Overhead</th>\n\t\t<th>Lock Duration</th>\n\t\t<th>Ratio</th>\n\t\t<th>Name</th>\n\t</tr>\n"
;
}
else
{
Z.Printf("Mutex Contention Report at %s\n", *now) ;
Z.Printf("Mutex ID Wr Locks Rd Locks Unlocks Status Spins Tries Wait/Overhead Lock Duration Ratio Name\n") ;
}
for (pMtx = s_allMtx ; pMtx ; pMtx = pMtx->next)
{
fWait = pMtx->m_WaitTotal ;
fInuse = pMtx->m_Inuse ;
if (fInuse)
ratio = fInuse/(fWait + fInuse) ;
else
ratio = 0.0;
sprintf(buf, "%f", ratio) ;
nLockOpsW = pMtx->m_LockOpsW ;
nLockOpsR = pMtx->m_LockOpsR ;
nUnlocks = pMtx->m_Unlocks ;
nSpinsTotal = pMtx->m_SpinsTotal ;
nTriesTotal = pMtx->m_TriesTotal ;
nWaitTotal = pMtx->m_WaitTotal ;
nInuse = pMtx->m_Inuse ;
vals[0]= FormalNumber(nLockOpsW, 12);
vals[1]= FormalNumber(nLockOpsR, 12);
vals[2]= FormalNumber(nUnlocks, 12);
vals[3]= FormalNumber(nSpinsTotal, 15);
vals[4]= FormalNumber(nTriesTotal, 15);
vals[5]= FormalNumber(nWaitTotal, 15);
vals[6]= FormalNumber(nInuse, 15);
if (bHtml)
{
Z << "\t<tr align="right">\n" ;
Z.Printf("<td>%03d</td>", pMtx->m_Id) ;
Z.Printf("<td>%s</td>", *vals[0]);
Z.Printf("<td>%s</td>", *vals[1]);
Z.Printf("<td>%s</td>", *vals[2]);
Z.Printf("<td>%11u</td>", pMtx->m_lockval) ;
Z.Printf("<td>%s</td>", *vals[3]);
Z.Printf("<td>%s</td>", *vals[4]);
Z.Printf("<td>%s</td>", *vals[5]);
Z.Printf("<td>%s</td>", *vals[6]);
Z.Printf("<td>%s</td>", buf) ;
Z.Printf("<td align="left">%s</td>" , *S) ;
Z << "\t</tr>\n" ;
}
else
{
Z.Printf("%03d %s %s %s %llu %s %s %s %s %s %s\n",
pMtx->m_Id, *vals[0],*vals[1],*vals[2],pMtx->m_lockval, *vals[3],*vals[4],*vals[5],*vals[6],buf, *S) ;
}
}
if (bHtml)
Z << "</table>\n" ;
}