diff --git a/haversine_02/compile b/haversine_02/compile index e04a963..43ad62d 100755 --- a/haversine_02/compile +++ b/haversine_02/compile @@ -12,8 +12,12 @@ while [[ $# > 0 ]];do RELEASE=true shift ;; - --enable-profiling) - ENABLE_PROFILING=true + --basic-profiling) + BASIC_PROFILING=true + shift + ;; + --full-profiling) + FULL_PROFILING=true shift ;; *|-*|--*) @@ -46,11 +50,11 @@ echo # PROFILER PROFSRC="../src/profiler/timer.c" -PROFFLAGS="-c" +PROFFLAGS="-c " PROF_BUILD_DIR=prof_build # PROCESSOR -JSONSRC="../src/json/*.c" +JSONSRC="../src/json/*.c " JSONFLAGS="-c " JSON_BUILD_DIR=json_build @@ -61,10 +65,18 @@ PROCSRC="./$JSON_BUILD_DIR/*.o \ ./src/processor/main.cpp " PROCOUT=prochavr -if [[ $ENABLE_PROFILING == true ]]; then - JSONFLAGS+="-DENABLE_PROFILING" - PROCSRC+="./$PROF_BUILD_DIR/*.o" - PROCFLAGS="-DENABLE_PROFILING" +if [[ $BASIC_PROFILING == true ]] || [[ $FULL_PROFILING == true ]]; then + if [[ $FULL_PROFILING == true ]]; then + JSONFLAGS+="-DFULL_PROFILING" + PROCFLAGS="-DFULL_PROFILING" + PROFFLAGS+="-DFULL_PROFILING" + elif [[ $BASIC_PROFILING == true ]]; then + JSONFLAGS+="-DBASIC_PROFILING" + PROCFLAGS="-DBASIC_PROFILING" + PROFFLAGS+="-DBASIC_PROFILING" + fi + + PROCSRC+=./$PROF_BUILD_DIR/*.o mkdir $PROF_BUILD_DIR cd $PROF_BUILD_DIR diff --git a/haversine_02/include/profiler/ids.h b/haversine_02/include/profiler/ids.h deleted file mode 100644 index 2269361..0000000 --- a/haversine_02/include/profiler/ids.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef PROFILER_IDS_H -#define PROFILER_IDS_H - -enum profiler_ids { - PROFILER_ID_CLI_PARSE, - PROFILER_ID_JSON_PARSE, - PROFILER_ID_READ_JSON_FILE, - PROFILER_ID_PARSER_SETUP, - PROFILER_ID_LEX_GET_TOKEN, - PROFILER_ID_PARSE_TOKEN, - PROFILER_ID_PARSER_TEAR_DOWN, - PROFILER_ID_LOAD_JSON_PAIRS, - PROFILER_ID_READ_BINARY, - PROFILER_ID_HAVERSINE_SUM, - PROFILER_ID_HAVERSINE_DISTANCE, - PROFILER_ID_HAVERSINE_AVG, - PROFILER_ID_TEAR_DOWN, - PROFILER_ID_FREE_JSON, - - COUNT_PROFILER_IDS, -}; - -#endif // !PROFILER_IDS_H diff --git a/haversine_02/include/profiler/timer.h b/haversine_02/include/profiler/timer.h index 549b02b..fbf8ac2 100644 --- a/haversine_02/include/profiler/timer.h +++ b/haversine_02/include/profiler/timer.h @@ -7,17 +7,29 @@ #define MAX_PROFILE_SAMPLES 1024 #endif // !MAX_PROFILE_SAMPLES -#ifdef ENABLE_PROFILING -#define PROFILE_START(COUNT) profile_start(COUNT) -#define PROFILE_END profile_end() +#ifdef FULL_PROFILING #define SAMPLE_START(ID, TITLE) sample_start(ID, TITLE) #define SAMPLE_END(ID) sample_end(ID) + +#ifdef __cplusplus +extern "C" { +#endif + +void sample_start(u64 id, const char *title); +void sample_end(u64 id); + +#ifdef __cplusplus +} +#endif + #else -#define PROFILE_START(COUNT) -#define PROFILE_END #define SAMPLE_START(ID, TITLE) #define SAMPLE_END(ID) -#endif // ENABLE_PROFILING +#endif // FULL_PROFILING + +#if defined(BASIC_PROFILING) || defined(FULL_PROFILING) +#define PROFILE_START(COUNT) profile_start(COUNT) +#define PROFILE_END profile_end() #ifdef __cplusplus extern "C" { @@ -49,11 +61,13 @@ u64 get_cpu_freq(u64 milliseconds); void profile_start(u64 count); void profile_end(); -void sample_start(u64 id, const char *title); -void sample_end(u64 id); - #ifdef __cplusplus } #endif +#else +#define PROFILE_START(COUNT) +#define PROFILE_END +#endif // BASIC_PROFILING || FULL_PROFILING + #endif // !TIMER_H diff --git a/haversine_02/src/profiler/timer.c b/haversine_02/src/profiler/timer.c index 7889c9e..ecbf1e7 100644 --- a/haversine_02/src/profiler/timer.c +++ b/haversine_02/src/profiler/timer.c @@ -7,6 +7,7 @@ #include +#if defined(BASIC_PROFILING) || defined(FULL_PROFILING) typedef struct { profiler_sample_t samples[MAX_PROFILE_SAMPLES]; u64 cpu_freq; @@ -82,10 +83,6 @@ void profile_end() { u16 time_precision = 16; u16 time_char_count = 20; - u16 duration_char_count = 22; - u16 hits_char_count = 10; - u16 percentage_precision = 8; - u16 percentage_char_count = 12; // clang-format off printf("\n==============================PROFILING==============================\n"); @@ -97,6 +94,12 @@ void profile_end() { (unsigned long long)profiler.cpu_freq); } +#ifdef FULL_PROFILING + u16 duration_char_count = 22; + u16 hits_char_count = 10; + u16 percentage_precision = 8; + u16 percentage_char_count = 12; + profiler_sample_t *sample = NULL; for (u64 i = 0; i < profiler.size; ++i) { @@ -121,8 +124,11 @@ void profile_end() { printf(")\n"); } +#endif // FULL_PROFILING } +#endif // BASIC_PROFILING || FULL_PROFILING +#ifdef FULL_PROFILING void sample_start(u64 id, const char *title) { if (id >= MAX_PROFILE_SAMPLES) { return; @@ -188,15 +194,16 @@ void sample_end(u64 id) { profiler_sample_t *parent = sample->parent; if (parent) { - sample->parent->start = now; - // Add sample duration to all parents. This handles deep call stacks while (parent) { parent->children_time += duration; parent = parent->parent; } + + sample->parent->start = now; } profiler.active = sample->parent; } +#endif // FULL_PROFILING