// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree. An additional grant
-// of patent rights can be found in the PATENTS file in the same directory.
+// This source code is licensed under both the GPLv2 (found in the
+// COPYING file in the root directory) and Apache 2.0 License
+// (found in the LICENSE.Apache file in the root directory).
#include "monitoring/instrumented_mutex.h"
#include "monitoring/perf_context_imp.h"
namespace rocksdb {
namespace {
-bool ShouldReportToStats(Env* env, Statistics* stats) {
- return env != nullptr && stats != nullptr &&
- stats->stats_level_ > kExceptTimeForMutex;
+Statistics* stats_for_report(Env* env, Statistics* stats) {
+ if (env != nullptr && stats != nullptr &&
+ stats->stats_level_ > kExceptTimeForMutex) {
+ return stats;
+ } else {
+ return nullptr;
+ }
}
} // namespace
void InstrumentedMutex::Lock() {
- PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(db_mutex_lock_nanos,
- stats_code_ == DB_MUTEX_WAIT_MICROS);
- uint64_t wait_time_micros = 0;
- if (ShouldReportToStats(env_, stats_)) {
- {
- StopWatch sw(env_, nullptr, 0, &wait_time_micros);
- LockInternal();
- }
- RecordTick(stats_, stats_code_, wait_time_micros);
- } else {
- LockInternal();
- }
+ PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(
+ db_mutex_lock_nanos, stats_code_ == DB_MUTEX_WAIT_MICROS,
+ stats_for_report(env_, stats_), stats_code_);
+ LockInternal();
}
void InstrumentedMutex::LockInternal() {
}
void InstrumentedCondVar::Wait() {
- PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(db_condition_wait_nanos,
- stats_code_ == DB_MUTEX_WAIT_MICROS);
- uint64_t wait_time_micros = 0;
- if (ShouldReportToStats(env_, stats_)) {
- {
- StopWatch sw(env_, nullptr, 0, &wait_time_micros);
- WaitInternal();
- }
- RecordTick(stats_, stats_code_, wait_time_micros);
- } else {
- WaitInternal();
- }
+ PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(
+ db_condition_wait_nanos, stats_code_ == DB_MUTEX_WAIT_MICROS,
+ stats_for_report(env_, stats_), stats_code_);
+ WaitInternal();
}
void InstrumentedCondVar::WaitInternal() {
}
bool InstrumentedCondVar::TimedWait(uint64_t abs_time_us) {
- PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(db_condition_wait_nanos,
- stats_code_ == DB_MUTEX_WAIT_MICROS);
- uint64_t wait_time_micros = 0;
- bool result = false;
- if (ShouldReportToStats(env_, stats_)) {
- {
- StopWatch sw(env_, nullptr, 0, &wait_time_micros);
- result = TimedWaitInternal(abs_time_us);
- }
- RecordTick(stats_, stats_code_, wait_time_micros);
- } else {
- result = TimedWaitInternal(abs_time_us);
- }
- return result;
+ PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(
+ db_condition_wait_nanos, stats_code_ == DB_MUTEX_WAIT_MICROS,
+ stats_for_report(env_, stats_), stats_code_);
+ return TimedWaitInternal(abs_time_us);
}
bool InstrumentedCondVar::TimedWaitInternal(uint64_t abs_time_us) {