blame: remove unnecessary use of get_commit_info()
When `git blame --color-by-age`, the determine_line_heat() is called to
select how to color the output based on the commit's author date. It
uses the get_commit_info() to parse the information into a `commit_info`
structure, however, this is actually unnecessary because the
determine_line_heat() caller also does the same.
Instead, let's change the determine_line_heat() to take a `commit_info`
structure and remove the internal call to get_commit_info() thus
cleaning up and optimizing the code path.
Enabling Git's trace2 API in order to record the execution time for
every call to 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 `git blame` for "kernel/fork.c" in linux.git 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 change = 16ms
Signed-off-by: Rafael Silva <rafaeloliveira.cs@gmail.com>
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
parent
59ec22464f
commit
8e16effe97
|
|
@ -425,13 +425,11 @@ static void setup_default_color_by_age(void)
|
||||||
parse_color_fields("blue,12 month ago,white,1 month ago,red");
|
parse_color_fields("blue,12 month ago,white,1 month ago,red");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void determine_line_heat(struct blame_entry *ent, const char **dest_color)
|
static void determine_line_heat(struct commit_info *ci, const char **dest_color)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct commit_info ci;
|
|
||||||
get_commit_info(ent->suspect->commit, &ci, 1);
|
|
||||||
|
|
||||||
while (i < colorfield_nr && ci.author_time > colorfield[i].hop)
|
while (i < colorfield_nr && ci->author_time > colorfield[i].hop)
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
*dest_color = colorfield[i].col;
|
*dest_color = colorfield[i].col;
|
||||||
|
|
@ -453,7 +451,7 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int
|
||||||
cp = blame_nth_line(sb, ent->lno);
|
cp = blame_nth_line(sb, ent->lno);
|
||||||
|
|
||||||
if (opt & OUTPUT_SHOW_AGE_WITH_COLOR) {
|
if (opt & OUTPUT_SHOW_AGE_WITH_COLOR) {
|
||||||
determine_line_heat(ent, &default_color);
|
determine_line_heat(&ci, &default_color);
|
||||||
color = default_color;
|
color = default_color;
|
||||||
reset = GIT_COLOR_RESET;
|
reset = GIT_COLOR_RESET;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue