add debug:gl_debugging so we can disable gl debugging entirerly,
both glGetError and enabling EGL_KHR_debug has its cost, we still have
EXT_create_context_robustness and glGetGraphicsResetStatus that should
catch context loss, and is generally cheap to call it only checks a flag
set.
glGetError might cause a implicit flush to get any pending calls sent to
the gpu.
however to get EGL_KHR_debug back enabled we now require a restart of
the compositor after changing debug:gl_debugging
use auto for nsecdur, assigning system_tp into steady_tp compiles but is
not correct. just change it to auto.
use {} initialization for timespec structs and returning std::pair.
in timediff, fromTimespec and toTimespec the else case was calculating
wrong. we need to correctly handle the borrow when the nanoseconds of
the first time are smaller than the second, by adding TIMESPEC_NSEC_PER_SEC
and decrementing the seconds.
not all clients supports WM_DELETE_WINDOW like glxgears, so get
supported props in constuctor of surface, and if not supported
forcefully kill the client.
EGL_CONTEXT_RELEASE_BEHAVIOR_KHR determines what happends with implicit
flushes when context changes, on multigpu scenario we change context
frequently when blitting content. while we still rely on explicit sync
fences, the flush is destroying driver optimisations.
setting it to EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR essentially mean
just swap context and continue processing on the next context.
Handle XCB_PROPERTY_NEW_VALUE events for incremental selection transfers.
Previously only DELETE was handled, causing INCR transfers to fail after
the first chunk.
Fixes#11411
- Add return 0 after erasing completed non-incremental transfer to stop event source polling
- Add removeTransfer() helper to SXSelection for cleaning transfers by window ID
- Add removeTransfersForWindow() helper to CXWM for cleaning all selections at once
- Clean orphan transfers in handleDestroy before surface removal
- Clean orphan transfers in handlePropertyNotify on missing window or failed reply
- Add m_dndSelection to handleSelectionPropertyNotify cleanup loop
- Initialize SXTransfer members with safe defaults to prevent undefined behavior
- Fix race condition in getTransferData by using window ID lookup instead of index
* eventloopmgr: use unordered_map for readableWaiters
use an unordered_map with the raw ptr as key, avoids any risk of
dangling ptrs.
* eventloopmgr: read the timerfd fd
the manpage for timerfd_create and read states this.
timefd_create creates a new timer object, and returns a file descriptor
that can be used to read the number of expirations that have occurred.
The FD becomes readable when the timer expires.
read removes the “readable” state from the FD.
so most likely it has somewhat worked because of the scheduleRecalc()
function.
* eventloopmgr: avoid unneeded std::function copy
move the idle functions instead of copying.
* eventloopmgr: remove event source before calling fn
if fn causes a dispatch/reentry its gonna cause UB inside libwayland
itself, remove the event source before calling the fn() avoids that
entirerly. even if a new dispatch occurs.
* eventloopmgr: check if timer fd is readable
check if timerfd is readable before calling read on it, so we dont end
up blocking on an accident, log an error if its not readable.
* eventloopmgr: revert unordered_map change
my mistake, the address wasnt changing on reallocations of the heap
object. the only issue i was triggering was the reentry path in fn()
After suspend/wake, the animation tick timer state (m_lastTickValid,
m_tickScheduled) could be stale, causing framerate drops when blur is
enabled. This was introduced in 2b0fd417 which changed the animation
tick timing mechanism.
Reset the tick state when the session becomes active to ensure a clean
state for the animation system.