Changes mutex unlock profiling

PiperOrigin-RevId: 479667897
Change-Id: I6085df8bfcfb009806230f8d71b576a1371a4d1f
pull/1292/head
Abseil Team 2 years ago committed by Copybara-Service
parent 192e9834bc
commit 76466b85fb
  1. 16
      absl/synchronization/mutex.cc

@ -2342,22 +2342,26 @@ ABSL_ATTRIBUTE_NOINLINE void Mutex::UnlockSlow(SynchWaitParams *waitp) {
} // end of for(;;)-loop
if (wake_list != kPerThreadSynchNull) {
int64_t wait_cycles = 0;
int64_t total_wait_cycles = 0;
int64_t max_wait_cycles = 0;
int64_t now = base_internal::CycleClock::Now();
do {
// Sample lock contention events only if the waiter was trying to acquire
// Profile lock contention events only if the waiter was trying to acquire
// the lock, not waiting on a condition variable or Condition.
if (!wake_list->cond_waiter) {
wait_cycles += (now - wake_list->waitp->contention_start_cycles);
int64_t cycles_waited =
(now - wake_list->waitp->contention_start_cycles);
total_wait_cycles += cycles_waited;
if (max_wait_cycles == 0) max_wait_cycles = cycles_waited;
wake_list->waitp->contention_start_cycles = now;
wake_list->waitp->should_submit_contention_data = true;
}
wake_list = Wakeup(wake_list); // wake waiters
} while (wake_list != kPerThreadSynchNull);
if (wait_cycles > 0) {
mutex_tracer("slow release", this, wait_cycles);
if (total_wait_cycles > 0) {
mutex_tracer("slow release", this, total_wait_cycles);
ABSL_TSAN_MUTEX_PRE_DIVERT(this, 0);
submit_profile_data(wait_cycles);
submit_profile_data(total_wait_cycles);
ABSL_TSAN_MUTEX_POST_DIVERT(this, 0);
}
}

Loading…
Cancel
Save