]> git.ipfire.org Git - thirdparty/git.git/commitdiff
dir: convert trace calls to trace2 equivalents
authorElijah Newren <newren@gmail.com>
Wed, 12 May 2021 17:28:14 +0000 (17:28 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 12 May 2021 23:45:02 +0000 (08:45 +0900)
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c
t/t7063-status-untracked-cache.sh
t/t7519-status-fsmonitor.sh

diff --git a/dir.c b/dir.c
index 19c2fa239b3d92c4e9cc44dfcdca72240b9dc4a0..b8dfe2e413d0e9660c487080bf7b498f8c56bc6b 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -2751,15 +2751,46 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d
        return root;
 }
 
+static void emit_traversal_statistics(struct dir_struct *dir,
+                                     struct repository *repo,
+                                     const char *path,
+                                     int path_len)
+{
+       if (!trace2_is_enabled())
+               return;
+
+       if (!path_len) {
+               trace2_data_string("read_directory", repo, "path", "");
+       } else {
+               struct strbuf tmp = STRBUF_INIT;
+               strbuf_add(&tmp, path, path_len);
+               trace2_data_string("read_directory", repo, "path", tmp.buf);
+               strbuf_release(&tmp);
+       }
+
+       if (!dir->untracked)
+               return;
+       trace2_data_intmax("read_directory", repo,
+                          "node-creation", dir->untracked->dir_created);
+       trace2_data_intmax("read_directory", repo,
+                          "gitignore-invalidation",
+                          dir->untracked->gitignore_invalidated);
+       trace2_data_intmax("read_directory", repo,
+                          "directory-invalidation",
+                          dir->untracked->dir_invalidated);
+       trace2_data_intmax("read_directory", repo,
+                          "opendir", dir->untracked->dir_opened);
+}
+
 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;
 
-       trace_performance_enter();
+       trace2_region_enter("dir", "read_directory", istate->repo);
 
        if (has_symlink_leading_path(path, len)) {
-               trace_performance_leave("read directory %.*s", len, path);
+               trace2_region_leave("dir", "read_directory", istate->repo);
                return dir->nr;
        }
 
@@ -2775,23 +2806,15 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
        QSORT(dir->entries, dir->nr, cmp_dir_entry);
        QSORT(dir->ignored, dir->ignored_nr, cmp_dir_entry);
 
-       trace_performance_leave("read directory %.*s", len, path);
+       emit_traversal_statistics(dir, istate->repo, path, len);
+
+       trace2_region_leave("dir", "read_directory", istate->repo);
        if (dir->untracked) {
                static int force_untracked_cache = -1;
-               static struct trace_key trace_untracked_stats = TRACE_KEY_INIT(UNTRACKED_STATS);
 
                if (force_untracked_cache < 0)
                        force_untracked_cache =
                                git_env_bool("GIT_FORCE_UNTRACKED_CACHE", 0);
-               trace_printf_key(&trace_untracked_stats,
-                                "node creation: %u\n"
-                                "gitignore invalidation: %u\n"
-                                "directory invalidation: %u\n"
-                                "opendir: %u\n",
-                                dir->untracked->dir_created,
-                                dir->untracked->gitignore_invalidated,
-                                dir->untracked->dir_invalidated,
-                                dir->untracked->dir_opened);
                if (force_untracked_cache &&
                        dir->untracked == istate->untracked &&
                    (dir->untracked->dir_opened ||
@@ -2802,6 +2825,7 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
                        FREE_AND_NULL(dir->untracked);
                }
        }
+
        return dir->nr;
 }
 
index accefde72fb1bd518b2fcd7caf4d8c4921180bdc..9710d33b3cd60f0b5bc76d7e197152250f9dfab4 100755 (executable)
@@ -57,6 +57,19 @@ iuc () {
        return $ret
 }
 
+get_relevant_traces () {
+       # From the GIT_TRACE2_PERF data of the form
+       #    $TIME $FILE:$LINE | d0 | main | data | r1 | ? | ? | read_directo | $RELEVANT_STAT
+       # extract the $RELEVANT_STAT fields.  We don't care about region_enter
+       # or region_leave, or stats for things outside read_directory.
+       INPUT_FILE=$1
+       OUTPUT_FILE=$2
+       grep data.*read_directo $INPUT_FILE |
+           cut -d "|" -f 9 \
+           >"$OUTPUT_FILE"
+}
+
+
 test_lazy_prereq UNTRACKED_CACHE '
        { git update-index --test-untracked-cache; ret=$?; } &&
        test $ret -ne 1
@@ -129,19 +142,21 @@ EOF
 
 test_expect_success 'status first time (empty cache)' '
        avoid_racy &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 3
