diff options
Diffstat (limited to 'src/core/lib/debug/trace.h')
-rw-r--r-- | src/core/lib/debug/trace.h | 78 |
1 files changed, 59 insertions, 19 deletions
diff --git a/src/core/lib/debug/trace.h b/src/core/lib/debug/trace.h index 7447d5d94a..69ddd80222 100644 --- a/src/core/lib/debug/trace.h +++ b/src/core/lib/debug/trace.h @@ -23,9 +23,8 @@ #include <grpc/support/port_platform.h> #include <stdbool.h> -#ifdef __cplusplus -extern "C" { -#endif +void grpc_tracer_init(const char* env_var_name); +void grpc_tracer_shutdown(void); #if defined(__has_feature) #if __has_feature(thread_sanitizer) @@ -33,31 +32,72 @@ extern "C" { #endif #endif -typedef struct { +namespace grpc_core { + +class TraceFlag; +class TraceFlagList { + public: + static bool Set(const char* name, bool enabled); + static void Add(TraceFlag* flag); + + private: + static void LogAllTracers(); + static TraceFlag* root_tracer_; +}; + +namespace testing { +void grpc_tracer_enable_flag(grpc_core::TraceFlag* flag); +} + +class TraceFlag { + public: + TraceFlag(bool default_enabled, const char* name); + ~TraceFlag() {} + + const char* name() const { return name_; } + + bool enabled() { +#ifdef GRPC_THREADSAFE_TRACER + return gpr_atm_no_barrier_load(&value_) != 0; +#else + return value_; +#endif + } + + private: + friend void grpc_core::testing::grpc_tracer_enable_flag(TraceFlag* flag); + friend class TraceFlagList; + + void set_enabled(bool enabled) { #ifdef GRPC_THREADSAFE_TRACER - gpr_atm value; + gpr_atm_no_barrier_store(&value_, enabled); #else - bool value; + value_ = enabled; #endif - const char* name; -} grpc_tracer_flag; + } + TraceFlag* next_tracer_; + const char* const name_; #ifdef GRPC_THREADSAFE_TRACER -#define GRPC_TRACER_ON(flag) (gpr_atm_no_barrier_load(&(flag).value) != 0) -#define GRPC_TRACER_INITIALIZER(on, name) \ - { (gpr_atm)(on), (name) } + gpr_atm value_; #else -#define GRPC_TRACER_ON(flag) ((flag).value) -#define GRPC_TRACER_INITIALIZER(on, name) \ - { (on), (name) } + bool value_; #endif +}; -void grpc_register_tracer(grpc_tracer_flag* flag); -void grpc_tracer_init(const char* env_var_name); -void grpc_tracer_shutdown(void); +#ifndef NDEBUG +typedef TraceFlag DebugOnlyTraceFlag; +#else +class DebugOnlyTraceFlag { + public: + DebugOnlyTraceFlag(bool default_enabled, const char* name) {} + bool enabled() { return false; } -#ifdef __cplusplus -} + private: + void set_enabled(bool enabled) {} +}; #endif +} // namespace grpc_core + #endif /* GRPC_CORE_LIB_DEBUG_TRACE_H */ |