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
This commit is contained in:
Kovid Goyal 2020-06-09 01:04:09 +05:30
parent cd4dacb406
commit 27b6517594
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 13 additions and 1 deletions

View File

@ -43,6 +43,9 @@ To update |kitty|, :doc:`follow the instructions <binary>`.
- 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`)

11
glfw/glx_context.c vendored
View File

@ -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);