diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2015-11-06 00:07:45 +0200 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2015-11-06 09:32:56 +0100 |
commit | b39b142f6b99074376fad020e65e22e42809b971 (patch) | |
tree | 25607173f0770ab50096359c0e19a70f0cef59da | |
parent | a5838d3ec8bc987930df68545e1e91374ee4fca7 (diff) |
flowtop: Redraw screen in 1s if no key was pressed
Seems like screen is updating too frequently which
may block some terminals, so lets do it once in 1s
but only if no key was pressed.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-rw-r--r-- | flowtop.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -1161,6 +1161,8 @@ static void presenter_screen_update(WINDOW *screen, struct flow_list *fl, static void presenter(void) { + int time_sleep_us = 200000; + int time_passed_us = 0; int skip_lines = 0; WINDOW *screen; @@ -1170,6 +1172,8 @@ static void presenter(void) rcu_register_thread(); while (!sigint) { + bool do_redraw = true; + switch (getch()) { case 'q': sigint = 1; @@ -1190,11 +1194,21 @@ static void presenter(void) break; default: fflush(stdin); + do_redraw = false; break; } - presenter_screen_update(screen, &flow_list, skip_lines); - usleep(200000); + if (!do_redraw) + do_redraw = time_passed_us >= 1 * USEC_PER_SEC; + + if (do_redraw) { + presenter_screen_update(screen, &flow_list, skip_lines); + time_passed_us = 0; + } else { + time_passed_us += time_sleep_us; + } + + usleep(time_sleep_us); } rcu_unregister_thread(); |