improve time profiling

isolation_bkp/dynres
Dominik Madarász 2021-05-13 16:37:53 +02:00
parent 3b56791bec
commit c93e5e4e46
4 changed files with 18 additions and 1 deletions

View File

@ -2,6 +2,7 @@
#include "system.h"
typedef enum {
PROF_TOTAL_TIME,
PROF_MAIN_LOOP,
PROF_WORLD_WRITE,

View File

@ -84,6 +84,7 @@ static debug_item items[] = {
.list = {
.items = (debug_item[]) {
{ .kind = DITEM_RAW, .val = PROF_MAIN_LOOP, .proc = DrawProfilerDelta },
{ .kind = DITEM_TEXT, .name = "unmesasured time", .proc = DrawUnmeasuredTime },
{ .kind = DITEM_RAW, .val = PROF_WORLD_WRITE, .proc = DrawProfilerDelta },
{ .kind = DITEM_RAW, .val = PROF_RENDER, .proc = DrawProfilerDelta },
{ .kind = DITEM_RAW, .val = PROF_UPDATE_SYSTEMS, .proc = DrawProfilerDelta },

View File

@ -28,6 +28,15 @@ DrawColoredText(float xpos, float ypos, char const *text, Color color) {
//~ NOTE(zaklaus): widgets
static inline debug_draw_result
DrawUnmeasuredTime(debug_item *it, float xpos, float ypos) {
(void)it;
float total_time = profiler_delta(PROF_TOTAL_TIME);
float acc_time = profiler_delta(PROF_MAIN_LOOP);
return DrawFormattedText(xpos, ypos, TextFormat("%.02f ms", (total_time-acc_time) * 1000.0f));
}
static inline debug_draw_result
DrawDeltaTime(debug_item *it, float xpos, float ypos) {
(void)it;

View File

@ -6,6 +6,7 @@
// NOTE(zaklaus): KEEP ORDER IN SYNC WITH profiler_kind ENUM !!!
static profiler profilers[] = {
{ .id = PROF_TOTAL_TIME, .name = "measured time" },
{ .id = PROF_MAIN_LOOP, .name = "main loop" },
{ .id = PROF_WORLD_WRITE, .name = "world write" },
{ .id = PROF_RENDER, .name = "render" },
@ -33,16 +34,21 @@ void profiler_stop(profiler_kind id) {
void profiler_collate() {
static double frame_counter = 0.0;
static uint64_t frames = 0;
frame_counter += GetFrameTime();
frames++;
if (frame_counter >= PROF_COLLATE_WINDOW) {
for (uint32_t i = 0; i < MAX_PROF; i += 1) {
profilers[PROF_TOTAL_TIME].delta_time = frame_counter / (double)frames;
for (uint32_t i = PROF_MAIN_LOOP; i < MAX_PROF; i += 1) {
profiler *p = &profilers[i];
p->delta_time = p->num_invocations == 0 ? 0.0 : p->total_time / (double)p->num_invocations;
}
frame_counter = 0.0;
frames = 0;
}
}