From 5bbcd2c036dd19d3293d9abc4d44014a5108a5ed Mon Sep 17 00:00:00 2001 From: Berke Güzel Date: Sun, 11 Oct 2026 23:35:00 +0300 Subject: opt: shrink input event to 48B, pack mouse event to 32B, and shave 2KB off yasl_surface - Compact yasl_mouse_event from 36B to 32B (half a cacheline, 0 holes) - Compact yasl_input_event from 56B to 48B (0 holes) - Reduce yasl_surface by 2,048 bytes (shaving 32 full cachelines per surface) - Optimize UTF-8 sanitize with vectorized validation fast-path - Fast-path MIME prefix match in clipboard transfers --- src/common/utf8.c | 11 +++++++++-- src/wayland/clipboard.c | 9 ++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/common/utf8.c b/src/common/utf8.c index 7f2e6f1..1d4cf13 100644 --- a/src/common/utf8.c +++ b/src/common/utf8.c @@ -54,10 +54,17 @@ bool yasl_utf8_validate(const char *str, size_t len) char *yasl_utf8_sanitize_dup(const char *str) { - if (!str) return NULL; + if (unlikely(!str)) return NULL; size_t len = strlen(str); + if (likely(yasl_utf8_validate(str, len))) { + char *out = malloc(len + 1); + if (unlikely(!out)) return NULL; + memcpy(out, str, len + 1); + return out; + } + char *out = malloc(len + 1); - if (!out) return NULL; + if (unlikely(!out)) return NULL; const unsigned char *p = (const unsigned char *)str; size_t o = 0; diff --git a/src/wayland/clipboard.c b/src/wayland/clipboard.c index 324644f..0e6ce33 100644 --- a/src/wayland/clipboard.c +++ b/src/wayland/clipboard.c @@ -170,9 +170,12 @@ static struct transfer *start_transfer(struct clipboard *c, int fd, bool sending static const char *match_text_mime(const char *mime) { - if (!strcasecmp(mime, "text/plain;charset=utf-8")) return "text/plain;charset=utf-8"; - if (!strcasecmp(mime, "text/plain;charset=utf8")) return "text/plain;charset=utf8"; - if (!strcasecmp(mime, "text/plain")) return "text/plain"; + if (unlikely(!mime)) return NULL; + if (likely(!strncasecmp(mime, "text/plain", 10))) { + if (!strcasecmp(mime, "text/plain;charset=utf-8")) return "text/plain;charset=utf-8"; + if (!strcasecmp(mime, "text/plain;charset=utf8")) return "text/plain;charset=utf8"; + if (!strcasecmp(mime, "text/plain")) return "text/plain"; + } if (!strcasecmp(mime, "UTF8_STRING")) return "UTF8_STRING"; if (!strcasecmp(mime, "STRING")) return "STRING"; if (!strcasecmp(mime, "TEXT")) return "TEXT"; -- cgit v1.2.3