#include #include "rtweekend.hpp" #define TIMED_BLOCK__(number, ...) timed_block timed_block_##Number(__COUNTER__, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__) #define TIMED_BLOCK_(number, ...) TIMED_BLOCK__(number, ##__VA_ARGS__) #define TIMED_BLOCK(...) TIMED_BLOCK_(__LINE__, ##__VA_ARGS__) struct debug_record { uint64_t cycles; uint64_t hit_count; const char *filename; const char *function_name; uint32_t line_number; }; extern debug_record debug_record_array[]; struct timed_block { // TODO: Thread safety debug_record *record; timed_block(int counter, const char *filename, int line_number, const char *function_name, int hit_count = 1) { record = debug_record_array + counter; record->filename = filename; record->line_number = line_number; record->function_name = function_name; record->cycles -= __rdtsc(); record->hit_count += hit_count; } ~timed_block() { record->cycles += __rdtsc(); } };