#define _BLUESKY_H
#include <stdint.h>
+#include <stdio.h>
#include <inttypes.h>
#include <glib.h>
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
}
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);
}
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);