summaryrefslogtreecommitdiff
path: root/trace.h
diff options
context:
space:
mode:
authorGennady Kupava <gkupava@bloomberg.net>2017-11-26 20:11:19 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-12-06 17:43:02 (GMT)
commit8eeb25c6795af71400537e8ab064407d7998e0e2 (patch)
tree6770696f980fedd713b8235ea3d96a868663f8fa /trace.h
parent406102a731145d39c497e384857ac9f9d2bdccb2 (diff)
downloadgit-8eeb25c6795af71400537e8ab064407d7998e0e2.zip
git-8eeb25c6795af71400537e8ab064407d7998e0e2.tar.gz
git-8eeb25c6795af71400537e8ab064407d7998e0e2.tar.bz2
trace: improve performance while category is disabled
Move just enough code from trace.c into trace.h header so all code necessary to determine that trace is disabled could be inlined to calling functions. Then perform the check if the trace key is enabled sooner in call chain. Signed-off-by: Gennady Kupava <gkupava@bloomberg.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'trace.h')
-rw-r--r--trace.h59
1 files changed, 41 insertions, 18 deletions
diff --git a/trace.h b/trace.h
index 24b32f8..88055ab 100644
--- a/trace.h
+++ b/trace.h
@@ -14,6 +14,7 @@ struct trace_key {
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);
@@ -79,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__, &trace_default_key, __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)))
@@ -110,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 */