From 27b651759495fe1587f45e5004b4da3ed7658ddb Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 9 Jun 2020 01:04:09 +0530 Subject: [PATCH] X11: Reduce startup time by ~25% by only querying GLX for framebuffer configurations once On my system reduces the number of getpid() calls from 67982 to 17327 I dont know why get framebuffer config attributes requires getpid() and why it is so slow, probably a driver bug. Fixes #2754 --- docs/changelog.rst | 3 +++ glfw/glx_context.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index dc64a835b..35ef9da19 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -43,6 +43,9 @@ To update |kitty|, :doc:`follow the instructions `. - X11: Recompile keymaps on XkbNewKeyboardNotify events (:iss:`2726`) +- X11: Reduce startup time by ~25% by only querying GLX for framebuffer + configurations once (:iss:`2754`) + - macOS: Notarize the kitty application (:iss:`2040`) diff --git a/glfw/glx_context.c b/glfw/glx_context.c index 5918b52f1..edf41a8ca 100644 --- a/glfw/glx_context.c +++ b/glfw/glx_context.c @@ -58,6 +58,13 @@ static bool chooseGLXFBConfig(const _GLFWfbconfig* desired, int i, nativeCount, usableCount; const char* vendor; bool trustWindowBit = true; + static _GLFWfbconfig prev_desired = {0}; + static uintptr_t prev_result = 0; + if (prev_result != 0 && memcmp(&prev_desired, desired, sizeof(_GLFWfbconfig)) == 0) { + *result = (GLXFBConfig)prev_result; + return true; + } + prev_desired = *desired; // HACK: This is a (hopefully temporary) workaround for Chromium // (VirtualBox GL) not setting the window bit on any GLXFBConfigs @@ -133,8 +140,10 @@ static bool chooseGLXFBConfig(const _GLFWfbconfig* desired, } closest = _glfwChooseFBConfig(desired, usableConfigs, usableCount); - if (closest) + if (closest) { *result = (GLXFBConfig) closest->handle; + prev_result = (uintptr_t) closest->handle; + } XFree(nativeConfigs); free(usableConfigs);