mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
trace.h: support nested performance tracing
Performance measurements are listed right now as a flat list, which is fine when we measure big blocks. But when we start adding more and more measurements, some of them could be just part of a bigger measurement and a flat list gives a wrong impression that they are executed at the same level instead of nested. Add trace_performance_enter() and trace_performance_leave() to allow indent these nested measurements. For now it does not help much because the only nested thing is (lazy) name hash initialization (e.g. called in diff-index from "git status"). This will help more because I'm going to add some more tracing that's actually nested. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
fa03cdc39b
commit
c46c406ae1
15
trace.h
15
trace.h
@@ -23,6 +23,7 @@ extern void trace_disable(struct trace_key *key);
|
||||
extern uint64_t getnanotime(void);
|
||||
extern void trace_command_performance(const char **argv);
|
||||
extern void trace_verbatim(struct trace_key *key, const void *buf, unsigned len);
|
||||
uint64_t trace_performance_enter(void);
|
||||
|
||||
#ifndef HAVE_VARIADIC_MACROS
|
||||
|
||||
@@ -45,6 +46,9 @@ extern void trace_performance(uint64_t nanos, const char *format, ...);
|
||||
__attribute__((format (printf, 2, 3)))
|
||||
extern void trace_performance_since(uint64_t start, const char *format, ...);
|
||||
|
||||
__attribute__((format (printf, 1, 2)))
|
||||
void trace_performance_leave(const char *format, ...);
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
@@ -118,6 +122,14 @@ extern void trace_performance_since(uint64_t start, const char *format, ...);
|
||||
__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define trace_performance_leave(...) \
|
||||
do { \
|
||||
if (trace_pass_fl(&trace_perf_key)) \
|
||||
trace_performance_leave_fl(TRACE_CONTEXT, __LINE__, \
|
||||
getnanotime(), \
|
||||
__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
/* backend functions, use non-*fl macros instead */
|
||||
__attribute__((format (printf, 4, 5)))
|
||||
extern void trace_printf_key_fl(const char *file, int line, struct trace_key *key,
|
||||
@@ -130,6 +142,9 @@ 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, ...);
|
||||
__attribute__((format (printf, 4, 5)))
|
||||
extern void trace_performance_leave_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;
|
||||
|
||||
Reference in New Issue
Block a user