ls-tree: use strbuf_add_uint()
Speed up printing of objectsize values by using the specialized function
strbuf_add_uint() as well as strbuf_insert() for padding instead of the
general-purpose function strbuf_addf(). Here are the numbers I get when
listing objects in the Linux kernel repo:
Benchmark 1: ./git_main -C ../linux ls-tree -r --format='%(objectsize)' HEAD
Time (mean ± σ): 294.4 ms ± 0.4 ms [User: 231.5 ms, System: 59.4 ms]
Range (min … max): 293.9 ms … 295.0 ms 10 runs
Benchmark 2: ./git -C ../linux ls-tree -r --format='%(objectsize)' HEAD
Time (mean ± σ): 291.2 ms ± 0.4 ms [User: 227.9 ms, System: 62.1 ms]
Range (min … max): 290.6 ms … 292.0 ms 10 runs
Benchmark 3: ./git_main -C ../linux ls-tree -r --format='%(objectsize:padded)' HEAD
Time (mean ± σ): 295.3 ms ± 0.6 ms [User: 232.0 ms, System: 59.6 ms]
Range (min … max): 294.3 ms … 296.3 ms 10 runs
Benchmark 4: ./git -C ../linux ls-tree -r --format='%(objectsize:padded)' HEAD
Time (mean ± σ): 291.9 ms ± 0.4 ms [User: 228.5 ms, System: 61.5 ms]
Range (min … max): 291.2 ms … 292.3 ms 10 runs
Summary
./git -C ../linux ls-tree -r --format='%(objectsize)' HEAD ran
1.00 ± 0.00 times faster than ./git -C ../linux ls-tree -r --format='%(objectsize:padded)' HEAD
1.01 ± 0.00 times faster than ./git_main -C ../linux ls-tree -r --format='%(objectsize)' HEAD
1.01 ± 0.00 times faster than ./git_main -C ../linux ls-tree -r --format='%(objectsize:padded)' HEAD
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
parent
f001b4ab39
commit
4f87748b0d
|
|
@ -26,20 +26,23 @@ static const char * const ls_tree_usage[] = {
|
|||
static void expand_objectsize(struct strbuf *line, const struct object_id *oid,
|
||||
const enum object_type type, unsigned int padded)
|
||||
{
|
||||
static const char padding[] = " ";
|
||||
size_t min_len = padded ? strlen(padding) : 0;
|
||||
size_t orig_len = line->len;
|
||||
size_t len;
|
||||
|
||||
if (type == OBJ_BLOB) {
|
||||
unsigned long size;
|
||||
if (odb_read_object_info(the_repository->objects, oid, &size) < 0)
|
||||
die(_("could not get object info about '%s'"),
|
||||
oid_to_hex(oid));
|
||||
if (padded)
|
||||
strbuf_addf(line, "%7"PRIuMAX, (uintmax_t)size);
|
||||
else
|
||||
strbuf_addf(line, "%"PRIuMAX, (uintmax_t)size);
|
||||
} else if (padded) {
|
||||
strbuf_addf(line, "%7s", "-");
|
||||
strbuf_add_uint(line, size);
|
||||
} else {
|
||||
strbuf_addstr(line, "-");
|
||||
}
|
||||
len = line->len - orig_len;
|
||||
if (len < min_len)
|
||||
strbuf_insert(line, orig_len, padding, min_len - len);
|
||||
}
|
||||
|
||||
struct ls_tree_options {
|
||||
|
|
|
|||
Loading…
Reference in New Issue