mirror of
https://github.com/git/git.git
synced 2026-01-10 01:56:42 +00:00
reftable/record: reuse refname when copying
Do the same optimization as in the preceding commit, but this time for
`reftable_record_copy()`. While not as noticeable, it still results in a
small speedup when iterating over 1 million refs:
Benchmark 1: show-ref: single matching ref (revision = HEAD~)
Time (mean ± σ): 114.0 ms ± 3.8 ms [User: 111.1 ms, System: 2.7 ms]
Range (min … max): 110.9 ms … 144.3 ms 1000 runs
Benchmark 2: show-ref: single matching ref (revision = HEAD)
Time (mean ± σ): 112.5 ms ± 3.7 ms [User: 109.5 ms, System: 2.8 ms]
Range (min … max): 109.2 ms … 140.7 ms 1000 runs
Summary
show-ref: single matching ref (revision = HEAD) ran
1.01 ± 0.05 times faster than show-ref: single matching ref (revision = HEAD~)
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
71d9a2e991
commit
6620f9134c
@@ -205,14 +205,26 @@ static void reftable_ref_record_copy_from(void *rec, const void *src_rec,
|
||||
{
|
||||
struct reftable_ref_record *ref = rec;
|
||||
const struct reftable_ref_record *src = src_rec;
|
||||
char *refname = NULL;
|
||||
size_t refname_cap = 0;
|
||||
|
||||
assert(hash_size > 0);
|
||||
|
||||
/* This is simple and correct, but we could probably reuse the hash
|
||||
* fields. */
|
||||
SWAP(refname, ref->refname);
|
||||
SWAP(refname_cap, ref->refname_cap);
|
||||
reftable_ref_record_release(ref);
|
||||
SWAP(ref->refname, refname);
|
||||
SWAP(ref->refname_cap, refname_cap);
|
||||
|
||||
if (src->refname) {
|
||||
ref->refname = xstrdup(src->refname);
|
||||
size_t refname_len = strlen(src->refname);
|
||||
|
||||
REFTABLE_ALLOC_GROW(ref->refname, refname_len + 1,
|
||||
ref->refname_cap);
|
||||
memcpy(ref->refname, src->refname, refname_len);
|
||||
ref->refname[refname_len] = 0;
|
||||
}
|
||||
|
||||
ref->update_index = src->update_index;
|
||||
ref->value_type = src->value_type;
|
||||
switch (src->value_type) {
|
||||
|
||||
Reference in New Issue
Block a user