summaryrefslogtreecommitdiff
path: root/xdiff-interface.h
diff options
context:
space:
mode:
authorBrian Downing <bdowning@lavos.net>2008-08-14 05:36:51 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-08-14 06:10:23 (GMT)
commitb463776086a12c587f6d91c0347641fb6f7ddd72 (patch)
treeba25e4234a81ed9d972accfe92276a407c46225b /xdiff-interface.h
parentc99db9d292c5f63c83ae2b441a67121d76553413 (diff)
downloadgit-b463776086a12c587f6d91c0347641fb6f7ddd72.zip
git-b463776086a12c587f6d91c0347641fb6f7ddd72.tar.gz
git-b463776086a12c587f6d91c0347641fb6f7ddd72.tar.bz2
Use strbuf for struct xdiff_emit_state's remainder
Continually xreallocing and freeing the remainder member of struct xdiff_emit_state was a noticeable performance hit. Use a strbuf instead. This yields a decent performance improvement on "git blame" on certain repositories. For example, before this commit: $ 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 With this commit: $ 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 Signed-off-by: Brian Downing <bdowning@lavos.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'xdiff-interface.h')
-rw-r--r--xdiff-interface.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/xdiff-interface.h b/xdiff-interface.h
index 6f3b361..f6a1ec2 100644
--- a/xdiff-interface.h
+++ b/xdiff-interface.h
@@ -2,6 +2,7 @@
#define XDIFF_INTERFACE_H
#include "xdiff/xdiff.h"
+#include "strbuf.h"
struct xdiff_emit_state;
@@ -9,8 +10,7 @@ typedef void (*xdiff_emit_consume_fn)(void *, char *, unsigned long);
struct xdiff_emit_state {
xdiff_emit_consume_fn consume;
- char *remainder;
- unsigned long remainder_size;
+ struct strbuf remainder;
};
int xdi_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xdemitconf_t const *xecfg, xdemitcb_t *ecb);