[PATCH xserver 15/24] kdrive/ephyr: Use NotifyFd for XCB connection input
Keith Packard
keithp at keithp.com
Sun Sep 20 23:16:26 PDT 2015
Eliminates polling every 20ms for device input.
Signed-off-by: Keith Packard <keithp at keithp.com>
---
hw/kdrive/ephyr/ephyr.c | 10 +++++++++-
hw/kdrive/ephyr/ephyr.h | 3 ---
hw/kdrive/ephyr/hostx.c | 6 ++++++
hw/kdrive/ephyr/hostx.h | 2 ++
hw/kdrive/ephyr/os.c | 1 -
5 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index e6e72d3..bf921e9 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -1193,7 +1193,7 @@ ephyrProcessConfigureNotify(xcb_generic_event_t *xev)
#endif /* RANDR */
}
-void
+static void
ephyrPoll(void)
{
xcb_connection_t *conn = hostx_get_xcbconn();
@@ -1341,10 +1341,17 @@ MouseInit(KdPointerInfo * pi)
return Success;
}
+static void
+kdrive_notify_conn(int fd, int ready, void *data)
+{
+ ephyrPoll();
+}
+
static Status
MouseEnable(KdPointerInfo * pi)
{
((EphyrPointerPrivate *) pi->driverPrivate)->enabled = TRUE;
+ SetNotifyFd(hostx_get_fd(), kdrive_notify_conn, X_NOTIFY_READ, NULL);
return Success;
}
@@ -1352,6 +1359,7 @@ static void
MouseDisable(KdPointerInfo * pi)
{
((EphyrPointerPrivate *) pi->driverPrivate)->enabled = FALSE;
+ RemoveNotifyFd(hostx_get_fd());
return;
}
diff --git a/hw/kdrive/ephyr/ephyr.h b/hw/kdrive/ephyr/ephyr.h
index 18bfe11..f5015f6 100644
--- a/hw/kdrive/ephyr/ephyr.h
+++ b/hw/kdrive/ephyr/ephyr.h
@@ -168,9 +168,6 @@ Bool
Bool
ephyrCreateColormap(ColormapPtr pmap);
-void
- ephyrPoll(void);
-
#ifdef RANDR
Bool
ephyrRandRGetInfo(ScreenPtr pScreen, Rotation * rotations);
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
index dc265d5..09e9333 100644
--- a/hw/kdrive/ephyr/hostx.c
+++ b/hw/kdrive/ephyr/hostx.c
@@ -1103,6 +1103,12 @@ hostx_get_screen(void)
}
int
+hostx_get_fd(void)
+{
+ return xcb_get_file_descriptor(HostX.conn);
+}
+
+int
hostx_get_window(int a_screen_number)
{
EphyrScrPriv *scrpriv;
diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h
index 93aaa50..65d3ebb 100644
--- a/hw/kdrive/ephyr/hostx.h
+++ b/hw/kdrive/ephyr/hostx.h
@@ -198,4 +198,6 @@ int hostx_has_dri(void);
int hostx_has_glx(void);
#endif /* XF86DRI */
+int hostx_get_fd(void);
+
#endif /*_XLIBS_STUFF_H_*/
diff --git a/hw/kdrive/ephyr/os.c b/hw/kdrive/ephyr/os.c
index 0dbcbb8..b481d0a 100644
--- a/hw/kdrive/ephyr/os.c
+++ b/hw/kdrive/ephyr/os.c
@@ -45,5 +45,4 @@ EphyrInit(void)
KdOsFuncs EphyrOsFuncs = {
.Init = EphyrInit,
- .pollEvents = ephyrPoll,
};
--
2.5.0
More information about the xorg-devel
mailing list