| // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. |
| // 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). |
| // |
| #pragma once |
| #include "monitoring/perf_step_timer.h" |
| #include "rocksdb/perf_context.h" |
| #include "util/stop_watch.h" |
| |
| namespace rocksdb { |
| |
| #if defined(NPERF_CONTEXT) |
| |
| #define PERF_TIMER_GUARD(metric) |
| #define PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(metric, condition) |
| #define PERF_TIMER_MEASURE(metric) |
| #define PERF_TIMER_STOP(metric) |
| #define PERF_TIMER_START(metric) |
| #define PERF_COUNTER_ADD(metric, value) |
| |
| #else |
| |
| // Stop the timer and update the metric |
| #define PERF_TIMER_STOP(metric) perf_step_timer_##metric.Stop(); |
| |
| #define PERF_TIMER_START(metric) perf_step_timer_##metric.Start(); |
| |
| // Declare and set start time of the timer |
| #define PERF_TIMER_GUARD(metric) \ |
| PerfStepTimer perf_step_timer_##metric(&(get_perf_context()->metric)); \ |
| perf_step_timer_##metric.Start(); |
| |
| #define PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(metric, condition) \ |
| PerfStepTimer perf_step_timer_##metric(&(get_perf_context()->metric), true); \ |
| if ((condition)) { \ |
| perf_step_timer_##metric.Start(); \ |
| } |
| |
| // Update metric with time elapsed since last START. start time is reset |
| // to current timestamp. |
| #define PERF_TIMER_MEASURE(metric) perf_step_timer_##metric.Measure(); |
| |
| // Increase metric value |
| #define PERF_COUNTER_ADD(metric, value) \ |
| if (perf_level >= PerfLevel::kEnableCount) { \ |
| get_perf_context()->metric += value; \ |
| } |
| |
| #endif |
| |
| } |