diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2013-08-10 17:18:12 +0200 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2013-08-10 17:18:12 +0200 |
commit | 6714d6fc820e56ea53cd67e604a0928e7a974e84 (patch) | |
tree | dba649c6bc5bc2c0135c1823112809db602bfc80 /src/gui/curses | |
parent | a5cbfdf7fd38a14be47c898a66aac5737bbb1c4b (diff) | |
download | weechat-6714d6fc820e56ea53cd67e604a0928e7a974e84.zip |
core: optimize the removal of lines in buffers (a lot faster to clear/close buffers with lot of lines)
The update of variables "buffer_max_length" and "prefix_max_length" in struct
t_gui_lines is now delayed and made during the main refresh (in main loop).
For a buffer with 50K lines, it is up to 3300 times faster to clear/close it.
For a buffer with 4096 lines (default limit), it is up to 120 times faster.
Diffstat (limited to 'src/gui/curses')
-rw-r--r-- | src/gui/curses/gui-curses-main.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/gui/curses/gui-curses-main.c b/src/gui/curses/gui-curses-main.c index 0cc13acee..5377d88eb 100644 --- a/src/gui/curses/gui-curses-main.c +++ b/src/gui/curses/gui-curses-main.c @@ -51,6 +51,7 @@ #include "../gui-filter.h" #include "../gui-input.h" #include "../gui-layout.h" +#include "../gui-line.h" #include "../gui-history.h" #include "../gui-mouse.h" #include "../gui-nicklist.h" @@ -311,6 +312,35 @@ gui_main_refreshs () gui_color_buffer_refresh_needed = 0; } + /* compute max length for prefix/buffer if needed */ + for (ptr_buffer = gui_buffers; ptr_buffer; + ptr_buffer = ptr_buffer->next_buffer) + { + /* compute buffer/prefix max length for own_lines */ + if (ptr_buffer->own_lines) + { + if (ptr_buffer->own_lines->buffer_max_length_refresh) + { + gui_line_compute_buffer_max_length (ptr_buffer, + ptr_buffer->own_lines); + } + if (ptr_buffer->own_lines->prefix_max_length_refresh) + gui_line_compute_prefix_max_length (ptr_buffer->own_lines); + } + + /* compute buffer/prefix max length for mixed_lines */ + if (ptr_buffer->mixed_lines) + { + if (ptr_buffer->mixed_lines->buffer_max_length_refresh) + { + gui_line_compute_buffer_max_length (ptr_buffer, + ptr_buffer->mixed_lines); + } + if (ptr_buffer->mixed_lines->prefix_max_length_refresh) + gui_line_compute_prefix_max_length (ptr_buffer->mixed_lines); + } + } + /* refresh window if needed */ if (gui_window_refresh_needed) { |