projects
/
vg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
api
[vg.git]
/
vg_profiler.h
diff --git
a/vg_profiler.h
b/vg_profiler.h
index 784fc287ebf7ea0297dda48276f04a502f21c5ab..bfdde127af5b921840a79b66aa7c57c7367996be 100644
(file)
--- a/
vg_profiler.h
+++ b/
vg_profiler.h
@@
-1,6
+1,7
@@
#ifndef VG_PROFILER_H
#define VG_PROFILER_H
#ifndef VG_PROFILER_H
#define VG_PROFILER_H
+#define VG_GAME
#include "vg.h"
#include "vg_platform.h"
#include "vg.h"
#include "vg_platform.h"
@@
-12,8
+13,8
@@
struct vg_profile
{
const char *name;
{
const char *name;
- u
32
samples[ VG_PROFILE_SAMPLE_COUNT ];
- u32 buffer_count, buffer_current;
+ u
64
samples[ VG_PROFILE_SAMPLE_COUNT ];
+ u32
buffer_count, buffer_current;
enum profile_mode
{
enum profile_mode
{
@@
-40,27
+41,24
@@
VG_STATIC void vg_profile_increment( struct vg_profile *profile )
if( profile->buffer_current >= VG_PROFILE_SAMPLE_COUNT )
profile->buffer_current = 0;
if( profile->buffer_current >= VG_PROFILE_SAMPLE_COUNT )
profile->buffer_current = 0;
- profile->samples[ profile->buffer_current ] = 0
.0f
;
+ profile->samples[ profile->buffer_current ] = 0;
}
VG_STATIC void vg_profile_end( struct vg_profile *profile )
{
}
VG_STATIC void vg_profile_end( struct vg_profile *profile )
{
- u64 time_end;
+ u64 time_end = SDL_GetPerformanceCounter(),
+ delta = time_end - profile->start;
- time_end = SDL_GetPerformanceCounter();
- u64 delta = profile->start - time_end;
-
- if( profile->mode == k_profile_mode_frame )
- {
+ if( profile->mode == k_profile_mode_frame ){
profile->samples[ profile->buffer_current ] = delta;
vg_profile_increment( profile );
}
profile->samples[ profile->buffer_current ] = delta;
vg_profile_increment( profile );
}
- else
- {
+ else{
profile->samples[ profile->buffer_current ] += delta;
}
}
profile->samples[ profile->buffer_current ] += delta;
}
}
+#if 0
VG_STATIC void vg_profile_drawn( struct vg_profile **profiles, u32 count,
float budget, ui_rect panel, u32 colour_offset )
{
VG_STATIC void vg_profile_drawn( struct vg_profile **profiles, u32 count,
float budget, ui_rect panel, u32 colour_offset )
{
@@
-79,11
+77,10
@@
VG_STATIC void vg_profile_drawn( struct vg_profile **profiles, u32 count,
ui_fill_rect( panel, 0xa0000000 );
assert( count <= 8 );
ui_fill_rect( panel, 0xa0000000 );
assert( count <= 8 );
-
float
avgs[8];
- int ptrs[8];
+
double
avgs[8];
+ int
ptrs[8];
- for( int i=0; i<count; i++ )
- {
+ for( int i=0; i<count; i++ ){
ptrs[i] = profiles[i]->buffer_current;
avgs[i] = 0.0f;
}
ptrs[i] = profiles[i]->buffer_current;
avgs[i] = 0.0f;
}
@@
-91,22
+88,20
@@
VG_STATIC void vg_profile_drawn( struct vg_profile **profiles, u32 count,
u32 colours[] = { 0xff0000ff, 0xff00ff00, 0xff00ffff, 0xffff0000,
0xffff00ff, 0xffffff00 };
u32 colours[] = { 0xff0000ff, 0xff00ff00, 0xff00ffff, 0xffff0000,
0xffff00ff, 0xffffff00 };
-
float rate_mul = 1.0f / (float
)SDL_GetPerformanceFrequency();
+
double rate_mul = 1000.0 / (double
)SDL_GetPerformanceFrequency();
- for( int i=0; i<VG_PROFILE_SAMPLE_COUNT-1; i++ )
- {
- float total = 0.0f;
+ for( int i=0; i<VG_PROFILE_SAMPLE_COUNT-1; i++ ){
+ double total = 0.0;
- for( int j=0; j<count; j++ )
- {
+ for( int j=0; j<count; j++ ){
ptrs[j] --;
if( ptrs[j] < 0 )
ptrs[j] = VG_PROFILE_SAMPLE_COUNT-1;
ptrs[j] --;
if( ptrs[j] < 0 )
ptrs[j] = VG_PROFILE_SAMPLE_COUNT-1;
-
float sample = (float
)profiles[j]->samples[ptrs[j]] * rate_mul,
- px = (total / (budget)) * sw,
- wx = (sample / (budget)) * sw;
+
double sample = (double
)profiles[j]->samples[ptrs[j]] * rate_mul,
+
px = (total / (budget)) * sw,
+
wx = (sample / (budget)) * sw;
ui_rect block = { panel[0] + px, panel[1] + (float)i*sh,
wx, sh };
ui_rect block = { panel[0] + px, panel[1] + (float)i*sh,
wx, sh };
@@
-121,8
+116,14
@@
VG_STATIC void vg_profile_drawn( struct vg_profile **profiles, u32 count,
char infbuf[64];
char infbuf[64];
- for( int i=0; i<count; i++ )
- {
+ snprintf( infbuf, 64, "accuracy: %.7fms", rate_mul );
+ ui_text( (ui_rect){ panel[0] + 4,
+ panel[1] + 0 * 14, 0, 0 },
+ infbuf,
+ 1,
+ k_text_align_left );
+
+ for( int i=0; i<count; i++ ){
snprintf( infbuf, 64, "%.4fms %s",
avgs[i] * (1.0f/(VG_PROFILE_SAMPLE_COUNT-1)),
profiles[i]->name );
snprintf( infbuf, 64, "%.4fms %s",
avgs[i] * (1.0f/(VG_PROFILE_SAMPLE_COUNT-1)),
profiles[i]->name );
@@
-134,16
+135,11
@@
VG_STATIC void vg_profile_drawn( struct vg_profile **profiles, u32 count,
k_text_align_left );
}
}
k_text_align_left );
}
}
+#endif
VG_STATIC void vg_profiler_init(void)
{
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
- });
+ VG_VAR_I32( vg_profiler, flags=VG_VAR_PERSISTENT );
}
#endif /* VG_PROFILER_H */
}
#endif /* VG_PROFILER_H */