| // 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/iostats_context.h" |
| |
| #ifdef ROCKSDB_SUPPORT_THREAD_LOCAL |
| |
| // increment a specific counter by the specified value |
| #define IOSTATS_ADD(metric, value) \ |
| (get_iostats_context()->metric += value) |
| |
| // Increase metric value only when it is positive |
| #define IOSTATS_ADD_IF_POSITIVE(metric, value) \ |
| if (value > 0) { IOSTATS_ADD(metric, value); } |
| |
| // reset a specific counter to zero |
| #define IOSTATS_RESET(metric) \ |
| (get_iostats_context()->metric = 0) |
| |
| // reset all counters to zero |
| #define IOSTATS_RESET_ALL() \ |
| (get_iostats_context()->Reset()) |
| |
| #define IOSTATS_SET_THREAD_POOL_ID(value) \ |
| (get_iostats_context()->thread_pool_id = value) |
| |
| #define IOSTATS_THREAD_POOL_ID() \ |
| (get_iostats_context()->thread_pool_id) |
| |
| #define IOSTATS(metric) \ |
| (get_iostats_context()->metric) |
| |
| // Declare and set start time of the timer |
| #define IOSTATS_TIMER_GUARD(metric) \ |
| PerfStepTimer iostats_step_timer_##metric(&(get_iostats_context()->metric)); \ |
| iostats_step_timer_##metric.Start(); |
| |
| #else // ROCKSDB_SUPPORT_THREAD_LOCAL |
| |
| #define IOSTATS_ADD(metric, value) |
| #define IOSTATS_ADD_IF_POSITIVE(metric, value) |
| #define IOSTATS_RESET(metric) |
| #define IOSTATS_RESET_ALL() |
| #define IOSTATS_SET_THREAD_POOL_ID(value) |
| #define IOSTATS_THREAD_POOL_ID() |
| #define IOSTATS(metric) 0 |
| |
| #define IOSTATS_TIMER_GUARD(metric) |
| |
| #endif // ROCKSDB_SUPPORT_THREAD_LOCAL |