| @@ -29,7 +29,7 @@ struct Profiler { | |||
| inline thread_local static FILE* out_file = nullptr; | |||
| Profiler(const char* file, const char* func, const int line, char* custom_name) { | |||
| Profiler(const char* file, const char* name, const int line, const char* comment1, const char* comment2) { | |||
| call_depth += 1; | |||
| // if we never used this thread before | |||
| @@ -61,27 +61,39 @@ struct Profiler { | |||
| printf("could not open %s\n", file_name); | |||
| } | |||
| // initially write the performance frequency | |||
| LARGE_INTEGER pf; | |||
| QueryPerformanceFrequency(&pf); | |||
| fprintf(out_file, "%lld,,,,\n", pf.QuadPart); | |||
| is_initialized = true; | |||
| } | |||
| QueryPerformanceCounter(&tmp_time); | |||
| fprintf(out_file, "->,%lld,%s,%s,%d\n", | |||
| tmp_time.QuadPart, | |||
| (custom_name ? | |||
| custom_name : | |||
| func), file, line); | |||
| fprintf(out_file, "->,%lld,%s,%s,%d,%s,%s\n", | |||
| tmp_time.QuadPart, name, file, | |||
| line, comment1, comment2); | |||
| }; | |||
| ~Profiler() { | |||
| call_depth -= 1; | |||
| QueryPerformanceCounter(&tmp_time); | |||
| fprintf(out_file, "<-,%lld,,,\n", tmp_time.QuadPart); | |||
| fprintf(out_file, "<-,%lld,,,,,\n", tmp_time.QuadPart); | |||
| if (call_depth == 0) | |||
| fflush(out_file); | |||
| }; | |||
| }; | |||
| # define profile_this() Profiler profiler(__FILE__, __FUNCTION__, __LINE__, 0) | |||
| # define profile_with_name(name) Profiler profiler(__FILE__, __FUNCTION__, __LINE__, name) | |||
| # define profile_this() Profiler profiler(__FILE__, __FUNCTION__, __LINE__, "", "") | |||
| # define profile_with_name(name) Profiler profiler(__FILE__, name, __LINE__, "", "") | |||
| # define profile_with_comment(c1) Profiler profiler(__FILE__, __FUNCTION__, __LINE__, c1, "") | |||
| # define profile_with_comments(c1,c2) Profiler profiler(__FILE__, __FUNCTION__, __LINE__, c1, c2) | |||
| # define profile_with_name_and_comment(name,c1) Profiler profiler(__FILE__, name, __LINE__, c1, "") | |||
| # define profile_with_name_and_comments(name,c1,c2) Profiler profiler(__FILE__, name, __LINE__, c1, c2) | |||
| #else | |||
| # define profile_this() do {} while(0) | |||
| # define profile_with_name() do {} while(0) | |||
| # define profile_this() do {} while(0) | |||
| # define profile_with_name(name) do {} while(0) | |||
| # define profile_with_comment(c1) do {} while(0) | |||
| # define profile_with_comments(c1,c2) do {} while(0) | |||
| # define profile_with_name_and_comment(name,c1) do {} while(0) | |||
| # define profile_with_name_and_comments(name,c1,c2) do {} while(0) | |||
| #endif | |||