From ce9eeecc3b2d711b36da688bfabe1f931ae59434 Mon Sep 17 00:00:00 2001 From: nick black Date: Sun, 15 Dec 2019 12:23:38 -0500 Subject: [PATCH] render: eliminate grotesque stupidity We were doing an entire copy of the framebuffer every fucking render for no good reason whatsoever. Found this while working on #83, but let's get it in master immediately. JFC. I suck. Before (delay factor of 0.5): [schwarzgerat](0) $ time ./notcurses-demo -d.5 Term: xterm with direct-color indexing 1737 renders, 24.8s total (0.00131s min, 0.362s max, 0.014s avg 70.1 fps) 230217.182KB total (12.696KB min, 223.310KB max, 132.54KB avg) Emits/elides: def 1074878/126257 fg 6615070/3023957 bg 5519815/3130192 Elide rates: 10.51% 31.37% 36.19% real 0m47.653s user 0m8.977s sys 0m1.414s [schwarzgerat](0) $ After (same delay factor of 0.5) [schwarzgerat](0) $ time ./notcurses-demo -d.5 Term: xterm with direct-color indexing 1741 renders, 23.2s total (0.00125s min, 0.351s max, 0.013s avg 75.0 fps) 231551.089KB total (12.696KB min, 223.310KB max, 133.00KB avg) Emits/elides: def 1065445/126257 fg 6655295/3006679 bg 5566155/3115184 Elide rates: 10.59% 31.12% 35.88% real 0m46.140s user 0m8.932s sys 0m1.350s [schwarzgerat](0) $ Now *there's* the loss we saw during #139 work, thinking we'd get it back in #143. Good. Huzzah! But also fuck! --- src/lib/notcurses.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/notcurses.c b/src/lib/notcurses.c index 6fa4c9587..bd874c22e 100644 --- a/src/lib/notcurses.c +++ b/src/lib/notcurses.c @@ -381,6 +381,9 @@ int notcurses_resize(notcurses* n, int* rows, int* cols){ if(update_term_dimensions(n, rows, cols)){ return -1; } + if(*rows == oldrows && *cols == oldcols){ + return 0; // no change mang + } ncplane* p = n->stdscr; cell* preserved = p->fb; size_t fbsize = sizeof(*preserved) * (*rows * *cols);