This patch series contains more git blame speed improvements. It's really in two parts; patches 1-2 are the first improvement, and patches 3-5 are the second (which depend on the first, at least textually.) There are some things I'm not entirely happy about in here, but overall it's not too bad for a first effort. I'm interested in hearing what people have to say about it, especially since I'm adding new interfaces to the xdiff core for some of this. Performance summary for my (proprietary, alas) test case: :; time git-blame -M -C -C -p --incremental server.c >/dev/null Before (master): 79.62user 0.10system 1:19.81elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+41189minor)pagefaults 0swaps After: 29.68user 0.22system 0:29.98elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+37897minor)pagefaults 0swaps I have an additional patch (not included here) that caches the actual entry lines from the blame, but the performance gain was not exciting (the entries passed as the second file to the compare_buffer() call in find_copy_in_blob() are generally quite small), and it results in more page faults and a fair amount more code: :; time git-blame -M -C -C -p --incremental server.c >/dev/null 28.82user 0.07system 0:28.93elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+40268minor)pagefaults 0swaps [PATCH 1/5] Allow alternate "low-level" emit function from xdl_diff [PATCH 2/5] Bypass textual patch generation and parsing in git blame [PATCH 3/5] Always initialize xpparam_t to 0 [PATCH 4/5] Allow xdiff machinery to cache hash results for a file [PATCH 5/5] Use xdiff caching to improve git blame performance builtin-blame.c | 103 +++++++++++++++++++++-------------------------------- builtin-rerere.c | 1 + combine-diff.c | 1 + diff.c | 5 +++ merge-file.c | 1 + xdiff/xdiff.h | 12 ++++++ xdiff/xdiffi.c | 4 ++- xdiff/xemit.c | 3 +- xdiff/xemit.h | 3 ++ xdiff/xprepare.c | 59 +++++++++++++++++++++++++++---- xdiff/xtypes.h | 1 + 11 files changed, 121 insertions(+), 72 deletions(-) -bcd -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html