Cleanup / optimizations
This commit is contained in:
+19
-9
@@ -46,20 +46,26 @@ void Parser::work() {
|
||||
return;
|
||||
std::vector<uint32_t> batch;
|
||||
uint32_t line_count = editor->root->line_count + 1;
|
||||
int64_t start = MIN(scroll_max + 10, line_count - 1);
|
||||
int64_t end = MAX(0, (int64_t)scroll_max - MAX_LINES_LOOKBEHIND);
|
||||
for (int64_t i = start; i >= end; --i) {
|
||||
auto l_opt = line_map.at(i);
|
||||
if (!l_opt || (l_opt && !l_opt->out_state))
|
||||
uint32_t min_line =
|
||||
scroll_max > MAX_LINES_LOOKAROUND ? scroll_max - MAX_LINES_LOOKAROUND : 0;
|
||||
uint32_t max_line = MIN(scroll_max + MAX_LINES_LOOKAROUND, line_count - 1);
|
||||
bool sequential = false;
|
||||
for (uint32_t i = min_line; i <= max_line; ++i) {
|
||||
LineData *ld = line_map.at(i);
|
||||
if ((!ld || !ld->in_state || !ld->out_state) && !sequential) {
|
||||
batch.push_back(i);
|
||||
sequential = true;
|
||||
continue;
|
||||
}
|
||||
sequential = false;
|
||||
}
|
||||
for (uint32_t c_line : batch) {
|
||||
if (!running.load(std::memory_order_relaxed))
|
||||
break;
|
||||
uint32_t min_line = scroll_max > MAX_LINES_LOOKBEHIND
|
||||
? scroll_max - MAX_LINES_LOOKBEHIND
|
||||
uint32_t min_line = scroll_max > MAX_LINES_LOOKAROUND
|
||||
? scroll_max - MAX_LINES_LOOKAROUND
|
||||
: 0;
|
||||
uint32_t max_line = scroll_max + 10;
|
||||
uint32_t max_line = scroll_max + MAX_LINES_LOOKAROUND;
|
||||
if (c_line < min_line || c_line > max_line)
|
||||
continue;
|
||||
uint32_t scroll_snapshot = scroll_max;
|
||||
@@ -78,8 +84,12 @@ void Parser::work() {
|
||||
break;
|
||||
if (scroll_snapshot != scroll_max)
|
||||
break;
|
||||
if (cur_line < min_line || cur_line > max_line)
|
||||
if (cur_line < min_line || cur_line > max_line) {
|
||||
LineData *line_data = line_map.at(cur_line);
|
||||
if (line_data)
|
||||
line_data->out_state = nullptr;
|
||||
break;
|
||||
}
|
||||
uint32_t len;
|
||||
char *line = next_line(it, &len);
|
||||
if (!line)
|
||||
|
||||
Reference in New Issue
Block a user