Update the profiler to allow for different level of profiling

This commit is contained in:
2023-07-23 16:36:21 +01:00
parent 0e973feb38
commit 19c02b4e99
4 changed files with 56 additions and 46 deletions

View File

@@ -7,6 +7,7 @@
#include <x86intrin.h>
#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