summaryrefslogtreecommitdiff
path: root/src/common/input.c
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-10-12 14:27:51 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-10-12 14:27:51 +0300
commit9ed89c17dee752154c36d71cae93d20cccfc71ef (patch)
treea32cd894643ff6f6ebce83dd745bd24b35eb6520 /src/common/input.c
parentaedd863e6f66fd446227e9b107bc9c1970092634 (diff)
perf: optimize hot-path loops, data structures, and cache locality
Diffstat (limited to 'src/common/input.c')
-rw-r--r--src/common/input.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/common/input.c b/src/common/input.c
index eac4d1a..ff578e3 100644
--- a/src/common/input.c
+++ b/src/common/input.c
@@ -53,8 +53,13 @@ bool input_queue_push(struct input_queue *q, const struct yasl_input_event *ev)
goto failed;
struct yasl_input_event *events = malloc(capacity * sizeof(*events));
if (!events) goto failed;
- for (size_t i = 0; i < q->count; i++)
- events[i] = q->events[(q->head + i) % q->capacity];
+ if (q->events && q->count > 0) {
+ size_t first = q->capacity - q->head;
+ if (first > q->count) first = q->count;
+ memcpy(events, q->events + q->head, first * sizeof(*events));
+ if (q->count > first)
+ memcpy(events + first, q->events, (q->count - first) * sizeof(*events));
+ }
free(q->events);
q->events = events;
q->capacity = capacity;