39 lines
1 KiB
C++
39 lines
1 KiB
C++
#include <x86intrin.h>
|
|
#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();
|
|
}
|
|
};
|