This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository e16.
View the commit online.
commit 54845aae1c034ff28de92928832bcc470f34d229
Author: Kim Woelders <k...@woelders.dk>
AuthorDate: Tue Mar 14 11:36:58 2023 +0100
events: Separate event fetching and processing
---
src/events.c | 50 ++++++++++++++++++++++++++++++++++----------------
1 file changed, 34 insertions(+), 16 deletions(-)
diff --git a/src/events.c b/src/events.c
index cc993048..bd6495ec 100644
--- a/src/events.c
+++ b/src/events.c
@@ -1014,15 +1014,23 @@ _EventFetchGeneric(XEvent * ev)
#endif /* USE_GENERIC */
static int
-EventsFetch(XEvent ** evq_ptr, int *evq_alloc)
+EventsFetch(XEvent ** evq_ptr, int *evq_size, int *evq_alloc)
{
- int i, n, count;
+ int i, n;
XEvent *evq = *evq_ptr, *ev;
+ int count = *evq_size;
int qsz = *evq_alloc;
+ int fetched;
+
+ if (EDebug(EDBUG_TYPE_EVENTS))
+ Eprintf("%s-B n=%d/%d block=%d\n", __func__,
+ *evq_size, *evq_alloc, Mode.events.block);
/* Fetch the entire event queue */
- for (i = count = 0; (n = XPending(disp)) > 0;)
+ fetched = 0;
+ for (i = count; (n = XPending(disp)) > 0;)
{
+ fetched += n;
count += n;
if (count > qsz)
{
@@ -1063,26 +1071,30 @@ EventsFetch(XEvent ** evq_ptr, int *evq_alloc)
}
}
- EventsCompress(evq, count);
-
*evq_ptr = evq;
*evq_alloc = qsz;
+ *evq_size = count;
+
+ if (EDebug(EDBUG_TYPE_EVENTS))
+ Eprintf("%s-E n=%d/%d fetched=%d\n", __func__,
+ *evq_size, *evq_alloc, fetched);
- return count;
+ return fetched; /* Return number of fetched events */
}
static int
-EventsProcess(XEvent ** evq_ptr, int *evq_alloc, int *evq_fetch)
+EventsProcess(XEvent ** evq_ptr, int *evq_size)
{
int i, n, count;
XEvent *evq;
- /* Fetch the entire event queue */
- n = EventsFetch(evq_ptr, evq_alloc);
evq = *evq_ptr;
+ n = *evq_size;
+
+ EventsCompress(evq, n);
if (EDebug(EDBUG_TYPE_EVENTS) > 1)
- Eprintf("%s-B %d\n", __func__, n);
+ Eprintf("%s-B n=%d\n", __func__, n);
for (i = count = 0; i < n; i++)
{
@@ -1100,10 +1112,9 @@ EventsProcess(XEvent ** evq_ptr, int *evq_alloc, int *evq_fetch)
if (EDebug(EDBUG_TYPE_EVENTS) > 1)
Eprintf("%s-E %d/%d\n", __func__, count, n);
- if (n > *evq_fetch)
- *evq_fetch = n;
+ *evq_size = 0; /* All events are now processed */
- return count;
+ return count; /* Return number of processed events */
}
/*
@@ -1115,6 +1126,7 @@ void
EventsMain(void)
{
static int evq_alloc = 0;
+ static int evq_size = 0;
static int evq_fetch = 0;
static XEvent *evq_ptr = NULL;
#if USE_EVHAN_SELECT
@@ -1133,15 +1145,21 @@ EventsMain(void)
{
pfetch = 0;
if (!Mode.events.block)
- count = EventsProcess(&evq_ptr, &evq_alloc, &pfetch);
+ {
+ /* Fetch the entire event queue */
+ EventsFetch(&evq_ptr, &evq_size, &evq_alloc);
+ pfetch = evq_size;
+
+ EventsProcess(&evq_ptr, &evq_size);
+ }
if (pfetch)
{
evq_fetch =
(pfetch > evq_fetch) ? pfetch : (3 * evq_fetch + pfetch) / 4;
if (EDebug(EDBUG_TYPE_EVENTS) > 1)
- Eprintf("%s - Alloc/fetch/pfetch/peak=%d/%d/%d/%d)\n",
- __func__, evq_alloc, evq_fetch, pfetch, count);
+ Eprintf("%s - Alloc/fetch/peak=%d/%d/%d)\n",
+ __func__, evq_alloc, pfetch, evq_fetch);
if ((evq_ptr) && ((evq_alloc - evq_fetch) > 64))
{
evq_alloc = 0;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.