mirror of
https://github.com/wez/wezterm.git
synced 2024-12-24 22:01:47 +03:00
e188406dfc
This commit decomposes the main get_semantic_zones method into two parts: * A per-line portion, where the line ranges are cached (invalidated on change) * The overall screen portion, where the line ranges are merged This changes the overall complexity of computing zones from O(width * scrollback-height) To an incremental: O((width * number of changed lines since last query) + scrollback-height) You can see some samples of elapsed time below; those show the times for running both the old and the new implementation on the same data. The number of lines/zones in the scrollback increases with each call and you can see that the new implementation is a bit faster anyway at low volumes but is significantly faster as the number of lines/zones increases, because the amount of work is reduced. ``` get_semantic_zones: 71.708µs get_semantic_zones_new: 59.041µs get_semantic_zones: 71.166µs get_semantic_zones_new: 9.166µs get_semantic_zones: 44.291µs get_semantic_zones_new: 4.208µs get_semantic_zones: 69.791µs get_semantic_zones_new: 10.291µs get_semantic_zones: 59.375µs get_semantic_zones_new: 7.958µs get_semantic_zones: 52.5µs get_semantic_zones_new: 4.5µs get_semantic_zones: 91.791µs get_semantic_zones_new: 20.916µs get_semantic_zones: 229.916µs get_semantic_zones_new: 109.208µs get_semantic_zones: 224.125µs get_semantic_zones_new: 15.208µs get_semantic_zones: 291.791µs get_semantic_zones_new: 11.833µs get_semantic_zones: 238.875µs get_semantic_zones_new: 12.625µs get_semantic_zones: 468.458µs get_semantic_zones_new: 126.583µs get_semantic_zones: 460.5µs get_semantic_zones_new: 25.666µs get_semantic_zones: 358.291µs get_semantic_zones_new: 19.541µs get_semantic_zones: 436.833µs get_semantic_zones_new: 17.875µs get_semantic_zones: 313.166µs get_semantic_zones_new: 15.25µs get_semantic_zones: 333.958µs get_semantic_zones_new: 16.541µs get_semantic_zones: 364.666µs get_semantic_zones_new: 14.041µs ``` |
||
---|---|---|
.. | ||
caps | ||
escape | ||
lineedit | ||
render | ||
surface | ||
terminal | ||
tmux_cc | ||
widgets | ||
cell.rs | ||
cellcluster.rs | ||
color.rs | ||
emoji_presentation.rs | ||
emoji.rs | ||
error.rs | ||
hyperlink.rs | ||
image.rs | ||
input.rs | ||
istty.rs | ||
keymap.rs | ||
lib.rs | ||
macros.rs | ||
nerdfonts_data.rs | ||
nerdfonts.rs | ||
readbuf.rs | ||
rgb.txt | ||
widechar_width.rs |