summaryrefslogtreecommitdiff
path: root/src/gui/curses
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2013-08-10 17:18:12 +0200
committerSebastien Helleu <flashcode@flashtux.org>2013-08-10 17:18:12 +0200
commit6714d6fc820e56ea53cd67e604a0928e7a974e84 (patch)
treedba649c6bc5bc2c0135c1823112809db602bfc80 /src/gui/curses
parenta5cbfdf7fd38a14be47c898a66aac5737bbb1c4b (diff)
downloadweechat-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.c30
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)
{