This patch is a code cleanup and consequently a micro optimization in determine_heat_line(). When `blame`ing with --color-by-age, the determine_line_heat() calls the get_commit_info() to parse the commit's information. However, it turns out this is actually unnecessary because its caller also does the same. We can instead, pass the already parsed `commit_info` and remove the internal call to get_commit_info(). The performance optimization made by this patch is relatively small as get_commit_info() doesn't perform any heavy-load operations. So, the performance improvements is not that exciting, not at least until you enter the ms/μs realm. Nevertheless I thought the code cleanup is still valid and the optimization is a bonus. ... digging into the the performance improvements, for those who are curious ... Running Git PERF suite in linux.git, I've got a subtle performance improvement for some runs: # git.328c109303 - compiled git from commit 328c109303 # git.blame-patched - compiled git from commit 328c109303 + this patch Test git.328c109303 git.blame-patched ------------------------------------------------------------------------------------- blame --color-by-age kernel/fork.c 1.96(1.81+0.15) 1.95(1.80+0.14) -0.5% blame --color-by-age kernel/sys.c 1.67(1.53+0.13) 1.66(1.52+0.14) -0.6% blame --color-by-age mm/slab.c 2.16(2.00+0.16) 2.15(1.99+0.15) -0.5% blame --color-by-age lib/packing.c 0.20(0.14+0.05) 0.20(0.14+0.05) +0.0% blame --color-by-age drivers/cdrom/cdrom.c 1.62(1.46+0.15) 1.62(1.46+0.15) +0.0% blame --color-by-age crypto/crypto_engine.c 0.37(0.29+0.06) 0.36(0.28+0.06) -2.7% blame --color-by-age net/ipv4/ip_forward.c 1.49(1.35+0.13) 1.48(1.34+0.13) -0.7% To dig a little deeper, I enabled the Git's trace2 API to record every call to the determine_line_heat() function: ... + trace2_region_enter("blame", "determine_line_heat", the_repository); determine_line_heat(ent, &default_color); + trace2_region_enter("blame", "determine_line_heat", the_repository); ... Then, running `blame` for "kernel/fork.c` and _summing_ all the execution time for every call (around 1.3k calls) resulted in 2.6x faster execution (best out 3): git built from 328c109303 (The eighth batch, 2021-02-12) = 42ms git built from 328c109303 + this patch = 16ms Of course, this is on the milliseconds :). Lastly, to get a better picture of the performance change, I computed all the determine_line_heat()'s execution time, for all 3 calls, into a distribution graph. The execution time is converted to microseconds for ease of understanding: # git built from 328c109303 (The eighth batch, 2021-02-12) Time in μs 0.0 ~ 9.0 | Time in μs 10.0 ~ 19.0 | * Time in μs 20.0 ~ 29.0 | ***************** Time in μs 30.0 ~ 39.0 | ***************** Time in μs 40.0 ~ 49.0 | ** Time in μs 50.0 ~ 59.0 | * Time in μs 60.0 ~ 69.0 | * Time in μs 70.0 ~ 79.0 | * Time in μs 80.0 ~ 89.0 | * Time in μs 90.0 ~ 99.0 | * Time in μs 100.0 ~ 109.0 | * Time in μs 110.0 ~ 119.0 | * Time in μs 120.0 ~ 129.0 | Time in μs 130.0 ~ 139.0 | * [N: 3915 | Median: 30.0 | Min: 19.0 | Max: 137.0] # git built from 328c109303 + this patch Time in μs 0.0 ~ 9.0 | Time in μs 10.0 ~ 19.0 | ************************************* Time in μs 20.0 ~ 29.0 | * Time in μs 30.0 ~ 39.0 | * Time in μs 40.0 ~ 49.0 | * Time in μs 50.0 ~ 59.0 | * Time in μs 60.0 ~ 69.0 | * Time in μs 70.0 ~ 79.0 | * Time in μs 80.0 ~ 89.0 | * Time in μs 90.0 ~ 99.0 | ... [ zero's omitted ] ... Time in μs 150.0 ~ 159.0 | Time in μs 160.0 ~ 169.0 | * [N: 3915 | Median: 12.0 | Min: 10.0 | Max: 167.0] Note: A "*" represent hundreds counter. One "*" is used for any count between 1 and 99. (i.e: 23 = "*", 99 = "*", 100 = "**", 199 = "**", 200 = "***", etc). With the changes introduced by this patch, the determine_line_heat() mostly finishes its execution between 10μs and 19μs compared with the current implementation that mostly finished around 20μs and 39μs. Rafael Silva (1): blame: remove unnecessary use of get_commit_info() builtin/blame.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) -- 2.30.1.842.gf6373b1729