-gitignore invalidation: 1
-directory invalidation: 0
-opendir: 4
+ ....path:
+ ....node-creation:3
+ ....gitignore-invalidation:1
+ ....directory-invalidation:0
+ ....opendir:4
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache after first status' '
@@ -151,19 +166,21 @@ test_expect_success 'untracked cache after first status' '
 
 test_expect_success 'status second time (fully populated cache)' '
        avoid_racy &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 0
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:0
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache after second status' '
@@ -174,8 +191,8 @@ test_expect_success 'untracked cache after second status' '
 test_expect_success 'modify in root directory, one dir invalidation' '
        avoid_racy &&
        : >four &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -189,13 +206,15 @@ A  two
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 1
-opendir: 1
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:1
+ ....opendir:1
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 
 '
 
@@ -223,8 +242,8 @@ EOF
 test_expect_success 'new .gitignore invalidates recursively' '
        avoid_racy &&
        echo four >.gitignore &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -238,13 +257,15 @@ A  two
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 1
-directory invalidation: 1
-opendir: 4
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:1
+ ....directory-invalidation:1
+ ....opendir:4
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 
 '
 
@@ -272,8 +293,8 @@ EOF
 test_expect_success 'new info/exclude invalidates everything' '
        avoid_racy &&
        echo three >>.git/info/exclude &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -285,13 +306,15 @@ A  two
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 1
-directory invalidation: 0
-opendir: 4
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:1
+ ....directory-invalidation:0
+ ....opendir:4
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump' '
@@ -330,8 +353,8 @@ EOF
 '
 
 test_expect_success 'status after the move' '
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -343,13 +366,15 @@ A  one
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 1
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:1
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump' '
@@ -389,8 +414,8 @@ EOF
 '
 
 test_expect_success 'status after the move' '
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -402,13 +427,15 @@ A  two
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 1
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:1
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump' '
@@ -438,8 +465,8 @@ test_expect_success 'set up for sparse checkout testing' '
 '
 
 test_expect_success 'status after commit' '
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -448,13 +475,15 @@ test_expect_success 'status after commit' '
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 2
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:2
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache correct after commit' '
@@ -496,9 +525,9 @@ test_expect_success 'create/modify files, some of which are gitignored' '
 '
 
 test_expect_success 'test sparse status with untracked cache' '
-       : >../trace &&
+       : >../trace.output &&
        avoid_racy &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -509,13 +538,15 @@ test_expect_success 'test sparse status with untracked cache' '
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../status.actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 1
-directory invalidation: 2
-opendir: 2
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:1
+ ....directory-invalidation:2
+ ....opendir:2
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache correct after status' '
@@ -539,8 +570,8 @@ EOF
 
 test_expect_success 'test sparse status again with untracked cache' '
        avoid_racy &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -551,13 +582,15 @@ test_expect_success 'test sparse status again with untracked cache' '
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../status.actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 0
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:0
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'set up for test of subdir and sparse checkouts' '
@@ -568,8 +601,8 @@ test_expect_success 'set up for test of subdir and sparse checkouts' '
 
 test_expect_success 'test sparse status with untracked cache and subdir' '
        avoid_racy &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
        iuc status --porcelain >../status.iuc &&
        cat >../status.expect <<EOF &&
@@ -581,13 +614,15 @@ test_expect_success 'test sparse status with untracked cache and subdir' '
 EOF
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../status.actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 2
-gitignore invalidation: 0
-directory invalidation: 1
-opendir: 3
+ ....path:
+ ....node-creation:2
+ ....gitignore-invalidation:0
+ ....directory-invalidation:1
+ ....opendir:3
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump (sparse/subdirs)' '
@@ -616,19 +651,21 @@ EOF
 
 test_expect_success 'test sparse status again with untracked cache and subdir' '
        avoid_racy &&
-       : >../trace &&
-       GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+       : >../trace.output &&
+       GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
        iuc status --porcelain >../status.iuc &&
        test_cmp ../status.expect ../status.iuc &&
        test_cmp ../status.expect ../status.actual &&
+       get_relevant_traces ../trace.output ../trace.relevant &&
        cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 0
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:0
 EOF
-       test_cmp ../trace.expect ../trace
+       test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'move entry in subdir from untracked to cached' '
index 45d025f96010da185f4af33b02ee60004236b1ea..637391c6ce460822e5d78e935fe178fd7982529c 100755 (executable)
@@ -334,7 +334,7 @@ test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating UNTR'
                git config core.fsmonitor .git/hooks/fsmonitor-test &&
                git update-index --untracked-cache &&
                git update-index --fsmonitor &&
-               GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-before" \
+               GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-before" \
                git status &&
                test-tool dump-untracked-cache >../before
        ) &&
@@ -346,12 +346,12 @@ test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating UNTR'
        EOF
        (
                cd dot-git &&
-               GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-after" \
+               GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-after" \
                git status &&
                test-tool dump-untracked-cache >../after
        ) &&
-       grep "directory invalidation" trace-before >>before &&
-       grep "directory invalidation" trace-after >>after &&
+       grep "directory-invalidation" trace-before | cut -d"|" -f 9 >>before &&
+       grep "directory-invalidation" trace-after  | cut -d"|" -f 9 >>after &&
        # UNTR extension unchanged, dir invalidation count unchanged
        test_cmp before after
 '