]> git.ipfire.org Git - thirdparty/git.git/commitdiff
commit-reach: add trace2 instrumentation to paint_down_to_common()
authorKristofer Karlsson <krka@spotify.com>
Wed, 24 Jun 2026 12:14:10 +0000 (12:14 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2026 16:58:50 +0000 (09:58 -0700)
Add a step counter and trace2_data_intmax() call so that the number
of commits visited during the paint walk is observable via
GIT_TRACE2_PERF. This provides a way to measure the impact of
future optimizations without relying on wall-clock benchmarks alone.

Signed-off-by: Kristofer Karlsson <krka@spotify.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit-reach.c
t/t6600-test-reach.sh

index a9483759e06c59a301db670378ee6c41c466ad1e..f6a438550b790279011463c169c32fbd269da052 100644 (file)
@@ -11,6 +11,7 @@
 #include "tag.h"
 #include "commit-reach.h"
 #include "ewah/ewok.h"
+#include "trace2.h"
 
 /* Remember to update object flag allocation in object.h */
 #define PARENT1                (1u<<16)
@@ -112,6 +113,7 @@ static int paint_down_to_common(struct repository *r,
                { compare_commits_by_gen_then_commit_date }
        };
        int i;
+       int steps = 0;
        timestamp_t last_gen = GENERATION_NUMBER_INFINITY;
        struct commit_list **tail = result;
 
@@ -135,6 +137,7 @@ static int paint_down_to_common(struct repository *r,
                struct commit_list *parents;
                int flags;
                timestamp_t generation = commit_graph_generation(commit);
+               steps++;
 
                if (min_generation && generation > last_gen)
                        BUG("bad generation skip %"PRItime" > %"PRItime" at %s",
@@ -190,6 +193,8 @@ static int paint_down_to_common(struct repository *r,
        }
 
        clear_nonstale_queue(&queue);
+       trace2_data_intmax("paint_down_to_common", r,
+                          "steps", steps);
        commit_list_sort_by_date(result);
        return 0;
 }
index 4b771b4c58748a7751419dbea44eda6e3666a9f4..c1109fb42f94cddf71faace6c7f75ccf0efc1958 100755 (executable)
@@ -319,6 +319,27 @@ test_expect_success 'get_merge_bases_many:mixed-finite-infinity' '
        test_all_modes get_merge_bases_many
 '
 
+test_expect_success 'merge-base --all commit-walk steps' '
+       test_when_finished rm -rf .git/objects/info/commit-graph \
+               .git/objects/info/commit-graphs &&
+       rm -rf .git/objects/info/commit-graph \
+               .git/objects/info/commit-graphs &&
+
+       GIT_TRACE2_EVENT="$(pwd)/trace-none.txt" \
+               git merge-base --all commit-9-9 commit-9-1 >actual &&
+       test_trace2_data paint_down_to_common steps 81 <trace-none.txt &&
+
+       cp commit-graph-full .git/objects/info/commit-graph &&
+       GIT_TRACE2_EVENT="$(pwd)/trace-full.txt" \
+               git merge-base --all commit-9-9 commit-9-1 >actual &&
+       test_trace2_data paint_down_to_common steps 80 <trace-full.txt &&
+
+       cp commit-graph-half .git/objects/info/commit-graph &&
+       GIT_TRACE2_EVENT="$(pwd)/trace-half.txt" \
+               git merge-base --all commit-9-9 commit-9-1 >actual &&
+       test_trace2_data paint_down_to_common steps 81 <trace-half.txt
+'
+
 test_expect_success 'reduce_heads' '
        cat >input <<-\EOF &&
        X:commit-1-10