summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b492bbd)
raw | patch | inline | side by side (parent: b492bbd)
author | Brian Downing <bdowning@lavos.net> | |
Thu, 12 Jul 2007 12:55:47 +0000 (07:55 -0500) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Thu, 12 Jul 2007 21:32:34 +0000 (14:32 -0700) |
Add a new try_delta heuristic. Don't bother trying to make a delta if
the target object size is much smaller (currently 1/32) than the source,
as it's very likely not going to get a match. Even if it does, you will
have to read at least 32x the size of the new file to reassemble it,
which isn't such a good deal. This leads to a considerable performance
improvement when deltifying a mix of small and large files with a very
large window, because you don't have to wait for the large files to
percolate out of the window before things start going fast again.
Signed-off-by: Brian Downing <bdowning@lavos.net>
Acked-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
the target object size is much smaller (currently 1/32) than the source,
as it's very likely not going to get a match. Even if it does, you will
have to read at least 32x the size of the new file to reassemble it,
which isn't such a good deal. This leads to a considerable performance
improvement when deltifying a mix of small and large files with a very
large window, because you don't have to wait for the large files to
percolate out of the window before things start going fast again.
Signed-off-by: Brian Downing <bdowning@lavos.net>
Acked-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-pack-objects.c | patch | blob | history |
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index b4f3e7c2ebf4f50172c7d8dfa068de7e81fdc9b4..54f304c115065973415d539bb39087bbff9ee999 100644 (file)
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
sizediff = src_size < trg_size ? trg_size - src_size : 0;
if (sizediff >= max_size)
return 0;
+ if (trg_size < src_size / 32)
+ return 0;
/* Load data if not already done */
if (!trg->data) {