Measure avg frame-time per sec

This commit is contained in:
Björn Gaier 2023-11-04 19:55:49 -04:00
parent 5b05f1e51a
commit c61b25af57
3 changed files with 55 additions and 37 deletions

View File

@ -1,4 +1,14 @@
#pragma once #pragma once
#include <PSX/Timer/high_res_timer.hpp>
#include <stdint.h>
namespace Overlay { namespace Overlay {
void mesaure_busy_loop(); namespace TimerTest {
using TimeStamp = JabyEngine::HighResTime::TimeStamp;
void mesaure_busy_loop();
TimeStamp start_measuring();
void end_measuring(const TimeStamp& start, size_t data_samples);
}
} }

View File

@ -1,18 +1,40 @@
#include <PSX/Timer/high_res_timer.hpp> #include "../Overlay.hpp"
#include <stdio.h> #include <stdio.h>
#pragma GCC warning "Enable this code to verify that high percision counter is still functional" extern "C" void busy_loop(int count);
extern "C" void busy_loop(int count);
namespace Overlay { namespace Overlay {
void mesaure_busy_loop() { namespace TimerTest {
static constexpr auto Counts = 500; static size_t avg = 0;
static size_t cur_rounds = 0;
JabyEngine::HighResTime::enable();
const auto start = JabyEngine::HighResTime::get_time_stamp(); void mesaure_busy_loop() {
busy_loop(Counts); static constexpr auto Counts = 500;
const auto end = JabyEngine::HighResTime::get_time_stamp();
JabyEngine::HighResTime::disable(); JabyEngine::HighResTime::enable();
const auto start = JabyEngine::HighResTime::get_time_stamp();
printf("Busy loop of %i took %ims %ins\n", Counts, start.milliseconds_to(end), start.microseconds_to(end)); busy_loop(Counts);
} const auto end = JabyEngine::HighResTime::get_time_stamp();
JabyEngine::HighResTime::disable();
printf("Busy loop of %i took %ims %ins\n", Counts, start.milliseconds_to(end), start.microseconds_to(end));
}
TimeStamp start_measuring() {
return JabyEngine::HighResTime::get_time_stamp();
}
void end_measuring(const TimeStamp& start, size_t data_samples) {
const auto end = JabyEngine::HighResTime::get_time_stamp();
avg += start.microseconds_to(end);
cur_rounds++;
if(cur_rounds == data_samples) {
printf("AVG Time: %ius\n", avg/cur_rounds);
avg = 0;
cur_rounds = 0;
}
}
}
} }

View File

@ -5,7 +5,6 @@
#include <PSX/GPU/gpu.hpp> #include <PSX/GPU/gpu.hpp>
#include <PSX/GPU/gpu_primitives.hpp> #include <PSX/GPU/gpu_primitives.hpp>
#include <PSX/Timer/frame_timer.hpp> #include <PSX/Timer/frame_timer.hpp>
#include <PSX/Timer/high_res_timer.hpp>
#include <stdio.h> #include <stdio.h>
using namespace JabyEngine; using namespace JabyEngine;
@ -35,28 +34,15 @@ static void render() {
} }
void main() { void main() {
static constexpr size_t MaxRounds = 1;
size_t avg = 0;
size_t cur_rounds = 0;
setup(); setup();
Overlay::mesaure_busy_loop(); Overlay::TimerTest::mesaure_busy_loop();
JabyEngine::HighResTime::enable(); JabyEngine::HighResTime::enable();
while(true) { while(true) {
const auto start = JabyEngine::HighResTime::get_time_stamp(); const auto start = Overlay::TimerTest::start_measuring();
update(); update();
render(); render();
const auto end = JabyEngine::HighResTime::get_time_stamp(); Overlay::TimerTest::end_measuring(start, GPU::Display::frames_per_sec);
avg += start.microseconds_to(end);
cur_rounds++;
if(cur_rounds == GPU::Display::frames_per_sec) {
printf("AVG Time: %ius\n", avg/MaxRounds);
avg = 0;
cur_rounds = 0;
}
} }
} }