X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=blobdiff_plain;f=vg_profiler.h;h=5c0690c9186b6010a0ecee9515fc9528cc2397a0;hp=699e2a72eadfdacac40abac419c53737554c34dd;hb=HEAD;hpb=fce86711735b15bff37de0f70716808410fcf269 diff --git a/vg_profiler.h b/vg_profiler.h index 699e2a7..74190cb 100644 --- a/vg_profiler.h +++ b/vg_profiler.h @@ -1,13 +1,9 @@ -#ifndef VG_PROFILER_H -#define VG_PROFILER_H - -#define VG_GAME -#include "vg.h" +#pragma once #include "vg_platform.h" - +#include "vg_imgui.h" #define VG_PROFILE_SAMPLE_COUNT 128 -static int vg_profiler = 0; +extern int vg_profiler; struct vg_profile { @@ -26,113 +22,10 @@ struct vg_profile u64 start; }; -static void vg_profile_begin( struct vg_profile *profile ) -{ - profile->start = SDL_GetPerformanceCounter(); -} - -static void vg_profile_increment( struct vg_profile *profile ) -{ - profile->buffer_current ++; - - if( profile->buffer_count < VG_PROFILE_SAMPLE_COUNT ) - profile->buffer_count ++; - - if( profile->buffer_current >= VG_PROFILE_SAMPLE_COUNT ) - profile->buffer_current = 0; - - profile->samples[ profile->buffer_current ] = 0; -} - -static void vg_profile_end( struct vg_profile *profile ) -{ - u64 time_end = SDL_GetPerformanceCounter(), - delta = time_end - profile->start; - - if( profile->mode == k_profile_mode_frame ){ - profile->samples[ profile->buffer_current ] = delta; - vg_profile_increment( profile ); - } - else{ - profile->samples[ profile->buffer_current ] += delta; - } -} - -static void vg_profile_drawn( struct vg_profile **profiles, u32 count, - f64 budget, ui_rect panel, - int dir, i32 normalize ) -{ - if( panel[2] == 0 ) - panel[2] = 256; - - if( panel[3] == 0 ) - panel[3] = VG_PROFILE_SAMPLE_COUNT * 2; - - f64 sh = (f32)panel[3^dir] / (f32)VG_PROFILE_SAMPLE_COUNT, - sw = (f32)panel[2^dir]; - - ui_fill( panel, 0xa0000000 ); - - assert( count <= 8 ); - f64 avgs[8]; - u32 colours[8]; - for( u32 i=0; isamples[i] * rate_mul; - } - - for( int j=0; jsamples[i] * rate_mul, - px = (total / budget) * sw, - wx = (sample / budget) * sw; - - ui_rect block; - block[0^dir] = panel[0^dir] + px; - block[1^dir] = panel[1^dir] + (f32)i*sh; - block[2^dir] = VG_MAX( 1, wx-1 ); - block[3^dir] = ceilf(sh)-1; - ui_fill( block, colours[j] ); - - total += sample; - avgs[j] += sample; - } - } - - char infbuf[64]; - - snprintf( infbuf, 64, "accuracy: %.7fms", rate_mul ); - ui_text( (ui_rect){ panel[0] + 4, - panel[1] + panel[3] - 14, 500, 30 }, - infbuf, - 1, - k_ui_align_left, 0 ); - - for( int i=0; iname ); - - ui_text( (ui_rect){ panel[0] + 4, - panel[1] + panel[3] + 4 + i*14, - panel[2]-8, 14 }, - infbuf, 1, k_ui_align_left, 0 ); - } -} - -static void vg_profiler_init(void) -{ - VG_VAR_I32( vg_profiler, flags=VG_VAR_PERSISTENT ); -} - -#endif /* VG_PROFILER_H */ +void vg_profile_begin( struct vg_profile *profile ); +void vg_profile_increment( struct vg_profile *profile ); +void vg_profile_end( struct vg_profile *profile ); +void vg_profile_drawn( struct vg_profile **profiles, u32 count, + f64 budget, ui_rect panel, + int dir, i32 normalize ); +void vg_profiler_init(void);