Lines Matching defs:pNode

157         PDBGGUISTATSNODE    pNode;
283 * @param pNode The node.
285 static void resetNode(PDBGGUISTATSNODE pNode);
290 static int initNode(PDBGGUISTATSNODE pNode, STAMTYPE enmType, void *pvSample, STAMUNIT enmUnit, const char *pszDesc);
295 static void updateNode(PDBGGUISTATSNODE pNode, STAMTYPE enmType, void *pvSample, STAMUNIT enmUnit, const char *pszDesc);
335 * @param pNode The current node.
337 void updateCallbackAdvance(PDBGGUISTATSNODE pNode);
350 * @param pNode The node.
354 static ssize_t getNodePath(PCDBGGUISTATSNODE pNode, char *psz, ssize_t cch);
361 * @param pNode The node.
365 static char *getNodePath2(PCDBGGUISTATSNODE pNode, char *psz, ssize_t cch);
381 * @param pNode The current node.
383 static PDBGGUISTATSNODE nextNode(PDBGGUISTATSNODE pNode);
390 * @param pNode The current node.
392 static PDBGGUISTATSNODE nextDataNode(PDBGGUISTATSNODE pNode);
399 * @param pNode The current node.
401 static PDBGGUISTATSNODE prevNode(PDBGGUISTATSNODE pNode);
408 * @param pNode The current node.
410 static PDBGGUISTATSNODE prevDataNode(PDBGGUISTATSNODE pNode);
415 * @returns pNode.
416 * @param pNode The node.
418 static PDBGGUISTATSNODE removeNode(PDBGGUISTATSNODE pNode);
423 * @param pNode The node.
425 static void removeAndDestroyNode(PDBGGUISTATSNODE pNode);
429 void removeAndDestroy(PDBGGUISTATSNODE pNode);
499 static QString strUnit(PCDBGGUISTATSNODE pNode);
501 static QString strValueTimes(PCDBGGUISTATSNODE pNode);
503 static QString strMinValue(PCDBGGUISTATSNODE pNode);
505 static QString strAvgValue(PCDBGGUISTATSNODE pNode);
507 static QString strMaxValue(PCDBGGUISTATSNODE pNode);
509 static QString strTotalValue(PCDBGGUISTATSNODE pNode);
511 static QString strDeltaValue(PCDBGGUISTATSNODE pNode);
852 PDBGGUISTATSNODE pNode = (PDBGGUISTATSNODE)RTMemAllocZ(sizeof(DBGGUISTATSNODE));
853 if (!pNode)
855 pNode->iSelf = UINT32_MAX;
856 pNode->enmType = STAMTYPE_INVALID;
857 pNode->enmUnit = STAMUNIT_INVALID;
858 pNode->pszName = (char *)RTMemDupEx(pszName, cchName, 1);
859 pNode->cchName = cchName;
860 pNode->enmState = kDbgGuiStatsNodeState_kVisible;
870 destroyNode(pNode);
879 pNode->pParent = pParent;
896 pNode->iSelf = iPosition;
897 pParent->papChildren[iPosition] = pNode;
900 return pNode;
907 PDBGGUISTATSNODE pNode;
909 pNode = createAndInsertNode(pParent, pszName, cchName, iPosition);
913 pNode = createAndInsertNode(pParent, pszName, cchName, iPosition);
916 return pNode;
920 VBoxDbgStatsModel::removeNode(PDBGGUISTATSNODE pNode)
922 PDBGGUISTATSNODE pParent = pNode->pParent;
925 uint32_t iPosition = pNode->iSelf;
926 Assert(pParent->papChildren[iPosition] == pNode);
938 return pNode;
943 VBoxDbgStatsModel::removeAndDestroyNode(PDBGGUISTATSNODE pNode)
945 removeNode(pNode);
946 destroyNode(pNode);
951 VBoxDbgStatsModel::removeAndDestroy(PDBGGUISTATSNODE pNode)
954 removeAndDestroyNode(pNode);
965 Stack.a[0].pNode = pNode;
971 PDBGGUISTATSNODE pNode = Stack.a[Stack.iTop].pNode;
973 if (iChild < pNode->cChildren)
978 Stack.a[Stack.iTop].pNode = pNode->papChildren[iChild];
985 uint32_t i = pNode->cChildren;
988 beginRemoveRows(createIndex(pNode->iSelf, 0, pNode), 0, i - 1);
990 destroyNode(pNode->papChildren[i]);
991 pNode->cChildren = 0;
996 Assert(!pNode->cChildren);
999 PDBGGUISTATSNODE pParent = pNode->pParent;
1000 beginRemoveRows(createIndex(pParent->iSelf, 0, pParent), pNode->iSelf, pNode->iSelf);
1001 removeAndDestroyNode(pNode);
1006 PDBGGUISTATSNODE pParent = pNode->pParent;
1007 beginRemoveRows(createIndex(pParent->iSelf, 0, pParent), pNode->iSelf, pNode->iSelf);
1008 removeAndDestroyNode(pNode);
1013 removeAndDestroyNode(pNode);
1020 VBoxDbgStatsModel::resetNode(PDBGGUISTATSNODE pNode)
1023 if (pNode->enmType == STAMTYPE_CALLBACK)
1025 delete pNode->Data.pStr;
1026 pNode->Data.pStr = NULL;
1028 pNode->enmType = STAMTYPE_INVALID;
1031 if (pNode->pDescStr)
1033 delete pNode->pDescStr;
1034 pNode->pDescStr = NULL;
1040 VBoxDbgStatsModel::initNode(PDBGGUISTATSNODE pNode, STAMTYPE enmType, void *pvSample, STAMUNIT enmUnit, const char *pszDesc)
1045 pNode->enmUnit = enmUnit;
1046 Assert(pNode->enmType == STAMTYPE_INVALID);
1047 pNode->enmType = enmType;
1049 pNode->pDescStr = new QString(pszDesc); /* ignore allocation failure (well, at least up to the point we can ignore it) */
1054 pNode->Data.Counter = *(PSTAMCOUNTER)pvSample;
1059 pNode->Data.Profile = *(PSTAMPROFILE)pvSample;
1064 pNode->Data.RatioU32 = *(PSTAMRATIOU32)pvSample;
1070 pNode->Data.pStr = new QString(pszString);
1078 pNode->Data.u8 = *(uint8_t *)pvSample;
1085 pNode->Data.u16 = *(uint16_t *)pvSample;
1092 pNode->Data.u32 = *(uint32_t *)pvSample;
1099 pNode->Data.u64 = *(uint64_t *)pvSample;
1104 pNode->Data.f = *(bool *)pvSample;
1119 VBoxDbgStatsModel::updateNode(PDBGGUISTATSNODE pNode, STAMTYPE enmType, void *pvSample, STAMUNIT enmUnit, const char *pszDesc)
1125 if (enmType != pNode->enmType)
1127 if (pNode->enmType != STAMTYPE_INVALID)
1128 resetNode(pNode);
1129 initNode(pNode, enmType, pvSample, enmUnit, pszDesc);
1130 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1144 uint64_t cPrev = pNode->Data.Counter.c;
1145 pNode->Data.Counter = *(PSTAMCOUNTER)pvSample;
1146 iDelta = pNode->Data.Counter.c - cPrev;
1147 if (iDelta || pNode->i64Delta)
1149 pNode->i64Delta = iDelta;
1150 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1158 uint64_t cPrevPeriods = pNode->Data.Profile.cPeriods;
1159 pNode->Data.Profile = *(PSTAMPROFILE)pvSample;
1160 iDelta = pNode->Data.Profile.cPeriods - cPrevPeriods;
1161 if (iDelta || pNode->i64Delta)
1163 pNode->i64Delta = iDelta;
1164 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1172 STAMRATIOU32 Prev = pNode->Data.RatioU32;
1173 pNode->Data.RatioU32 = *(PSTAMRATIOU32)pvSample;
1174 int32_t iDeltaA = pNode->Data.RatioU32.u32A - Prev.u32A;
1175 int32_t iDeltaB = pNode->Data.RatioU32.u32B - Prev.u32B;
1178 if (pNode->i64Delta)
1180 pNode->i64Delta = 0;
1181 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1187 pNode->i64Delta = iDeltaA + (iDeltaB >= 0 ? iDeltaB : -iDeltaB);
1189 pNode->i64Delta = iDeltaA + (iDeltaB < 0 ? iDeltaB : -iDeltaB);
1190 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1198 if (!pNode->Data.pStr)
1200 pNode->Data.pStr = new QString(pszString);
1201 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1203 else if (*pNode->Data.pStr == pszString)
1205 delete pNode->Data.pStr;
1206 pNode->Data.pStr = new QString(pszString);
1207 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1217 uint8_t uPrev = pNode->Data.u8;
1218 pNode->Data.u8 = *(uint8_t *)pvSample;
1219 iDelta = (int32_t)pNode->Data.u8 - (int32_t)uPrev;
1220 if (iDelta || pNode->i64Delta)
1222 pNode->i64Delta = iDelta;
1223 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1233 uint16_t uPrev = pNode->Data.u16;
1234 pNode->Data.u16 = *(uint16_t *)pvSample;
1235 iDelta = (int32_t)pNode->Data.u16 - (int32_t)uPrev;
1236 if (iDelta || pNode->i64Delta)
1238 pNode->i64Delta = iDelta;
1239 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1249 uint32_t uPrev = pNode->Data.u32;
1250 pNode->Data.u32 = *(uint32_t *)pvSample;
1251 iDelta = (int64_t)pNode->Data.u32 - (int64_t)uPrev;
1252 if (iDelta || pNode->i64Delta)
1254 pNode->i64Delta = iDelta;
1255 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1265 uint64_t uPrev = pNode->Data.u64;
1266 pNode->Data.u64 = *(uint64_t *)pvSample;
1267 iDelta = pNode->Data.u64 - uPrev;
1268 if (iDelta || pNode->i64Delta)
1270 pNode->i64Delta = iDelta;
1271 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1279 bool fPrev = pNode->Data.f;
1280 pNode->Data.f = *(bool *)pvSample;
1281 iDelta = pNode->Data.f - fPrev;
1282 if (iDelta || pNode->i64Delta)
1284 pNode->i64Delta = iDelta;
1285 pNode->enmState = kDbgGuiStatsNodeState_kRefresh;
1299 VBoxDbgStatsModel::getNodePath(PCDBGGUISTATSNODE pNode, char *psz, ssize_t cch)
1302 if (!pNode->pParent)
1311 cch -= pNode->cchName + 1;
1313 off = getNodePath(pNode->pParent, psz, cch);
1317 memcpy(&psz[off], pNode->pszName, pNode->cchName + 1);
1318 off += pNode->cchName;
1326 VBoxDbgStatsModel::getNodePath2(PCDBGGUISTATSNODE pNode, char *psz, ssize_t cch)
1328 if (VBoxDbgStatsModel::getNodePath(pNode, psz, cch) < 0)
1349 VBoxDbgStatsModel::nextNode(PDBGGUISTATSNODE pNode)
1351 if (!pNode)
1355 if (pNode->cChildren)
1356 return pNode->papChildren[0];
1358 PDBGGUISTATSNODE pParent = pNode->pParent;
1363 if (pNode->iSelf + 1 < pNode->pParent->cChildren)
1364 return pParent->papChildren[pNode->iSelf + 1];
1380 VBoxDbgStatsModel::nextDataNode(PDBGGUISTATSNODE pNode)
1383 pNode = nextNode(pNode);
1384 while ( pNode
1385 && pNode->enmType == STAMTYPE_INVALID);
1386 return pNode;
1391 VBoxDbgStatsModel::prevNode(PDBGGUISTATSNODE pNode)
1393 if (!pNode)
1395 PDBGGUISTATSNODE pParent = pNode->pParent;
1400 if (pNode->iSelf > 0)
1402 pNode = pParent->papChildren[pNode->iSelf - 1];
1403 while (pNode->cChildren)
1404 pNode = pNode->papChildren[pNode->cChildren - 1];
1405 return pNode;
1414 VBoxDbgStatsModel::prevDataNode(PDBGGUISTATSNODE pNode)
1417 pNode = prevNode(pNode);
1418 while ( pNode
1419 && pNode->enmType == STAMTYPE_INVALID);
1420 return pNode;
1462 * We might be inserting a new node between pPrev and pNode
1476 PDBGGUISTATSNODE pNode = m_pUpdateParent->papChildren[m_iUpdateChild];
1477 PDBGGUISTATSNODE const pPrev = prevDataNode(pNode);
1478 AssertMsg(strcmp(pszName, getNodePath2(pNode, szStrict, sizeof(szStrict))), ("%s\n", szStrict));
1480 Log(("updateCallbackHandleOutOfOrder: pszName='%s' m_szUpdateParent='%s' m_cchUpdateParent=%u pNode='%s'\n",
1481 pszName, m_szUpdateParent, m_cchUpdateParent, getNodePath2(pNode, szStrict, sizeof(szStrict))));
1483 pNode = pNode->pParent;
1484 while (pNode != m_pRoot)
1488 Assert(m_cchUpdateParent > pNode->cchName);
1489 m_cchUpdateParent -= pNode->cchName + 1;
1491 Log2(("updateCallbackHandleOutOfOrder: m_szUpdateParent='%s' m_cchUpdateParent=%u, removed '/%s' (%u)\n", m_szUpdateParent, m_cchUpdateParent, pNode->pszName, __LINE__));
1492 pNode = pNode->pParent;
1517 if (!pNode->cChildren)
1520 pNode = createAndInsert(pNode, pszSubName, cchSubName, 0);
1521 AssertReturn(pNode, NULL);
1527 int32_t iLast = pNode->cChildren - 1;
1532 size_t const cchCompare = RT_MIN(pNode->papChildren[i]->cchName, cchSubName);
1533 iDiff = memcmp(pszSubName, pNode->papChildren[i]->pszName, cchCompare);
1541 pNode = createAndInsert(pNode, pszSubName, cchSubName, iStart);
1542 AssertReturn(pNode, NULL);
1551 pNode = createAndInsert(pNode, pszSubName, cchSubName, i);
1552 AssertReturn(pNode, NULL);
1558 pNode = pNode->papChildren[i];
1568 * Remove all the nodes between pNode and pPrev but keep all
1569 * of pNode's ancestors (or it'll get orphaned).
1571 PDBGGUISTATSNODE pCur = prevNode(pNode);
1575 if (!isNodeAncestorOf(pCur, pNode))
1584 * Remove the data from all ancestors of pNode that it doesn't
1589 pCur = pNode->pParent;
1592 resetNode(pNode);
1600 Assert(m_cchUpdateParent > pNode->cchName + 1);
1601 m_cchUpdateParent -= pNode->cchName + 1;
1603 m_pUpdateParent = pNode->pParent;
1604 m_iUpdateChild = pNode->iSelf;
1607 return pNode;
1621 PDBGGUISTATSNODE pNode = m_pRoot;
1632 if ( !pNode->cChildren
1633 || strncmp(pNode->papChildren[pNode->cChildren - 1]->pszName, pszCur, cchCur)
1634 || pNode->papChildren[pNode->cChildren - 1]->pszName[cchCur])
1636 pNode = createAndInsert(pNode, pszCur, pszNext - pszCur, pNode->cChildren);
1637 AssertReturn(pNode, NULL);
1640 pNode = pNode->papChildren[pNode->cChildren - 1];
1646 return pNode;
1651 VBoxDbgStatsModel::updateCallbackAdvance(PDBGGUISTATSNODE pNode)
1662 PDBGGUISTATSNODE const pCorrectNext = nextDataNode(pNode);
1664 PDBGGUISTATSNODE pParent = pNode->pParent;
1665 if (pNode->cChildren)
1668 Assert(m_cchUpdateParent + pNode->cchName + 2 < sizeof(m_szUpdateParent));
1669 memcpy(&m_szUpdateParent[m_cchUpdateParent], pNode->pszName, pNode->cchName);
1670 m_cchUpdateParent += pNode->cchName;
1674 pNode = pNode->papChildren[0];
1676 else if (pNode->iSelf + 1 < pParent->cChildren)
1680 pNode = pParent->papChildren[pNode->iSelf + 1];
1688 pNode = pParent;
1692 Assert(pNode == m_pRoot);
1699 Assert(m_cchUpdateParent > pNode->cchName + 1);
1700 m_cchUpdateParent -= pNode->cchName + 1;
1703 if (pNode->iSelf + 1 < pParent->cChildren)
1705 pNode = pParent->papChildren[pNode->iSelf + 1];
1715 while ( pNode->enmType == STAMTYPE_INVALID
1716 && pNode->cChildren > 0)
1718 Assert(pNode->enmState == kDbgGuiStatsNodeState_kVisible);
1720 Assert(m_cchUpdateParent + pNode->cchName + 2 < sizeof(m_szUpdateParent));
1721 memcpy(&m_szUpdateParent[m_cchUpdateParent], pNode->pszName, pNode->cchName);
1722 m_cchUpdateParent += pNode->cchName;
1726 pNode = pNode->papChildren[0];
1728 Assert(pNode->enmType != STAMTYPE_INVALID);
1729 m_iUpdateChild = pNode->iSelf;
1730 m_pUpdateParent = pNode->pParent;
1731 Assert(pNode == pCorrectNext);
1755 PDBGGUISTATSNODE pNode;
1758 pNode = pThis->m_pUpdateParent->papChildren[pThis->m_iUpdateChild];
1760 && !strcmp(pszName + pThis->m_cchUpdateParent, pNode->pszName))
1765 pNode = pThis->updateCallbackHandleOutOfOrder(pszName);
1766 if (!pNode)
1773 pNode = pThis->updateCallbackHandleTail(pszName);
1774 if (!pNode)
1781 updateNode(pNode, enmType, pvSample, enmUnit, pszDesc);
1782 pThis->updateCallbackAdvance(pNode);
1842 PDBGGUISTATSNODE pNode;
1843 while ((pNode = nextNode(pLast)))
1845 Assert(pNode != m_pRoot);
1846 removeAndDestroy(pNode);
1871 Stack.a[0].pNode = m_pRoot;
1878 PDBGGUISTATSNODE pNode = Stack.a[Stack.iTop].pNode;
1880 if (iChild < pNode->cChildren)
1885 Stack.a[Stack.iTop].pNode = pNode->papChildren[iChild];
1895 while (iChild < pNode->cChildren)
1898 while ( iChild < pNode->cChildren
1899 && pNode->papChildren[iChild]->enmState != kDbgGuiStatsNodeState_kRefresh)
1901 if (iChild >= pNode->cChildren)
1903 QModelIndex TopLeft = createIndex(iChild, 0, pNode->papChildren[iChild]);
1904 pNode->papChildren[iChild]->enmState = kDbgGuiStatsNodeState_kVisible;
1907 if ( ++iChild < pNode->cChildren
1908 && pNode->papChildren[iChild]->enmState == kDbgGuiStatsNodeState_kRefresh)
1910 do pNode->papChildren[iChild]->enmState = kDbgGuiStatsNodeState_kVisible;
1911 while ( ++iChild < pNode->cChildren
1912 && pNode->papChildren[iChild]->enmState == kDbgGuiStatsNodeState_kRefresh);
1913 QModelIndex BottomRight = createIndex(iChild - 1, DBGGUI_STATS_COLUMNS - 1, pNode->papChildren[iChild - 1]);
1961 PCDBGGUISTATSNODE pNode = nodeFromIndex(a_rIndex);
1962 if (pNode == m_pRoot || !a_rIndex.isValid())
1970 else if (pNode)
1974 ssize_t cch = getNodePath(pNode, szPat, 1024);
1978 if (fSubTree && pNode->cChildren)
2142 VBoxDbgStatsModel::strUnit(PCDBGGUISTATSNODE pNode)
2144 if (pNode->enmUnit == STAMUNIT_INVALID)
2146 return STAMR3GetUnit(pNode->enmUnit);
2151 VBoxDbgStatsModel::strValueTimes(PCDBGGUISTATSNODE pNode)
2155 switch (pNode->enmType)
2158 return formatNumber(sz, pNode->Data.Counter.c);
2162 if (!pNode->Data.Profile.cPeriods)
2164 return formatNumber(sz, pNode->Data.Profile.cPeriods);
2170 char *psz = formatNumber(szTmp, pNode->Data.RatioU32.u32A);
2174 strcpy(&sz[off], formatNumber(szTmp, pNode->Data.RatioU32.u32B));
2179 return *pNode->Data.pStr;
2183 return formatNumber(sz, pNode->Data.u8);
2187 return formatHexNumber(sz, pNode->Data.u8, 2);
2191 return formatNumber(sz, pNode->Data.u16);
2195 return formatHexNumber(sz, pNode->Data.u16, 4);
2199 return formatNumber(sz, pNode->Data.u32);
2203 return formatHexNumber(sz, pNode->Data.u32, 8);
2207 return formatNumber(sz, pNode->Data.u64);
2211 return formatHexNumber(sz, pNode->Data.u64, 16);
2215 return pNode->Data.f ? "true" : "false";
2218 AssertMsgFailed(("%d\n", pNode->enmType));
2226 VBoxDbgStatsModel::strMinValue(PCDBGGUISTATSNODE pNode)
2230 switch (pNode->enmType)
2234 if (!pNode->Data.Profile.cPeriods)
2236 return formatNumber(sz, pNode->Data.Profile.cTicksMin);
2244 VBoxDbgStatsModel::strAvgValue(PCDBGGUISTATSNODE pNode)
2248 switch (pNode->enmType)
2252 if (!pNode->Data.Profile.cPeriods)
2254 return formatNumber(sz, pNode->Data.Profile.cTicks / pNode->Data.Profile.cPeriods);
2262 VBoxDbgStatsModel::strMaxValue(PCDBGGUISTATSNODE pNode)
2266 switch (pNode->enmType)
2270 if (!pNode->Data.Profile.cPeriods)
2272 return formatNumber(sz, pNode->Data.Profile.cTicksMax);
2280 VBoxDbgStatsModel::strTotalValue(PCDBGGUISTATSNODE pNode)
2284 switch (pNode->enmType)
2288 if (!pNode->Data.Profile.cPeriods)
2290 return formatNumber(sz, pNode->Data.Profile.cTicks);
2298 VBoxDbgStatsModel::strDeltaValue(PCDBGGUISTATSNODE pNode)
2302 switch (pNode->enmType)
2306 if (!pNode->Data.Profile.cPeriods)
2330 return formatNumberSigned(sz, pNode->i64Delta);
2346 PDBGGUISTATSNODE pNode = nodeFromIndex(a_rIndex);
2347 if (!pNode)
2353 return QString(pNode->pszName);
2355 return strUnit(pNode);
2357 return strValueTimes(pNode);
2359 return strMinValue(pNode);
2361 return strAvgValue(pNode);
2363 return strMaxValue(pNode);
2365 return strTotalValue(pNode);
2367 return strDeltaValue(pNode);
2369 return pNode->pDescStr ? QString(*pNode->pDescStr) : QString("");
2652 PDBGGUISTATSNODE pNode = pRoot;
2663 if ( !pNode->cChildren
2664 || strncmp(pNode->papChildren[pNode->cChildren - 1]->pszName, pszCur, cchCur)
2665 || pNode->papChildren[pNode->cChildren - 1]->pszName[cchCur])
2667 pNode = createAndInsertNode(pNode, pszCur, pszNext - pszCur, UINT32_MAX);
2668 if (!pNode)
2672 pNode = pNode->papChildren[pNode->cChildren - 1];
2681 return initNode(pNode, enmType, pvSample, enmUnit, pszDesc);