diff options
Diffstat (limited to 'trace.h')
-rw-r--r-- | trace.h | 61 |
1 files changed, 43 insertions, 18 deletions
@@ -11,7 +11,10 @@ struct trace_key { unsigned int need_close : 1; }; +extern struct trace_key trace_default_key; + #define TRACE_KEY_INIT(name) { "GIT_TRACE_" #name, 0, 0, 0 } +extern struct trace_key trace_perf_key; extern void trace_repo_setup(const char *prefix); extern int trace_want(struct trace_key *key); @@ -77,24 +80,42 @@ extern void trace_performance_since(uint64_t start, const char *format, ...); * comma, but this is non-standard. */ -#define trace_printf(...) \ - trace_printf_key_fl(TRACE_CONTEXT, __LINE__, NULL, __VA_ARGS__) - -#define trace_printf_key(key, ...) \ - trace_printf_key_fl(TRACE_CONTEXT, __LINE__, key, __VA_ARGS__) - -#define trace_argv_printf(argv, ...) \ - trace_argv_printf_fl(TRACE_CONTEXT, __LINE__, argv, __VA_ARGS__) - -#define trace_strbuf(key, data) \ - trace_strbuf_fl(TRACE_CONTEXT, __LINE__, key, data) - -#define trace_performance(nanos, ...) \ - trace_performance_fl(TRACE_CONTEXT, __LINE__, nanos, __VA_ARGS__) - -#define trace_performance_since(start, ...) \ - trace_performance_fl(TRACE_CONTEXT, __LINE__, getnanotime() - (start), \ - __VA_ARGS__) +#define trace_printf_key(key, ...) \ + do { \ + if (trace_pass_fl(key)) \ + trace_printf_key_fl(TRACE_CONTEXT, __LINE__, key, \ + __VA_ARGS__); \ + } while (0) + +#define trace_printf(...) trace_printf_key(&trace_default_key, __VA_ARGS__) + +#define trace_argv_printf(argv, ...) \ + do { \ + if (trace_pass_fl(&trace_default_key)) \ + trace_argv_printf_fl(TRACE_CONTEXT, __LINE__, \ + argv, __VA_ARGS__); \ + } while (0) + +#define trace_strbuf(key, data) \ + do { \ + if (trace_pass_fl(key)) \ + trace_strbuf_fl(TRACE_CONTEXT, __LINE__, key, data);\ + } while (0) + +#define trace_performance(nanos, ...) \ + do { \ + if (trace_pass_fl(&trace_perf_key)) \ + trace_performance_fl(TRACE_CONTEXT, __LINE__, nanos,\ + __VA_ARGS__); \ + } while (0) + +#define trace_performance_since(start, ...) \ + do { \ + if (trace_pass_fl(&trace_perf_key)) \ + trace_performance_fl(TRACE_CONTEXT, __LINE__, \ + getnanotime() - (start), \ + __VA_ARGS__); \ + } while (0) /* backend functions, use non-*fl macros instead */ __attribute__((format (printf, 4, 5))) @@ -108,6 +129,10 @@ extern void trace_strbuf_fl(const char *file, int line, struct trace_key *key, __attribute__((format (printf, 4, 5))) extern void trace_performance_fl(const char *file, int line, uint64_t nanos, const char *fmt, ...); +static inline int trace_pass_fl(struct trace_key *key) +{ + return key->fd || !key->initialized; +} #endif /* HAVE_VARIADIC_MACROS */ |