Browse Source

pack-object: slightly more efficient

Avoid creating a delta index for objects with maximum depth since they
are not going to be used as delta base anyway.  This also reduce peak
memory usage slightly as the current object's delta index is not useful
until the next object in the loop is considered for deltification. This
saves a bit more than 1% on CPU usage.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Nicolas Pitre 19 years ago committed by Junio C Hamano
parent
commit
ff45715ce5
  1. 2
      delta.h
  2. 15
      pack-objects.c

2
delta.h

@ -18,6 +18,8 @@ create_delta_index(const void *buf, unsigned long bufsize); @@ -18,6 +18,8 @@ create_delta_index(const void *buf, unsigned long bufsize);

/*
* free_delta_index: free the index created by create_delta_index()
*
* Given pointer must be what create_delta_index() returned, or NULL.
*/
extern void free_delta_index(struct delta_index *index);


15
pack-objects.c

@ -1105,17 +1105,14 @@ static void find_deltas(struct object_entry **list, int window, int depth) @@ -1105,17 +1105,14 @@ static void find_deltas(struct object_entry **list, int window, int depth)

if (entry->size < 50)
continue;
if (n->index)
free_delta_index(n->index);
free_delta_index(n->index);
n->index = NULL;
free(n->data);
n->entry = entry;
n->data = read_sha1_file(entry->sha1, type, &size);
if (size != entry->size)
die("object %s inconsistent object length (%lu vs %lu)",
sha1_to_hex(entry->sha1), size, entry->size);
n->index = create_delta_index(n->data, size);
if (!n->index)
die("out of memory");

j = window;
while (--j > 0) {
@ -1135,6 +1132,11 @@ static void find_deltas(struct object_entry **list, int window, int depth) @@ -1135,6 +1132,11 @@ static void find_deltas(struct object_entry **list, int window, int depth)
*/
if (entry->delta && depth <= entry->depth)
continue;

n->index = create_delta_index(n->data, size);
if (!n->index)
die("out of memory");

idx++;
if (idx >= window)
idx = 0;
@ -1144,8 +1146,7 @@ static void find_deltas(struct object_entry **list, int window, int depth) @@ -1144,8 +1146,7 @@ static void find_deltas(struct object_entry **list, int window, int depth)
fputc('\n', stderr);

for (i = 0; i < window; ++i) {
if (array[i].index)
free_delta_index(array[i].index);
free_delta_index(array[i].index);
free(array[i].data);
}
free(array);

Loading…
Cancel
Save