From: Kristofer Karlsson Date: Wed, 24 Jun 2026 12:14:10 +0000 (+0000) Subject: commit-reach: add trace2 instrumentation to paint_down_to_common() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf1ce6e023c92a17ae2c8d4a8028ebed78f870c7;p=thirdparty%2Fgit.git commit-reach: add trace2 instrumentation to paint_down_to_common() 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 Signed-off-by: Junio C Hamano --- diff --git a/commit-reach.c b/commit-reach.c index a9483759e0..f6a438550b 100644 --- a/commit-reach.c +++ b/commit-reach.c @@ -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; } diff --git a/t/t6600-test-reach.sh b/t/t6600-test-reach.sh index 4b771b4c58..c1109fb42f 100755 --- a/t/t6600-test-reach.sh +++ b/t/t6600-test-reach.sh @@ -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 actual && + test_trace2_data paint_down_to_common steps 80 actual && + test_trace2_data paint_down_to_common steps 81 input <<-\EOF && X:commit-1-10