[ui] lower the index rebuild frequency when the command line is active

pull/142/head
Timothy Stack 9 years ago
parent ef36548b82
commit 219a4baad1

@ -67,7 +67,7 @@ public:
bss_last_filtered_count(0),
bss_filter_counter(0)
{
this->bss_fields[BSF_LINE_NUMBER].set_width(10);
this->bss_fields[BSF_LINE_NUMBER].set_width(11);
this->bss_fields[BSF_PERCENT].set_width(4);
this->bss_fields[BSF_HITS].set_width(36);
this->bss_fields[BSF_FILTERED].set_width(20);

@ -3636,11 +3636,13 @@ static void looper(void)
lnav_data.ld_scroll_broadcaster.invoke(lnav_data.ld_view_stack.top());
bool session_loaded = false;
struct timeval curr_to = { 0, 330000 };
ui_periodic_timer &timer = ui_periodic_timer::singleton();
static sig_atomic_t index_counter;
timer.start_fade(index_counter, 1);
while (lnav_data.ld_looping) {
fd_set ready_rfds = lnav_data.ld_read_fds;
struct timeval to = curr_to;
struct timeval to = { 0, 333000 };
int rc;
lnav_data.ld_top_source.update_time();
@ -3660,10 +3662,6 @@ static void looper(void)
&ready_rfds, NULL, NULL,
&to);
if (rc == -1 && errno == EINTR) {
rc = 0;
}
if (rc < 0) {
switch (errno) {
case EBADF:
@ -3680,6 +3678,9 @@ static void looper(void)
lnav_data.ld_looping = false;
}
break;
case 0:
case EINTR:
break;
default:
log_error("select %s", strerror(errno));
@ -3687,64 +3688,6 @@ static void looper(void)
break;
}
}
else if (rc == 0) {
static bool initial_build = false;
rebuild_indexes(false);
if (!initial_build &&
lnav_data.ld_log_source.text_line_count() == 0 &&
lnav_data.ld_text_source.text_line_count() > 0) {
toggle_view(&lnav_data.ld_views[LNV_TEXT]);
lnav_data.ld_views[LNV_TEXT].set_top(vis_line_t(0));
lnav_data.ld_rl_view->set_alt_value(
HELP_MSG_2(f, F,
"to switch to the next/previous file"));
}
if (!initial_build &&
lnav_data.ld_log_source.text_line_count() == 0 &&
!lnav_data.ld_other_files.empty()) {
ensure_view(&lnav_data.ld_views[LNV_SCHEMA]);
}
if (!initial_build && lnav_data.ld_flags & LNF_HELP) {
toggle_view(&lnav_data.ld_views[LNV_HELP]);
initial_build = true;
}
if (lnav_data.ld_log_source.text_line_count() > 0 ||
lnav_data.ld_text_source.text_line_count() > 0 ||
!lnav_data.ld_other_files.empty()) {
initial_build = true;
}
if (!session_loaded) {
load_session();
if (!lnav_data.ld_session_file_names.empty()) {
std::string ago;
ago = time_ago(lnav_data.ld_session_save_time);
lnav_data.ld_rl_view->set_value(
("restored session from " ANSI_BOLD_START) +
ago +
(ANSI_NORM "; press Ctrl-R to reset session"));
}
rebuild_indexes(true);
session_loaded = true;
}
curr_to.tv_usec = 330000;
{
vector<pair<string, string> > msgs;
execute_init_commands(msgs);
if (!msgs.empty()) {
pair<string, string> last_msg = msgs.back();
lnav_data.ld_rl_view->set_value(last_msg.first);
lnav_data.ld_rl_view->set_alt_value(last_msg.second);
}
}
}
else {
if (FD_ISSET(STDIN_FILENO, &ready_rfds)) {
static size_t escape_index = 0;
@ -3792,6 +3735,13 @@ static void looper(void)
handle_key(ch);
break;
}
if (!lnav_data.ld_looping) {
// No reason to keep processing input after the
// user has quit. The view stack will also be
// empty, which will cause issues.
break;
}
}
}
for (lpc = 0; lpc < LG__MAX; lpc++) {
@ -3822,6 +3772,70 @@ static void looper(void)
rlc.check_fd_set(ready_rfds);
}
if (timer.fade_diff(index_counter) == 0) {
static bool initial_build = false;
if (lnav_data.ld_mode == LNM_PAGING) {
timer.start_fade(index_counter, 1);
}
else {
timer.start_fade(index_counter, 3);
}
rebuild_indexes(false);
if (!initial_build &&
lnav_data.ld_log_source.text_line_count() == 0 &&
lnav_data.ld_text_source.text_line_count() > 0) {
toggle_view(&lnav_data.ld_views[LNV_TEXT]);
lnav_data.ld_views[LNV_TEXT].set_top(vis_line_t(0));
lnav_data.ld_rl_view->set_alt_value(
HELP_MSG_2(f, F,
"to switch to the next/previous file"));
}
if (!initial_build &&
lnav_data.ld_log_source.text_line_count() == 0 &&
!lnav_data.ld_other_files.empty()) {
ensure_view(&lnav_data.ld_views[LNV_SCHEMA]);
}
if (!initial_build && lnav_data.ld_flags & LNF_HELP) {
toggle_view(&lnav_data.ld_views[LNV_HELP]);
initial_build = true;
}
if (lnav_data.ld_log_source.text_line_count() > 0 ||
lnav_data.ld_text_source.text_line_count() > 0 ||
!lnav_data.ld_other_files.empty()) {
initial_build = true;
}
if (!session_loaded) {
load_session();
if (!lnav_data.ld_session_file_names.empty()) {
std::string ago;
ago = time_ago(lnav_data.ld_session_save_time);
lnav_data.ld_rl_view->set_value(
("restored session from " ANSI_BOLD_START) +
ago +
(ANSI_NORM "; press Ctrl-R to reset session"));
}
rebuild_indexes(true);
session_loaded = true;
}
{
vector<pair<string, string> > msgs;
execute_init_commands(msgs);
if (!msgs.empty()) {
pair<string, string> last_msg = msgs.back();
lnav_data.ld_rl_view->set_value(last_msg.first);
lnav_data.ld_rl_view->set_alt_value(last_msg.second);
}
}
}
if (lnav_data.ld_winched) {
struct winsize size;

@ -34,6 +34,7 @@
#ifndef __lnav_util_hh
#define __lnav_util_hh
#include <math.h>
#include <time.h>
#include <sys/types.h>

@ -49,7 +49,12 @@ const struct itimerval ui_periodic_timer::INTERVAL = {
ui_periodic_timer::ui_periodic_timer()
{
signal(SIGALRM, ui_periodic_timer::sigalrm);
struct sigaction sa;
sa.sa_handler = ui_periodic_timer::sigalrm;
sa.sa_flags = SA_RESTART;
sa.sa_mask = 0;
sigaction(SIGALRM, &sa, NULL);
if (setitimer(ITIMER_REAL, &INTERVAL, NULL) == -1) {
perror("setitimer");
}

Loading…
Cancel
Save