|
|
|
@ -5,6 +5,7 @@ import ugui; |
|
|
|
|
import rl; |
|
|
|
|
import std::time; |
|
|
|
|
import std::collections::ringbuffer; |
|
|
|
|
import std::core::string; |
|
|
|
|
|
|
|
|
|
def Times = ringbuffer::RingBuffer(<time::NanoDuration, 128>); |
|
|
|
|
|
|
|
|
@ -23,6 +24,26 @@ fn void Times.print_stats(×) |
|
|
|
|
io::printfn("min=%s, max=%s, avg=%s", min, max, avg); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
struct TimeStats { |
|
|
|
|
time::NanoDuration min, max, avg; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn TimeStats Times.get_stats(×) |
|
|
|
|
{ |
|
|
|
|
time::NanoDuration min, max, avg, x; |
|
|
|
|
min = times.get(0); |
|
|
|
|
for (usz i = 0; i < times.written; i++) { |
|
|
|
|
x = times.get(i); |
|
|
|
|
if (x < min) { min = x; } |
|
|
|
|
if (x > max) { max = x; } |
|
|
|
|
avg += x; |
|
|
|
|
} |
|
|
|
|
avg = (NanoDuration)((ulong)avg/128.0); |
|
|
|
|
|
|
|
|
|
return TimeStats{.min = min, .max = max, .avg = avg}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const ZString FONT_FS = ` |
|
|
|
|
#version 330 |
|
|
|
|
|
|
|
|
@ -146,6 +167,23 @@ rl::Image font_atlas; |
|
|
|
|
|}; |
|
|
|
|
ui.div_end()!!; |
|
|
|
|
|
|
|
|
|
// Timings counter |
|
|
|
|
TimeStats dts = draw_times.get_stats(); |
|
|
|
|
TimeStats uts = ui_times.get_stats(); |
|
|
|
|
|
|
|
|
|
ui.layout_set_floating()!!; |
|
|
|
|
ui.div_begin("fps", ugui::Rect{0, ui.height-50, 200, 50})!!; |
|
|
|
|
{| |
|
|
|
|
ui.layout_set_row()!!; |
|
|
|
|
ui.text_unbounded("ui avg", string::tformat("ui avg: %s", uts.avg))!!; |
|
|
|
|
|
|
|
|
|
ui.layout_next_row()!!; |
|
|
|
|
ui.text_unbounded("draw avg", string::tformat("draw avg: %s", dts.avg))!!; |
|
|
|
|
|
|
|
|
|
//ui.force_update()!!; |
|
|
|
|
|}; |
|
|
|
|
ui.div_end()!!; |
|
|
|
|
|
|
|
|
|
ui.frame_end()!!; |
|
|
|
|
/* End UI Handling */ |
|
|
|
|
ui_times.push(clock.mark()); |
|
|
|
|