git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Speedup prefixcmp() common case
@ 2007-12-29 18:01 Marco Costalba
  2007-12-29 19:22 ` [PATCH] Optimize prefixcmp() Johannes Schindelin
                   ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Marco Costalba @ 2007-12-29 18:01 UTC (permalink / raw)
  To: Git Mailing List

In case the prefix string is a single char avoid a
costly call to strlen() + strncmp()

With this patch git log with --pretty=format option
is 10% faster

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
---

Some profiling of git-log shows that strbuf_expand() is
called for each commit, and every time checks the
placeholders vector against the current one.

This check is done calling prefixcmp() in a tight loop.
Speeding up prefixcmp() speeds up the whole git-log thing.

NOTE I: I have tried to perform the single char check
directly in the loop, so to avoid to modify prefixcmp()
but the results, although better then the vanilla case,
are not so good. This means that there are other fast
paths that benefit from this optimization of prefixcmp().

NOTE II: currently for _each_ commit is done the whole
check of the --pretty=format against the placeholders vector.
This is clearly suboptimal because the custom format
_never changes_ for the whole git-log run, so some
caching  of the parsed format would be surely effective.

Anyhow, as I said before, this change seems to positively
impact other paths apart from the loop in strbuf_expand()
so it seems worth to have anyway.


 git-compat-util.h |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/git-compat-util.h b/git-compat-util.h
index 79eb10e..e26b684 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -398,6 +398,10 @@ static inline int sane_case

 static inline int prefixcmp(const char *str, const char *prefix)
 {
+	// shortcut common case of a single char prefix
+	if (prefix && *(prefix + 1) == '\0' && str)
+		return *str - *prefix;
+
 	return strncmp(str, prefix, strlen(prefix));
 }

-- 
1.5.4.rc2-dirty

^ permalink raw reply related	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2008-01-03  0:46 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-29 18:01 [PATCH] Speedup prefixcmp() common case Marco Costalba
2007-12-29 19:22 ` [PATCH] Optimize prefixcmp() Johannes Schindelin
2007-12-29 20:39   ` Marco Costalba
2007-12-29 22:15     ` Johannes Schindelin
2007-12-29 22:44       ` Marco Costalba
2007-12-30 13:02       ` Marco Costalba
2007-12-30 13:55         ` Pierre Habouzit
2007-12-30 13:58           ` Pierre Habouzit
2007-12-30 14:50             ` Marco Costalba
2007-12-30 15:17               ` Marco Costalba
2007-12-30 15:54         ` Johannes Schindelin
2007-12-29 21:54   ` Andy Parkins
2007-12-30  0:44   ` Junio C Hamano
2008-01-02 16:59   ` René Scharfe
2008-01-02 18:52     ` Junio C Hamano
2008-01-03  0:45       ` René Scharfe
2007-12-29 19:32 ` [PATCH] Speedup prefixcmp() common case Junio C Hamano
2007-12-29 20:14   ` Marco Costalba
2007-12-30  0:05     ` Junio C Hamano
2007-12-29 20:43 ` Marco Costalba

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).