From: ZheNing Hu <adlternative@gmail.com>
To: Git List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
Christian Couder <christian.couder@gmail.com>,
Stefan Beller <sbeller@google.com>,
Hariom verma <hariom18599@gmail.com>
Subject: [GSOC] [QUESTION] ref-filter: can %(raw) implement reuse oi.content?
Date: Mon, 16 Aug 2021 22:00:22 +0800 [thread overview]
Message-ID: <CAOLTT8TJ_VBh8mreExXHdCFb1e6hB1-Exsn6OFdo2sZNkVFJkA@mail.gmail.com> (raw)
Hi,
In the implementation of %(raw) atom
(bd0708c7 ref-filter: add %(raw) atom), we use xmemdupz()
to copy the content of the object. But if we can reuse the content
of the object?
Since git cat-file --batch needs to use ref-filter
as the backend, if the object buffer can be reused correctly here,
we can save a lot of copies and improve its performance by about 6%.
Tracing back to the source, the object buffer is allocated from
oid_object_info_extended(), but in parse_object_buffer() we may lose
the ownership of the buffer (maybe the buffer is eaten), but I browsed the
source code of for-each-ref.c or cat-file.c, and I don’t seem to find that the
buffers which have been eaten are released by the program.
So can we reuse it?
This is what I want to do:
diff --git a/ref-filter.c b/ref-filter.c
index 93ce2a6ef2..1f6c1daabd 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1443,7 +1443,7 @@ static void grab_sub_body_contents(struct
atom_value *val, int deref, struct exp
unsigned long buf_size = data->size;
if (atom->u.raw_data.option == RAW_BARE) {
- v->s = xmemdupz(buf, buf_size);
+ v->s = buf;
v->s_size = buf_size;
} else if (atom->u.raw_data.option == RAW_LENGTH) {
v->s = xstrfmt("%"PRIuMAX, (uintmax_t)buf_size);
@@ -1768,8 +1768,6 @@ static int get_object(struct ref_array_item
*ref, int deref, struct object **obj
}
grab_common_values(ref->value, deref, oi);
- if (!eaten)
- free(oi->content);
return 0;
}
Thanks.
--
ZheNing Hu
next reply other threads:[~2021-08-16 14:01 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-16 14:00 ZheNing Hu [this message]
2021-08-17 14:34 ` Fwd: [GSOC] [QUESTION] ref-filter: can %(raw) implement reuse oi.content? ZheNing Hu
2021-08-17 16:09 ` Christian Couder
2021-08-18 4:51 ` ZheNing Hu
2021-08-18 8:53 ` Christian Couder
2021-08-18 9:07 ` ZheNing Hu
2021-08-18 11:11 ` ZheNing Hu
2021-08-19 1:39 ` ZheNing Hu
2021-08-20 16:13 ` Christian Couder
2021-08-21 2:36 ` ZheNing Hu
2021-08-20 15:58 ` Christian Couder
2021-08-21 2:16 ` ZheNing Hu
2021-08-24 7:11 ` Christian Couder
2021-08-25 8:11 ` ZheNing Hu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAOLTT8TJ_VBh8mreExXHdCFb1e6hB1-Exsn6OFdo2sZNkVFJkA@mail.gmail.com \
--to=adlternative@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hariom18599@gmail.com \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).