VirtualBox

Changeset 12819 in vbox


Ignore:
Timestamp:
Sep 30, 2008 2:20:33 AM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
37174
Message:

Debugger: more fixes.

Location:
trunk/src/VBox/Debugger
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Debugger/VBoxDbgStatsQt4.cpp

    r12817 r12819  
    18051805                PDBGGUISTATSNODE pAdv = prevNode(pCur); Assert(pAdv || !pPrev);
    18061806                if (!isNodeAncestorOf(pCur, pNode))
    1807                 {
    18081807                    removeAndDestroyNode(pCur);
    1809                 }
    18101808                pCur = pAdv;
    18111809            }
     
    18751873
    18761874    /*
    1877      * Advance to the next node.
    1878      * (Again, we're ASSUMING that the input is sorted on (full) path name.)
    1879      */
    1880     PDBGGUISTATSNODE pParent = pNode->pParent;
    1881     if (pNode->cChildren)
    1882     {
    1883         /* decend to the children. */
    1884         pThis->m_iUpdateChild = 0;
    1885         Assert(pThis->m_cchUpdateParent + pNode->cchName + 2 < sizeof(pThis->m_szUpdateParent));
    1886         memcpy(&pThis->m_szUpdateParent[pThis->m_cchUpdateParent], pNode->pszName, pNode->cchName);
    1887         pThis->m_cchUpdateParent += pNode->cchName;
    1888         pThis->m_szUpdateParent[pThis->m_cchUpdateParent++] = '/';
    1889         pThis->m_szUpdateParent[pThis->m_cchUpdateParent] = '\0';
    1890         pThis->m_pUpdateParent = pNode;
    1891     }
    1892     else if (pNode->iSelf + 1 < pParent->cChildren)
    1893     {
    1894         /* next sibling  */
    1895         pThis->m_iUpdateChild = pNode->iSelf + 1;
    1896         Assert(pThis->m_pUpdateParent == pNode->pParent);
    1897     }
    1898     else if (pThis->m_iUpdateChild != UINT32_MAX)
    1899     {
    1900         /* move up and down- / on-wards */
    1901         for (;;)
    1902         {
    1903             /* ascend */
    1904             pNode = pParent;
    1905             pParent = pParent->pParent;
    1906             if (!pParent)
     1875     * Advance to the next node with data.
     1876     *
     1877     * ASSUMES a leaf *must* have data and again we're ASSUMING the sorting
     1878     * on slash separated sub-strings.
     1879     */
     1880    if (pThis->m_iUpdateChild != UINT32_MAX)
     1881    {
     1882#ifdef VBOX_STRICT
     1883        PDBGGUISTATSNODE const pCorrectNext = nextDataNode(pNode);
     1884#endif
     1885        PDBGGUISTATSNODE pParent = pNode->pParent;
     1886        if (pNode->cChildren)
     1887        {
     1888            /* decend to the first child. */
     1889            Assert(pThis->m_cchUpdateParent + pNode->cchName + 2 < sizeof(pThis->m_szUpdateParent));
     1890            memcpy(&pThis->m_szUpdateParent[pThis->m_cchUpdateParent], pNode->pszName, pNode->cchName);
     1891            pThis->m_cchUpdateParent += pNode->cchName;
     1892            pThis->m_szUpdateParent[pThis->m_cchUpdateParent++] = '/';
     1893            pThis->m_szUpdateParent[pThis->m_cchUpdateParent] = '\0';
     1894
     1895            pNode = pNode->papChildren[0];
     1896        }
     1897        else if (pNode->iSelf + 1 < pParent->cChildren)
     1898        {
     1899            /* next sibling or one if its descendants. */
     1900            Assert(pThis->m_pUpdateParent == pParent);
     1901            pNode = pParent->papChildren[pNode->iSelf + 1];
     1902        }
     1903        else
     1904        {
     1905            /* move up and down- / on-wards */
     1906            for (;;)
    19071907            {
    1908                 Assert(pNode == pThis->m_pRoot);
    1909                 pThis->m_iUpdateChild = UINT32_MAX;
    1910                 pThis->m_szUpdateParent[0] = '\0';
    1911                 pThis->m_cchUpdateParent = 0;
    1912                 pThis->m_pUpdateParent = NULL;
    1913                 break;
     1908                /* ascend */
     1909                pNode = pParent;
     1910                pParent = pParent->pParent;
     1911                if (!pParent)
     1912                {
     1913                    Assert(pNode == pThis->m_pRoot);
     1914                    pThis->m_iUpdateChild = UINT32_MAX;
     1915                    pThis->m_szUpdateParent[0] = '\0';
     1916                    pThis->m_cchUpdateParent = 0;
     1917                    pThis->m_pUpdateParent = NULL;
     1918                    break;
     1919                }
     1920                Assert(pThis->m_cchUpdateParent > pNode->cchName + 1);
     1921                pThis->m_cchUpdateParent -= pNode->cchName + 1;
     1922
     1923                /* try advance */
     1924                if (pNode->iSelf + 1 < pParent->cChildren)
     1925                {
     1926                    pNode = pParent->papChildren[pNode->iSelf + 1];
     1927                    pThis->m_szUpdateParent[pThis->m_cchUpdateParent] = '\0';
     1928                    break;
     1929                }
    19141930            }
    1915             Assert(pThis->m_cchUpdateParent > pNode->cchName + 1);
    1916             pThis->m_cchUpdateParent -= pNode->cchName + 1;
    1917 
    1918             /* try advance */
    1919             if (pNode->iSelf + 1 < pParent->cChildren)
     1931        }
     1932
     1933        /* decend to a node containing data and finalize the globals. (ASSUMES leaf has data.) */
     1934        if (pThis->m_iUpdateChild != UINT32_MAX)
     1935        {
     1936            while (   pNode->enmType == STAMTYPE_INVALID
     1937                   && pNode->cChildren > 0)
    19201938            {
    1921                 pNode = pParent->papChildren[pNode->iSelf + 1];
    1922 
    1923                 /* decend to a node containing data. */
    1924                 while (   pNode->enmType == STAMTYPE_INVALID
    1925                        && pNode->cChildren > 0)
    1926                 {
    1927                     Assert(pNode->enmState == kDbgGuiStatsNodeState_kVisible);
    1928 
    1929                     Assert(pThis->m_cchUpdateParent + pNode->cchName + 2 < sizeof(pThis->m_szUpdateParent));
    1930                     memcpy(&pThis->m_szUpdateParent[pThis->m_cchUpdateParent], pNode->pszName, pNode->cchName);
    1931                     pThis->m_cchUpdateParent += pNode->cchName;
    1932                     pThis->m_szUpdateParent[pThis->m_cchUpdateParent++] = '/';
    1933 
    1934                     pNode = pNode->papChildren[0];
    1935                 }
    1936                 Assert(pNode->enmType != STAMTYPE_INVALID);
     1939                Assert(pNode->enmState == kDbgGuiStatsNodeState_kVisible);
     1940
     1941                Assert(pThis->m_cchUpdateParent + pNode->cchName + 2 < sizeof(pThis->m_szUpdateParent));
     1942                memcpy(&pThis->m_szUpdateParent[pThis->m_cchUpdateParent], pNode->pszName, pNode->cchName);
     1943                pThis->m_cchUpdateParent += pNode->cchName;
     1944                pThis->m_szUpdateParent[pThis->m_cchUpdateParent++] = '/';
    19371945                pThis->m_szUpdateParent[pThis->m_cchUpdateParent] = '\0';
    1938                 pThis->m_iUpdateChild = pNode->iSelf;
    1939                 pThis->m_pUpdateParent = pNode->pParent;
    1940                 break;
     1946
     1947                pNode = pNode->papChildren[0];
    19411948            }
     1949            Assert(pNode->enmType != STAMTYPE_INVALID);
     1950            pThis->m_iUpdateChild = pNode->iSelf;
     1951            pThis->m_pUpdateParent = pNode->pParent;
     1952            Assert(pNode == pCorrectNext);
    19421953        }
    19431954    }
     
    19942005    {
    19952006        PDBGGUISTATSNODE const pLast = prevDataNode(m_pUpdateParent->papChildren[m_iUpdateChild]);
    1996         for (;;)
    1997         {
    1998             PDBGGUISTATSNODE pNode = nextNode(pLast);
    1999             if (!pNode)
    2000                 break;
    2001 char szFoo[1024];
    2002 getNodePath(pNode, szFoo, 1024); fprintf(stderr, "removing pNode=%p: %s\n", pNode, szFoo);
    2003 if (pLast) getNodePath(pLast, szFoo, 1024); else szFoo[0] = '\0';
    2004                                  fprintf(stderr, "         pLast=%p: %s\n", pLast, szFoo);
    2005             removeAndDestroyNode(pNode);
     2007        if (!pLast)
     2008            setRootNode(createRootNode());
     2009        else
     2010        {
     2011            PDBGGUISTATSNODE pNode;
     2012            while ((pNode = nextNode(pLast)))
     2013                removeAndDestroyNode(pNode);
    20062014        }
    20072015        m_fUpdateInsertRemove = true;
  • trunk/src/VBox/Debugger/VBoxDbgStatsQt4.h

    r12817 r12819  
    7777     */
    7878    void resetStats(const QString &rPatStr);
    79 
    80 private:
    81     /**
    82      * Callback function for the STAMR3Enum() made by update().
    83      *
    84      * @returns 0 (i.e. never halt enumeration).
    85      *
    86      * @param   pszName         The name of the sample.
    87      * @param   enmType         The type.
    88      * @param   pvSample        Pointer to the data. enmType indicates the format of this data.
    89      * @param   enmUnit         The unit.
    90      * @param   enmVisibility   The visibility.
    91      * @param   pszDesc         The description.
    92      * @param   pvUser          Pointer to the VBoxDbgStatsView object.
    93      */
    94 //later:    static DECLCALLBACK(int) updateCallback(const char *pszName, STAMTYPE enmType, void *pvSample, STAMUNIT enmUnit,
    95 //later:                                            STAMVISIBILITY enmVisibility, const char *pszDesc, void *pvUser);
    96 
    97 protected:
    98     /**
    99      * Creates / finds the path to the specified stats item and makes is visible.
    100      *
    101      * @returns Parent node.
    102      * @param   pszName     Path to a stats item.
    103      */
    104 //    VBoxDbgStatsItem *createPath(const char *pszName);
    10579
    10680protected slots:
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette