git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: gennady.kupava@gmail.com
To: git <git@vger.kernel.org>
Cc: Gennady Kupava <gkupava@bloomberg.net>
Subject: [PATCH 1/2] Simplify tracing code by removing trace key normalization concept
Date: Sun, 19 Nov 2017 00:42:46 +0000	[thread overview]
Message-ID: <20171119004247.22792-1-gennady.kupava@gmail.com> (raw)
In-Reply-To: <20171117221631.x2xqeeqmf5xob3yv@sigill.intra.peff.net>

From: Gennady Kupava <gkupava@bloomberg.net>

- to implement efficient traces with normalization, normalization
  implementation should be moved to header. as it seems better to not
  overload header file with this normalization logic, suggestion is
  just to remove it
- different macro exist specifically to handle traces with default key
- there is no use of normalization in current code
- it could be reintroduced if necessary

Signed-off-by: Gennady Kupava <gkupava@bloomberg.net>
---
 trace.c | 24 ++++--------------------
 trace.h |  4 +++-
 2 files changed, 7 insertions(+), 21 deletions(-)

diff --git a/trace.c b/trace.c
index cb1293ed3..d47ea28e8 100644
--- a/trace.c
+++ b/trace.c
@@ -24,26 +24,13 @@
 #include "cache.h"
 #include "quote.h"
 
-/*
- * "Normalize" a key argument by converting NULL to our trace_default,
- * and otherwise passing through the value. All caller-facing functions
- * should normalize their inputs in this way, though most get it
- * for free by calling get_trace_fd() (directly or indirectly).
- */
-static void normalize_trace_key(struct trace_key **key)
-{
-	static struct trace_key trace_default = { "GIT_TRACE" };
-	if (!*key)
-		*key = &trace_default;
-}
+struct trace_key trace_default_key = { "GIT_TRACE", 0, 0, 0 };
 
 /* Get a trace file descriptor from "key" env variable. */
 static int get_trace_fd(struct trace_key *key)
 {
 	const char *trace;
 
-	normalize_trace_key(&key);
-
 	/* don't open twice */
 	if (key->initialized)
 		return key->fd;
@@ -81,8 +68,6 @@ static int get_trace_fd(struct trace_key *key)
 
 void trace_disable(struct trace_key *key)
 {
-	normalize_trace_key(&key);
-
 	if (key->need_close)
 		close(key->fd);
 	key->fd = 0;
@@ -128,7 +113,6 @@ static int prepare_trace_line(const char *file, int line,
 static void trace_write(struct trace_key *key, const void *buf, unsigned len)
 {
 	if (write_in_full(get_trace_fd(key), buf, len) < 0) {
-		normalize_trace_key(&key);
 		warning("unable to write trace for %s: %s",
 			key->key, strerror(errno));
 		trace_disable(key);
@@ -167,13 +151,13 @@ static void trace_argv_vprintf_fl(const char *file, int line,
 {
 	struct strbuf buf = STRBUF_INIT;
 
-	if (!prepare_trace_line(file, line, NULL, &buf))
+	if (!prepare_trace_line(file, line, &trace_default_key, &buf))
 		return;
 
 	strbuf_vaddf(&buf, format, ap);
 
 	sq_quote_argv(&buf, argv, 0);
-	print_trace_line(NULL, &buf);
+	print_trace_line(&trace_default_key, &buf);
 }
 
 void trace_strbuf_fl(const char *file, int line, struct trace_key *key,
@@ -215,7 +199,7 @@ void trace_printf(const char *format, ...)
 {
 	va_list ap;
 	va_start(ap, format);
-	trace_vprintf_fl(NULL, 0, NULL, format, ap);
+	trace_vprintf_fl(NULL, 0, &trace_default_key, format, ap);
 	va_end(ap);
 }
 
diff --git a/trace.h b/trace.h
index 179b249c5..24b32f8f4 100644
--- a/trace.h
+++ b/trace.h
@@ -11,6 +11,8 @@ struct trace_key {
 	unsigned int  need_close : 1;
 };
 
+extern struct trace_key trace_default_key;
+
 #define TRACE_KEY_INIT(name) { "GIT_TRACE_" #name, 0, 0, 0 }
 
 extern void trace_repo_setup(const char *prefix);
@@ -78,7 +80,7 @@ extern void trace_performance_since(uint64_t start, const char *format, ...);
  */
 
 #define trace_printf(...) \
-	trace_printf_key_fl(TRACE_CONTEXT, __LINE__, NULL, __VA_ARGS__)
+	trace_printf_key_fl(TRACE_CONTEXT, __LINE__, &trace_default_key, __VA_ARGS__)
 
 #define trace_printf_key(key, ...) \
 	trace_printf_key_fl(TRACE_CONTEXT, __LINE__, key, __VA_ARGS__)
-- 
2.14.1


  reply	other threads:[~2017-11-19  0:43 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-11 19:28 [PATCH] Reduce performance penalty for turned off traces gennady.kupava
2017-11-12 14:17 ` Jeff King
2017-11-12 23:24   ` Gennady Kupava
2017-11-17 22:12     ` Jeff King
2017-11-15 19:14   ` Stefan Beller
2017-11-17 22:16     ` Jeff King
2017-11-19  0:42       ` gennady.kupava [this message]
2017-11-19  0:42         ` [PATCH 2/2] Reduce performance cost of the trace if trace category is disabled gennady.kupava
2017-11-19  8:27           ` Johannes Sixt
2017-11-19 13:18             ` Gennady Kupava
2017-11-19  2:19         ` [PATCH 1/2] Simplify tracing code by removing trace key normalization concept Junio C Hamano
2017-11-19 13:16           ` Gennady Kupava
2017-11-20  0:24             ` Junio C Hamano
2017-11-20  4:59               ` Junio C Hamano
2017-11-26 20:11                 ` [PATCH 1/2] trace: remove trace key normalization gennady.kupava
2017-11-26 20:11                   ` [PATCH 2/2] trace: improve performance while category is disabled gennady.kupava
2017-11-27  1:21                     ` Junio C Hamano
2017-11-27  1:32                       ` Junio C Hamano
2017-11-27  3:25                         ` Junio C Hamano
2017-11-27 10:12                           ` Gennady Kupava

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171119004247.22792-1-gennady.kupava@gmail.com \
    --to=gennady.kupava@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gkupava@bloomberg.net \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).