VirtualBox

Changeset 8663 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
May 7, 2008 3:15:05 PM (17 years ago)
Author:
vboxsync
Message:

New logger prefix: lockcnts Output: read/write

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/log/log.cpp

    r8274 r8663  
    103103static PRTLOGGER                    g_pRelLogger;
    104104#endif /* !IN_GC */
     105#ifdef IN_RING3
     106/** The RTThreadGetWriteLockCount() change caused by the logger mutex semaphore. */
     107static uint32_t volatile            g_cLoggerLockCount;
     108#endif
    105109#ifdef IN_RING0
    106110/** Number of per-thread loggers. */
     
    413417
    414418            /*
    415              * Create mutex.
     419             * Create mutex and check how much it counts when entering the lock
     420             * so that we can report the values for RTLOGFLAGS_PREFIX_LOCK_COUNTS.
    416421             */
    417422            if (RT_SUCCESS(rc))
     
    420425                if (RT_SUCCESS(rc))
    421426                {
     427#ifdef IN_RING3 /** @todo do counters in ring-0 too? */
     428                    RTTHREAD Thread = RTThreadSelf();
     429                    if (Thread != NIL_RTTHREAD)
     430                    {
     431                        int32_t c = RTThreadGetWriteLockCount(Thread);
     432                        RTSemFastMutexRequest(pLogger->MutexSem);
     433                        c = RTThreadGetWriteLockCount(Thread) - c;
     434                        RTSemFastMutexRelease(pLogger->MutexSem);
     435                        ASMAtomicWriteU32(&g_cLoggerLockCount, c);
     436                    }
     437#endif
    422438                    *ppLogger = pLogger;
    423439                    return VINF_SUCCESS;
    424440                }
    425                 else if (pszErrorMsg)
     441
     442                if (pszErrorMsg)
    426443                    RTStrPrintf(pszErrorMsg, cchErrorMsg, "failed to create sempahore");
    427444            }
     
    12141231            { "dec",          sizeof("dec"         ) - 1,   RTLOGFLAGS_DECIMAL_TS,          false },
    12151232            { "hex",          sizeof("hex"         ) - 1,   RTLOGFLAGS_DECIMAL_TS,          true  },
     1233            { "lockcnts",     sizeof("lockcnts"    ) - 1,   RTLOGFLAGS_PREFIX_LOCK_COUNTS,  false },
    12161234            { "cpuid",        sizeof("cpuid"       ) - 1,   RTLOGFLAGS_PREFIX_CPUID,        false },
    12171235            { "pid",          sizeof("pid"         ) - 1,   RTLOGFLAGS_PREFIX_PID,          false },
     
    19171935                /*
    19181936                 * Flush the buffer if there isn't enough room for the maximum prefix config.
    1919                  * Max is 214, add a couple of extra bytes.
     1937                 * Max is 224, add a couple of extra bytes.
    19201938                 */
    1921                 if (cb < 214 + 16)
     1939                if (cb < 224 + 16)
    19221940                {
    19231941                    rtlogFlush(pLogger);
     
    20932111                    psz += RTStrFormatNumber(psz, idCpu, 16, sizeof(idCpu) * 2, 0, RTSTR_F_ZEROPAD);
    20942112                    *psz++ = ' ';                                                               /* +17 */
     2113                }
     2114                if (pLogger->fFlags & RTLOGFLAGS_PREFIX_LOCK_COUNTS)
     2115                {
     2116#ifdef IN_RING3 /** @todo implement these counters in ring-0 too? */
     2117                    RTTHREAD Thread = RTThreadSelf();
     2118                    if (Thread != NIL_RTTHREAD)
     2119                    {
     2120                        uint32_t cReadLocks  = RTThreadGetReadLockCount(Thread);
     2121                        uint32_t cWriteLocks = RTThreadGetWriteLockCount(Thread) - g_cLoggerLockCount;
     2122                        cReadLocks  = RT_MIN(0xfff, cReadLocks);
     2123                        cWriteLocks = RT_MIN(0xfff, cWriteLocks);
     2124                        psz += RTStrFormatNumber(psz, cReadLocks,  16, 3, 0, RTSTR_F_ZEROPAD);
     2125                        *psz++ = '/';
     2126                        psz += RTStrFormatNumber(psz, cWriteLocks, 16, 3, 0, RTSTR_F_ZEROPAD);
     2127                    }
     2128                    else
     2129#endif
     2130                    {
     2131                        *psz++ = '0';
     2132                        *psz++ = '0';
     2133                        *psz++ = '0';
     2134                        *psz++ = '/';
     2135                        *psz++ = '0';
     2136                        *psz++ = '0';
     2137                        *psz++ = '0';
     2138                    }
     2139                    *psz++ = ' ';                                                               /* +8 */
    20952140                }
    20962141                if (pLogger->fFlags & RTLOGFLAGS_PREFIX_FLAG_NO)
Note: See TracChangeset for help on using the changeset viewer.

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