Bring in the gnu omni font for text, and rewrite my stats code to use c++ and then use that to calc FPS stats for an FPS display on the left. Debug build gets about 48, release gets about 500fps. Amit's code will probably do even better.
parent
e3e0f0a322
commit
cf9682ed70
Binary file not shown.
@ -1,65 +0,0 @@ |
|||||||
#include <math.h> |
|
||||||
#include <lcthw/stats.h> |
|
||||||
#include <stdlib.h> |
|
||||||
#include <lcthw/dbg.h> |
|
||||||
|
|
||||||
Stats *Stats_recreate(double sum, double sumsq, unsigned long n, |
|
||||||
double min, double max) |
|
||||||
{ |
|
||||||
Stats *st = malloc(sizeof(Stats)); |
|
||||||
check_mem(st); |
|
||||||
|
|
||||||
st->sum = sum; |
|
||||||
st->sumsq = sumsq; |
|
||||||
st->n = n; |
|
||||||
st->min = min; |
|
||||||
st->max = max; |
|
||||||
|
|
||||||
return st; |
|
||||||
|
|
||||||
error: |
|
||||||
return NULL; |
|
||||||
} |
|
||||||
|
|
||||||
Stats *Stats_create() |
|
||||||
{ |
|
||||||
return Stats_recreate(0.0, 0.0, 0L, 0.0, 0.0); |
|
||||||
} |
|
||||||
|
|
||||||
double Stats_mean(Stats * st) |
|
||||||
{ |
|
||||||
return st->sum / st->n; |
|
||||||
} |
|
||||||
|
|
||||||
double Stats_stddev(Stats * st) |
|
||||||
{ |
|
||||||
return sqrt((st->sumsq - (st->sum * st->sum / st->n)) / |
|
||||||
(st->n - 1)); |
|
||||||
} |
|
||||||
|
|
||||||
void Stats_sample(Stats * st, double s) |
|
||||||
{ |
|
||||||
st->sum += s; |
|
||||||
st->sumsq += s * s; |
|
||||||
|
|
||||||
if (st->n == 0) { |
|
||||||
st->min = s; |
|
||||||
st->max = s; |
|
||||||
} else { |
|
||||||
if (st->min > s) |
|
||||||
st->min = s; |
|
||||||
if (st->max < s) |
|
||||||
st->max = s; |
|
||||||
} |
|
||||||
|
|
||||||
st->n += 1; |
|
||||||
} |
|
||||||
|
|
||||||
void Stats_dump(Stats * st) |
|
||||||
{ |
|
||||||
fprintf(stderr, |
|
||||||
"sum: %f, sumsq: %f, n: %ld, " |
|
||||||
"min: %f, max: %f, mean: %f, stddev: %f", |
|
||||||
st->sum, st->sumsq, st->n, st->min, st->max, Stats_mean(st), |
|
||||||
Stats_stddev(st)); |
|
||||||
} |
|
@ -0,0 +1,10 @@ |
|||||||
|
#include "stats.hpp" |
||||||
|
#include <fmt/core.h> |
||||||
|
|
||||||
|
void Stats::dump() |
||||||
|
{ |
||||||
|
fmt::println("sum: {}, sumsq: {}, n: {}, " |
||||||
|
"min: {}, max: {}, mean: {}, stddev: {}", |
||||||
|
sum, sumsq, n, min, max, mean(), |
||||||
|
stddev()); |
||||||
|
} |
@ -1,25 +0,0 @@ |
|||||||
#ifndef lcthw_stats_h |
|
||||||
#define lcthw_stats_h |
|
||||||
|
|
||||||
typedef struct Stats { |
|
||||||
double sum; |
|
||||||
double sumsq; |
|
||||||
unsigned long n; |
|
||||||
double min; |
|
||||||
double max; |
|
||||||
} Stats; |
|
||||||
|
|
||||||
Stats *Stats_recreate(double sum, double sumsq, unsigned long n, |
|
||||||
double min, double max); |
|
||||||
|
|
||||||
Stats *Stats_create(); |
|
||||||
|
|
||||||
double Stats_mean(Stats * st); |
|
||||||
|
|
||||||
double Stats_stddev(Stats * st); |
|
||||||
|
|
||||||
void Stats_sample(Stats * st, double s); |
|
||||||
|
|
||||||
void Stats_dump(Stats * st); |
|
||||||
|
|
||||||
#endif |
|
@ -0,0 +1,45 @@ |
|||||||
|
#pragma once |
||||||
|
#include <cmath> |
||||||
|
|
||||||
|
struct Stats { |
||||||
|
double sum = 0.0; |
||||||
|
double sumsq = 0.0; |
||||||
|
unsigned long n = 0L; |
||||||
|
double min = 0.0; |
||||||
|
double max = 0.0; |
||||||
|
|
||||||
|
|
||||||
|
inline void reset() { |
||||||
|
sum = 0; |
||||||
|
sumsq = 0; |
||||||
|
n = 0L; |
||||||
|
min = 0; |
||||||
|
max = 0; |
||||||
|
} |
||||||
|
|
||||||
|
inline double mean() { |
||||||
|
return sum / n; |
||||||
|
} |
||||||
|
|
||||||
|
inline double stddev() { |
||||||
|
return std::sqrt((sumsq - (sum * sum / n)) / |
||||||
|
(n - 1)); |
||||||
|
} |
||||||
|
|
||||||
|
inline void sample(double s) { |
||||||
|
sum += s; |
||||||
|
sumsq += s * s; |
||||||
|
|
||||||
|
if (n == 0) { |
||||||
|
min = s; |
||||||
|
max = s; |
||||||
|
} else { |
||||||
|
if (min > s) min = s; |
||||||
|
if (max < s) max = s; |
||||||
|
} |
||||||
|
|
||||||
|
n += 1; |
||||||
|
} |
||||||
|
|
||||||
|
void dump(); |
||||||
|
}; |
Loading…
Reference in new issue