* [PATCH 0/2] Speed up xdiff_outf, and therefore git blame
@ 2008-08-13 7:04 Brian Downing
0 siblings, 0 replies; only message in thread
From: Brian Downing @ 2008-08-13 7:04 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano
When using git gui blame on some files in one of my repositories, and
noticing some rather depressing performance, I decided to look for some
low-hanging fruit to optimize.
I found that a lot of the time is spent in xdiff_outf continually
xreallocing and freeing memory for a string. I decided to replace that
with a strbuf. Unfortunately this now means that there are resources
that need to be freed after using xdiff_outf, so a new interface for
doing that needed to be created first.
The performance difference on my repository is not amazing, but quite
noticeable. Before:
:; time git blame -M -C -C -p --incremental server.c >/dev/null
101.52user 0.17system 1:41.73elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+39561minor)pagefaults 0swaps
After:
:; time git blame -M -C -C -p --incremental server.c >/dev/null
80.38user 0.30system 1:20.81elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+50979minor)pagefaults 0swaps
Obviously, it should improve other uses of xdiff_outf as well, though I
doubt many things hit it as hard as blame does.
[PATCH 1/2] Make xdiff_outf_{init,release} interface
[PATCH 2/2] Use strbuf for struct xdiff_emit_state's remainder
builtin-blame.c | 4 ++--
combine-diff.c | 4 ++--
diff.c | 20 ++++++++++----------
xdiff-interface.c | 44 ++++++++++++++++++++++----------------------
xdiff-interface.h | 6 ++++--
5 files changed, 40 insertions(+), 38 deletions(-)
-bcd
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-08-13 7:05 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-13 7:04 [PATCH 0/2] Speed up xdiff_outf, and therefore git blame Brian Downing
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.