banner and stats work

Stats: preserve planecount across reset_stats(), since it is
an instantaneous (rather than cumulative) stat. Properly
initialize plane count to 0 in notcurses_init().

Banners: print min/avg/max rather than min/man/avg. Don't
predivide maximum byte output; it reduces accuracy.
pull/1351/head
nick black 4 years ago
parent 4e577cbc97
commit d567ec683f
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -702,12 +702,14 @@ make_nonblocking(int fd){
static void static void
reset_stats(ncstats* stats){ reset_stats(ncstats* stats){
uint64_t fbbytes = stats->fbbytes; uint64_t fbbytes = stats->fbbytes;
unsigned planes = stats->planes;
memset(stats, 0, sizeof(*stats)); memset(stats, 0, sizeof(*stats));
stats->render_min_ns = 1ull << 62u; stats->render_min_ns = 1ull << 62u;
stats->render_min_bytes = 1ull << 62u; stats->render_min_bytes = 1ull << 62u;
stats->raster_min_ns = 1ull << 62u; stats->raster_min_ns = 1ull << 62u;
stats->writeout_min_ns = 1ull << 62u; stats->writeout_min_ns = 1ull << 62u;
stats->fbbytes = fbbytes; stats->fbbytes = fbbytes;
stats->planes = planes;
} }
// add the current stats to the cumulative stashed stats, and reset them // add the current stats to the cumulative stashed stats, and reset them
@ -971,8 +973,8 @@ notcurses* notcurses_core_init(const notcurses_options* opts, FILE* outfp){
ret->margin_l = opts->margin_l; ret->margin_l = opts->margin_l;
ret->margin_r = opts->margin_r; ret->margin_r = opts->margin_r;
ret->cursory = ret->cursorx = -1; ret->cursory = ret->cursorx = -1;
ret->stats.fbbytes = 0; memset(&ret->stats, 0, sizeof(ret->stats));
ret->stashstats.fbbytes = 0; memset(&ret->stashstats, 0, sizeof(ret->stashstats));
reset_stats(&ret->stats); reset_stats(&ret->stats);
reset_stats(&ret->stashstats); reset_stats(&ret->stashstats);
ret->ttyfp = outfp; ret->ttyfp = outfp;
@ -1169,30 +1171,30 @@ int notcurses_stop(notcurses* nc){
qprefix(nc->stashstats.render_min_ns, NANOSECS_IN_SEC, minbuf, 0); qprefix(nc->stashstats.render_min_ns, NANOSECS_IN_SEC, minbuf, 0);
qprefix(nc->stashstats.render_max_ns, NANOSECS_IN_SEC, maxbuf, 0); qprefix(nc->stashstats.render_max_ns, NANOSECS_IN_SEC, maxbuf, 0);
qprefix(nc->stashstats.render_ns / nc->stashstats.renders, NANOSECS_IN_SEC, avgbuf, 0); qprefix(nc->stashstats.render_ns / nc->stashstats.renders, NANOSECS_IN_SEC, avgbuf, 0);
fprintf(stderr, "\n%ju render%s, %ss total (%ss min, %ss max, %ss avg)\n", fprintf(stderr, "\n%ju render%s, %ss (%ss min, %ss avg, %ss max)\n",
nc->stashstats.renders, nc->stashstats.renders == 1 ? "" : "s", nc->stashstats.renders, nc->stashstats.renders == 1 ? "" : "s",
totalbuf, minbuf, maxbuf, avgbuf); totalbuf, minbuf, avgbuf, maxbuf);
qprefix(nc->stashstats.raster_ns, NANOSECS_IN_SEC, totalbuf, 0); qprefix(nc->stashstats.raster_ns, NANOSECS_IN_SEC, totalbuf, 0);
qprefix(nc->stashstats.raster_min_ns, NANOSECS_IN_SEC, minbuf, 0); qprefix(nc->stashstats.raster_min_ns, NANOSECS_IN_SEC, minbuf, 0);
qprefix(nc->stashstats.raster_max_ns, NANOSECS_IN_SEC, maxbuf, 0); qprefix(nc->stashstats.raster_max_ns, NANOSECS_IN_SEC, maxbuf, 0);
qprefix(nc->stashstats.raster_ns / nc->stashstats.writeouts, NANOSECS_IN_SEC, avgbuf, 0); qprefix(nc->stashstats.raster_ns / nc->stashstats.writeouts, NANOSECS_IN_SEC, avgbuf, 0);
fprintf(stderr, "%ju raster%s, %ss total (%ss min, %ss max, %ss avg)\n", fprintf(stderr, "%ju raster%s, %ss (%ss min, %ss avg, %ss max)\n",
nc->stashstats.writeouts, nc->stashstats.writeouts == 1 ? "" : "s", nc->stashstats.writeouts, nc->stashstats.writeouts == 1 ? "" : "s",
totalbuf, minbuf, maxbuf, avgbuf); totalbuf, minbuf, avgbuf, maxbuf);
qprefix(nc->stashstats.writeout_ns, NANOSECS_IN_SEC, totalbuf, 0); qprefix(nc->stashstats.writeout_ns, NANOSECS_IN_SEC, totalbuf, 0);
qprefix(nc->stashstats.writeout_min_ns, NANOSECS_IN_SEC, minbuf, 0); qprefix(nc->stashstats.writeout_min_ns, NANOSECS_IN_SEC, minbuf, 0);
qprefix(nc->stashstats.writeout_max_ns, NANOSECS_IN_SEC, maxbuf, 0); qprefix(nc->stashstats.writeout_max_ns, NANOSECS_IN_SEC, maxbuf, 0);
qprefix(nc->stashstats.writeouts ? nc->stashstats.writeout_ns / nc->stashstats.writeouts : 0, qprefix(nc->stashstats.writeouts ? nc->stashstats.writeout_ns / nc->stashstats.writeouts : 0,
NANOSECS_IN_SEC, avgbuf, 0); NANOSECS_IN_SEC, avgbuf, 0);
fprintf(stderr, "%ju write%s, %ss total (%ss min, %ss max, %ss avg)\n", fprintf(stderr, "%ju write%s, %ss (%ss min, %ss avg, %ss max)\n",
nc->stashstats.writeouts, nc->stashstats.writeouts == 1 ? "" : "s", nc->stashstats.writeouts, nc->stashstats.writeouts == 1 ? "" : "s",
totalbuf, minbuf, maxbuf, avgbuf); totalbuf, minbuf, avgbuf, maxbuf);
bprefix(nc->stashstats.render_bytes, 1, totalbuf, 0), bprefix(nc->stashstats.render_bytes, 1, totalbuf, 1),
bprefix(nc->stashstats.render_min_bytes, 1, minbuf, 0), bprefix(nc->stashstats.render_min_bytes, 1, minbuf, 1),
bprefix(nc->stashstats.render_max_bytes, 1, maxbuf, 0), bprefix(nc->stashstats.renders ? nc->stashstats.render_bytes / nc->stashstats.renders : 0, 1, avgbuf, 1);
fprintf(stderr, "%sB total (%sB min, %sB max, %.03gKiB avg)\n", bprefix(nc->stashstats.render_max_bytes, 1, maxbuf, 1),
totalbuf, minbuf, maxbuf, fprintf(stderr, "%sB (%sB min, %sB avg, %sB max)\n",
nc->stashstats.render_bytes / (double)nc->stashstats.renders / 1024); totalbuf, minbuf, avgbuf, maxbuf);
} }
if(nc->stashstats.renders || nc->stashstats.failed_renders){ if(nc->stashstats.renders || nc->stashstats.failed_renders){
fprintf(stderr, "%ju failed render%s, %ju failed write%s, %ju refresh%s\n", fprintf(stderr, "%ju failed render%s, %ju failed write%s, %ju refresh%s\n",

Loading…
Cancel
Save