From f53cd8284a0461840cea01c7c6dbc875c52fac50 Mon Sep 17 00:00:00 2001 From: Michael Vrable Date: Mon, 29 Nov 2010 20:57:27 -0800 Subject: [PATCH] Allow profile results to be written to a file. --- bluesky/bluesky.h | 2 ++ bluesky/util.c | 15 +++++++++++++-- nfs3/nfsd.c | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bluesky/bluesky.h b/bluesky/bluesky.h index 653adc8..bf01abe 100644 --- a/bluesky/bluesky.h +++ b/bluesky/bluesky.h @@ -10,6 +10,7 @@ #define _BLUESKY_H #include +#include #include #include @@ -379,6 +380,7 @@ void bluesky_profile_add_event(BlueSkyProfile *profile, char *message); void bluesky_profile_print(BlueSkyProfile *profile); BlueSkyProfile *bluesky_profile_get(); void bluesky_profile_set(BlueSkyProfile *profile); +void bluesky_profile_set_output(FILE *stream); #ifdef __cplusplus } diff --git a/bluesky/util.c b/bluesky/util.c index 99e341f..45bc9f5 100644 --- a/bluesky/util.c +++ b/bluesky/util.c @@ -383,21 +383,32 @@ void bluesky_profile_add_event(BlueSkyProfile *profile, char *message) g_mutex_unlock(profile->lock); } +static FILE *profiling_file = NULL; +static GStaticMutex profiling_print_lock = G_STATIC_MUTEX_INIT; + +void bluesky_profile_set_output(FILE *stream) +{ + profiling_file = stream; +} + void bluesky_profile_print(BlueSkyProfile *profile) { + FILE *stream = profiling_file ? profiling_file : stdout; g_return_if_fail(profile != NULL); g_mutex_lock(profile->lock); - g_print("Event Timeline: %s\n", profile->description); + g_static_mutex_lock(&profiling_print_lock); + fprintf(stream, "Event Timeline: %s\n", profile->description); GList *link = g_list_last(profile->events); bluesky_time_hires last_time = 0; while (link != NULL) { RTEvent *event = (RTEvent *)link->data; - g_print(" [%d] [%"PRIi64" ns]: %s\n", + fprintf(stream, " [%d] [%"PRIi64" ns]: %s\n", event->tid, event->timestamp - last_time, event->message); last_time = event->timestamp; link = link->prev; } + g_static_mutex_unlock(&profiling_print_lock); g_mutex_unlock(profile->lock); } diff --git a/nfs3/nfsd.c b/nfs3/nfsd.c index 6c975f2..e95ac7c 100644 --- a/nfs3/nfsd.c +++ b/nfs3/nfsd.c @@ -57,6 +57,10 @@ int main(int argc, char *argv[]) if (key == NULL) key = ""; + const char *profile_output = getenv("BLUESKY_PROFILE_OUT"); + if (profile_output != NULL) + bluesky_profile_set_output(fopen(profile_output, "a")); + store = bluesky_store_new(target); fs = bluesky_init_fs("export", store, key); -- 2.20.1