Changeset: a237bc19153a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a237bc19153a Modified Files: gdk/gdk_tracer.c gdk/gdk_tracer.h Branch: gdk-tracer Log Message:
Introduced the concept of adapters diffs (124 lines): diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c --- a/gdk/gdk_tracer.c +++ b/gdk/gdk_tracer.c @@ -38,6 +38,7 @@ static ATOMIC_TYPE SELECTED_tracer_ID = static bool GDK_TRACER_STOP = false; static FILE *output_file; +static ATOMIC_TYPE CUR_ADAPTER = DEFAULT_ADAPTER; /* CHECK */ // Should it be ATOMIC_TYPE? @@ -208,6 +209,37 @@ GDKtracer_reset_flush_level(void) gdk_return +GDKtracer_set_adapter(ADAPTER adapter) +{ + if(ATOMIC_GET(&CUR_ADAPTER) == adapter) + return GDK_SUCCEED; + + // Here when switching between adapters we can open/close the file + // But it is not so important to keep it open in case the adapter switches + + // From BASIC to other => close the file + // From other to BASIC => open the file + + // TODO: Check adapter exists + ATOMIC_SET(&CUR_ADAPTER, adapter); + + return GDK_SUCCEED; +} + + +gdk_return +GDKtracer_reset_adapter(void) +{ + if(ATOMIC_GET(&CUR_ADAPTER) == DEFAULT_ADAPTER) + return GDK_SUCCEED; + + ATOMIC_SET(&CUR_ADAPTER, DEFAULT_ADAPTER); + + return GDK_SUCCEED; +} + + +gdk_return GDKtracer_log(LOG_LEVEL level, const char *fmt, ...) { // Select a tracer @@ -301,19 +333,22 @@ GDKtracer_flush_buffer(void) if(fl_tracer->allocated_size == 0) return GDK_SUCCEED; - // Check if file is open - _GDKtracer_file_is_open(output_file); - - MT_lock_set(&fl_tracer->lock); + if(ATOMIC_GET(&CUR_ADAPTER) == BASIC) { - fwrite(&fl_tracer->buffer, fl_tracer->allocated_size, 1, output_file); - fflush(output_file); + // Check if file is open + _GDKtracer_file_is_open(output_file); - // Reset buffer - memset(fl_tracer->buffer, 0, BUFFER_SIZE); - fl_tracer->allocated_size = 0; + MT_lock_set(&fl_tracer->lock); + { + fwrite(&fl_tracer->buffer, fl_tracer->allocated_size, 1, output_file); + fflush(output_file); + + // Reset buffer + memset(fl_tracer->buffer, 0, BUFFER_SIZE); + fl_tracer->allocated_size = 0; + } + MT_lock_unset(&fl_tracer->lock); } - MT_lock_unset(&fl_tracer->lock); if(GDK_TRACER_STOP) { diff --git a/gdk/gdk_tracer.h b/gdk/gdk_tracer.h --- a/gdk/gdk_tracer.h +++ b/gdk/gdk_tracer.h @@ -12,6 +12,7 @@ #define INT_MAX_LEN ((__CHAR_BIT__ * sizeof(int) - 1) / 3 + 2) #define BUFFER_SIZE 64000 +#define DEFAULT_ADAPTER BASIC #define DEFAULT_COMPONENT_SEL M_ALL #define DEFAULT_LOG_LEVEL M_DEBUG #define DEFAULT_FLUSH_LEVEL M_DEBUG @@ -148,6 +149,15 @@ typedef enum { } LOG_LEVEL; +// GDKtracer adapters +typedef enum { + + BASIC, + PROFILER + + } ADAPTER; + + extern LOG_LEVEL CUR_LOG_LEVEL; /** @@ -234,6 +244,14 @@ gdk_return GDKtracer_set_flush_level(LOG gdk_return GDKtracer_reset_flush_level(void); +// Sets the adapter used when flush buffer takes place +gdk_return GDKtracer_set_adapter(ADAPTER adapter); + + +// Resets the adapter to the default (BASIC) when flush buffer takes place +gdk_return GDKtracer_reset_adapter(void); + + // TODO -> Write comments // Candidate for 'gnu_printf' format attribute [-Werror=suggest-attribute=format] gdk_return GDKtracer_log(LOG_LEVEL level, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list