static void MXUserStatsActionRW(MXUserHeader *header) // IN: { MXUserRWLock *lock = (MXUserRWLock *) header; MXUserHeldStats *heldStats = Atomic_ReadPtr(&lock->heldStatsMem); MXUserAcquireStats *acquireStats = Atomic_ReadPtr(&lock->acquireStatsMem); if (heldStats) { MXUserDumpBasicStats(&heldStats->data, header); if (Atomic_ReadPtr(&heldStats->histo) != NULL) { MXUserHistoDump(Atomic_ReadPtr(&heldStats->histo), header); } } if (acquireStats) { Bool isHot; Bool doLog; double contentionRatio; /* * Dump the statistics for the specified lock. */ MXUserDumpAcquisitionStats(&acquireStats->data, header); if (Atomic_ReadPtr(&acquireStats->histo) != NULL) { MXUserHistoDump(Atomic_ReadPtr(&acquireStats->histo), header); } /* * Has the lock gone "hot"? If so, implement the hot actions. */ MXUserKitchen(&acquireStats->data, &contentionRatio, &isHot, &doLog); if (isHot) { MXUserForceHisto(&acquireStats->histo, MXUSER_STAT_CLASS_ACQUISITION, MXUSER_DEFAULT_HISTO_MIN_VALUE_NS, MXUSER_DEFAULT_HISTO_DECADES); if (heldStats) { MXUserForceHisto(&heldStats->histo, MXUSER_STAT_CLASS_HELD, MXUSER_DEFAULT_HISTO_MIN_VALUE_NS, MXUSER_DEFAULT_HISTO_DECADES); } if (doLog) { Log("HOT LOCK (%s); contention ratio %f\n", lock->header.name, contentionRatio); } } } }
static void MXUserStatsActionSema(MXUserHeader *header) // IN: { MXUserSemaphore *sema = (MXUserSemaphore *) header; MXUserAcquireStats *acquireStats = Atomic_ReadPtr(&sema->acquireStatsMem); if (LIKELY(acquireStats != NULL)) { Bool isHot; Bool doLog; double contentionRatio; /* * Dump the statistics for the specified semaphore. */ MXUserDumpAcquisitionStats(&acquireStats->data, header); if (Atomic_ReadPtr(&acquireStats->histo) != NULL) { MXUserHistoDump(Atomic_ReadPtr(&acquireStats->histo), header); } /* * Has the semaphore gone "hot"? If so, implement the hot actions. */ MXUserKitchen(&acquireStats->data, &contentionRatio, &isHot, &doLog); if (isHot) { MXUserForceHisto(&acquireStats->histo, MXUSER_STAT_CLASS_ACQUISITION, MXUSER_DEFAULT_HISTO_MIN_VALUE_NS, MXUSER_DEFAULT_HISTO_DECADES); if (doLog) { Log("HOT SEMAPHORE (%s); contention ratio %f\n", sema->header.name, contentionRatio); } } } }