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
9
dir.c
9
dir.c
@ -2263,10 +2263,13 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
|
||||
const char *path, int len, const struct pathspec *pathspec)
|
||||
{
|
||||
struct untracked_cache_dir *untracked;
|
||||
uint64_t start = getnanotime();
|
||||
|
||||
if (has_symlink_leading_path(path, len))
|
||||
trace_performance_enter();
|
||||
|
||||
if (has_symlink_leading_path(path, len)) {
|
||||
trace_performance_leave("read directory %.*s", len, path);
|
||||
return dir->nr;
|
||||
}
|
||||
|
||||
untracked = validate_untracked_cache(dir, len, pathspec);
|
||||
if (!untracked)
|
||||
@ -2302,7 +2305,7 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
|
||||
dir->nr = i;
|
||||
}
|
||||
|
||||
trace_performance_since(start, "read directory %.*s", len, path);
|
||||
trace_performance_leave("read directory %.*s", len, path);
|
||||
if (dir->untracked) {
|
||||
static int force_untracked_cache = -1;
|
||||
static struct trace_key trace_untracked_stats = TRACE_KEY_INIT(UNTRACKED_STATS);
|
||||
|
Reference in New Issue
Block a user