X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=src%2Fvg%2Fvg_profiler.h;fp=src%2Fvg%2Fvg_profiler.h;h=0000000000000000000000000000000000000000;hb=4c48fe01a5d1983be89b7dce6f08e6b708cfbb05;hp=87de34f53dae041f4a9be1dd465c656c9ef3f222;hpb=3dd767bb10e6fee9cbffeb185d1a9685810c17b5;p=vg.git diff --git a/src/vg/vg_profiler.h b/src/vg/vg_profiler.h deleted file mode 100644 index 87de34f..0000000 --- a/src/vg/vg_profiler.h +++ /dev/null @@ -1,147 +0,0 @@ -#ifndef VG_PROFILER_H -#define VG_PROFILER_H - -#include "vg_platform.h" - -#define VG_PROFILE_SAMPLE_COUNT 128 - -static int vg_profiler = 0; - -struct vg_profile -{ - const char *name; - - float samples[ VG_PROFILE_SAMPLE_COUNT ]; - u32 buffer_count, buffer_current; - - enum profile_mode - { - k_profile_mode_frame, - k_profile_mode_accum - } - mode; - - struct timespec start; -}; - -VG_STATIC void vg_profile_begin( struct vg_profile *profile ) -{ - clock_gettime( CLOCK_REALTIME, &profile->start ); -} - -VG_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.0f; -} - -VG_STATIC void vg_profile_end( struct vg_profile *profile ) -{ - struct timespec time_end; - - clock_gettime( CLOCK_REALTIME, &time_end ); - float delta = vg_time_diff( profile->start, time_end ); - - - if( profile->mode == k_profile_mode_frame ) - { - profile->samples[ profile->buffer_current ] = delta; - vg_profile_increment( profile ); - } - else - { - profile->samples[ profile->buffer_current ] += delta; - } -} - -VG_STATIC void vg_profile_drawn( struct vg_profile **profiles, u32 count, - float budget, ui_rect panel, u32 colour_offset ) -{ - if( !vg_profiler ) - return; - - if( panel[2] == 0 ) - panel[2] = 256; - - if( panel[3] == 0 ) - panel[3] = VG_PROFILE_SAMPLE_COUNT * 2; - - float sh = panel[3] / VG_PROFILE_SAMPLE_COUNT, - sw = panel[2]; - - ui_fill_rect( panel, 0xa0000000 ); - - assert( count <= 8 ); - float avgs[8]; - int ptrs[8]; - - for( int i=0; ibuffer_current; - avgs[i] = 0.0f; - } - - u32 colours[] = { 0xff0000ff, 0xff00ff00, 0xff00ffff, 0xffff0000, - 0xffff00ff, 0xffffff00 }; - - for( int i=0; isamples[ptrs[j]], - px = (total / (budget)) * sw, - wx = (sample / (budget)) * sw; - - ui_rect block = { panel[0] + px, panel[1] + (float)i*sh, - wx, sh }; - - u32 colour = colours[ (j+colour_offset) % vg_list_size(colours) ]; - ui_fill_rect( block, colour ); - - total += sample; - avgs[j] += sample; - } - } - - char infbuf[64]; - - for( int i=0; iname ); - - ui_text( (ui_rect){ panel[0] + panel[2] + 4, - panel[1] + i * 14, 0, 0 }, - infbuf, - 1, - k_text_align_left ); - } -} - -VG_STATIC void vg_profiler_init(void) -{ - vg_convar_push( (struct vg_convar){ - .name = "vg_profiler", - .data = &vg_profiler, - .data_type = k_convar_dtype_i32, - .opt_i32 = { .min=0, .max=1, .clamp=1 }, - .persistent = 1 - }); -} - -#endif /* VG_PROFILER_H */