TEST(LockStats, Wait) { const ResourceId resId(RESOURCE_COLLECTION, std::string("LockStats.Wait")); resetGlobalLockStats(); LockerForTests locker(MODE_IX); locker.lock(resId, MODE_X); { // This will block LockerForTests lockerConflict(MODE_IX); ASSERT_EQUALS(LOCK_WAITING, lockerConflict.lockBegin(resId, MODE_S)); // Sleep 1 millisecond so the wait time passes ASSERT_EQUALS(LOCK_TIMEOUT, lockerConflict.lockComplete(resId, MODE_S, 1, false)); } // Make sure that the waits/blocks are non-zero SingleThreadedLockStats stats; reportGlobalLockingStats(&stats); ASSERT_EQUALS(1, stats.get(resId, MODE_X).numAcquisitions); ASSERT_EQUALS(0, stats.get(resId, MODE_X).numWaits); ASSERT_EQUALS(0, stats.get(resId, MODE_X).combinedWaitTimeMicros); ASSERT_EQUALS(1, stats.get(resId, MODE_S).numAcquisitions); ASSERT_EQUALS(1, stats.get(resId, MODE_S).numWaits); ASSERT_GREATER_THAN(stats.get(resId, MODE_S).combinedWaitTimeMicros, 0); }
TEST(LockStats, NoWait) { const ResourceId resId(RESOURCE_COLLECTION, std::string("LockStats.NoWait")); resetGlobalLockStats(); LockerForTests locker(MODE_IX); locker.lock(resId, MODE_X); locker.unlock(resId); // Make sure that the waits/blocks are zero SingleThreadedLockStats stats; reportGlobalLockingStats(&stats); ASSERT_EQUALS(1, stats.get(resId, MODE_X).numAcquisitions); ASSERT_EQUALS(0, stats.get(resId, MODE_X).numWaits); ASSERT_EQUALS(0, stats.get(resId, MODE_X).combinedWaitTimeMicros); }