summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2024-05-06 22:42:39 +0200
committerAlbert Cervin <albert@acervin.com>2024-05-06 22:42:39 +0200
commitad0cd5c036f0080ee8d97db2e67b8d54186d1e33 (patch)
treeb85cc21acac6e1383dfa3b78494ce09c409b2f30 /src/main
parentc42412e1643c88c81cf5b38404cc010881437fe9 (diff)
downloaddged-ad0cd5c036f0080ee8d97db2e67b8d54186d1e33.tar.gz
dged-ad0cd5c036f0080ee8d97db2e67b8d54186d1e33.tar.xz
dged-ad0cd5c036f0080ee8d97db2e67b8d54186d1e33.zip
Fix slow buffer paste
Was caused by updating all buffer hooks on every char insert. Particularily, the syntax update takes a little bit too long to call on every char. Now the keyboard parsing routine compresses all consecutive self-inserting chars into one "key press". Also fix some small issues with timers and update them with a min and max.
Diffstat (limited to 'src/main')
-rw-r--r--src/main/cmds.c4
-rw-r--r--src/main/main.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/src/main/cmds.c b/src/main/cmds.c
index 4dc84ed..04e42b4 100644
--- a/src/main/cmds.c
+++ b/src/main/cmds.c
@@ -189,7 +189,9 @@ void timer_to_list_line(const struct timer *timer, void *userdata) {
const char *name = timer_name(timer);
size_t namelen = strlen(name);
size_t len =
- snprintf(buf, 128, "%s - %.2f ms", name, (timer_average(timer) / 1e6));
+ snprintf(buf, 128, "%s - %.2f ms (min: %.2f, max: %.2f)", name,
+ (timer_average(timer) / 1e6), timer_min(timer) / (float)1e6,
+ timer_max(timer) / (float)1e6);
buffer_add(target, buffer_end(target), (uint8_t *)buf, len);
}
diff --git a/src/main/main.c b/src/main/main.c
index 169716d..7dab26b 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -429,6 +429,7 @@ int main(int argc, char *argv[]) {
}
}
} else if (k->mod == 0) {
+ // self-inserting chars
buffer_view_add(window_buffer_view(active_window),
&kbd_upd.raw[k->start], k->end - k->start);
} else {
@@ -453,6 +454,7 @@ int main(int argc, char *argv[]) {
frame_time = timer_average(update_windows) +
timer_average(update_keyboard) + timer_average(update_display);
+ timers_end_frame();
frame_allocator_clear(&frame_allocator);
}