dix: provide accessor methods for the last device event time
And now that we have the accessors, localize it. No functional changes, just preparing for a future change. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
b7c9bd9cf2
commit
efc1035ca9
|
@ -392,9 +392,7 @@ ScreenSaverFreeSuspend(pointer value, XID id)
|
|||
DeviceIntPtr dev;
|
||||
UpdateCurrentTimeIf();
|
||||
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
||||
lastDeviceEventTime[dev->id] = currentTime;
|
||||
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||
lastDeviceEventTime[XIAllMasterDevices] = currentTime;
|
||||
NoticeTime(dev, currentTime);
|
||||
SetScreenSaverTimer();
|
||||
}
|
||||
}
|
||||
|
@ -681,7 +679,7 @@ ProcScreenSaverQueryInfo(ClientPtr client)
|
|||
pPriv = GetScreenPrivate(pDraw->pScreen);
|
||||
|
||||
UpdateCurrentTime();
|
||||
lastInput = GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds;
|
||||
lastInput = GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds;
|
||||
|
||||
rep = (xScreenSaverQueryInfoReply) {
|
||||
.type = X_Reply,
|
||||
|
|
|
@ -2605,7 +2605,7 @@ IdleTimeQueryValue(pointer pCounter, CARD64 * pValue_return)
|
|||
}
|
||||
else
|
||||
deviceid = XIAllDevices;
|
||||
idle = GetTimeInMillis() - lastDeviceEventTime[deviceid].milliseconds;
|
||||
idle = GetTimeInMillis() - LastEventTime(deviceid).milliseconds;
|
||||
XSyncIntsToValue(pValue_return, idle, 0);
|
||||
}
|
||||
|
||||
|
|
43
dix/events.c
43
dix/events.c
|
@ -262,6 +262,8 @@ InputInfo inputInfo;
|
|||
|
||||
EventSyncInfoRec syncEvents;
|
||||
|
||||
static TimeStamp lastDeviceEventTime[MAXDEVICES];
|
||||
|
||||
/**
|
||||
* The root window the given device is currently on.
|
||||
*/
|
||||
|
@ -1043,33 +1045,47 @@ XineramaGetCursorScreen(DeviceIntPtr pDev)
|
|||
#define TIMESLOP (5 * 60 * 1000) /* 5 minutes */
|
||||
|
||||
static void
|
||||
MonthChangedOrBadTime(InternalEvent *ev)
|
||||
MonthChangedOrBadTime(CARD32 *ms)
|
||||
{
|
||||
/* If the ddx/OS is careless about not processing timestamped events from
|
||||
* different sources in sorted order, then it's possible for time to go
|
||||
* backwards when it should not. Here we ensure a decent time.
|
||||
*/
|
||||
if ((currentTime.milliseconds - ev->any.time) > TIMESLOP)
|
||||
if ((currentTime.milliseconds - *ms) > TIMESLOP)
|
||||
currentTime.months++;
|
||||
else
|
||||
ev->any.time = currentTime.milliseconds;
|
||||
*ms = currentTime.milliseconds;
|
||||
}
|
||||
|
||||
void
|
||||
NoticeTime(const DeviceIntPtr dev, TimeStamp time)
|
||||
{
|
||||
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||
lastDeviceEventTime[dev->id] = currentTime;
|
||||
}
|
||||
|
||||
static void
|
||||
NoticeTime(InternalEvent *ev, DeviceIntPtr dev)
|
||||
NoticeTimeMillis(const DeviceIntPtr dev, CARD32 *ms)
|
||||
{
|
||||
if (ev->any.time < currentTime.milliseconds)
|
||||
MonthChangedOrBadTime(ev);
|
||||
currentTime.milliseconds = ev->any.time;
|
||||
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||
lastDeviceEventTime[dev->id] = currentTime;
|
||||
TimeStamp time;
|
||||
if (*ms < currentTime.milliseconds)
|
||||
MonthChangedOrBadTime(ms);
|
||||
time.months = currentTime.months;
|
||||
time.milliseconds = *ms;
|
||||
NoticeTime(dev, time);
|
||||
}
|
||||
|
||||
void
|
||||
NoticeEventTime(InternalEvent *ev, DeviceIntPtr dev)
|
||||
{
|
||||
if (!syncEvents.playingEvents)
|
||||
NoticeTime(ev, dev);
|
||||
NoticeTimeMillis(dev, &ev->any.time);
|
||||
}
|
||||
|
||||
TimeStamp
|
||||
LastEventTime(int deviceid)
|
||||
{
|
||||
return lastDeviceEventTime[deviceid];
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1093,7 +1109,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
|
|||
if (!xorg_list_is_empty(&syncEvents.pending))
|
||||
tail = xorg_list_last_entry(&syncEvents.pending, QdEventRec, next);
|
||||
|
||||
NoticeTime((InternalEvent *)event, device);
|
||||
NoticeTimeMillis(device, &ev->any.time);
|
||||
|
||||
/* Fix for key repeating bug. */
|
||||
if (device->key != NULL && device->key->xkbInfo != NULL &&
|
||||
|
@ -5276,8 +5292,11 @@ InitEvents(void)
|
|||
inputInfo.pointer = (DeviceIntPtr) NULL;
|
||||
|
||||
for (i = 0; i < MAXDEVICES; i++) {
|
||||
DeviceIntRec dummy;
|
||||
memcpy(&event_filters[i], default_filter, sizeof(default_filter));
|
||||
lastDeviceEventTime[i] = currentTime;
|
||||
|
||||
dummy.id = i;
|
||||
NoticeTime(&dummy, currentTime);
|
||||
}
|
||||
|
||||
syncEvents.replayDev = (DeviceIntPtr) NULL;
|
||||
|
|
|
@ -122,7 +122,6 @@ Bool party_like_its_1989 = FALSE;
|
|||
Bool whiteRoot = FALSE;
|
||||
|
||||
TimeStamp currentTime;
|
||||
TimeStamp lastDeviceEventTime[MAXDEVICES];
|
||||
|
||||
int defaultColorVisualClass = -1;
|
||||
int monitorResolution = 0;
|
||||
|
|
|
@ -3089,9 +3089,7 @@ dixSaveScreens(ClientPtr client, int on, int mode)
|
|||
DeviceIntPtr dev;
|
||||
UpdateCurrentTimeIf();
|
||||
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
||||
lastDeviceEventTime[dev->id] = currentTime;
|
||||
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||
lastDeviceEventTime[XIAllMasterDevices] = currentTime;
|
||||
NoticeTime(dev, currentTime);
|
||||
}
|
||||
SetScreenSaverTimer();
|
||||
}
|
||||
|
|
|
@ -314,9 +314,14 @@ GetCurrentRootWindow(DeviceIntPtr pDev);
|
|||
extern _X_EXPORT WindowPtr
|
||||
GetSpriteWindow(DeviceIntPtr pDev);
|
||||
|
||||
extern _X_EXPORT void
|
||||
NoticeTime(const DeviceIntPtr dev,
|
||||
TimeStamp time);
|
||||
extern _X_EXPORT void
|
||||
NoticeEventTime(InternalEvent *ev,
|
||||
DeviceIntPtr dev);
|
||||
extern _X_EXPORT TimeStamp
|
||||
LastEventTime(int deviceid);
|
||||
|
||||
extern void
|
||||
EnqueueEvent(InternalEvent * /* ev */ ,
|
||||
|
|
|
@ -144,7 +144,6 @@ typedef struct _WorkQueue {
|
|||
} WorkQueueRec;
|
||||
|
||||
extern _X_EXPORT TimeStamp currentTime;
|
||||
extern _X_EXPORT TimeStamp lastDeviceEventTime[MAXDEVICES];
|
||||
|
||||
extern _X_EXPORT int
|
||||
CompareTimeStamps(TimeStamp /*a */ ,
|
||||
|
|
|
@ -561,7 +561,7 @@ NextDPMSTimeout(INT32 timeout)
|
|||
static CARD32
|
||||
ScreenSaverTimeoutExpire(OsTimerPtr timer, CARD32 now, pointer arg)
|
||||
{
|
||||
INT32 timeout = now - lastDeviceEventTime[XIAllDevices].milliseconds;
|
||||
INT32 timeout = now - LastEventTime(XIAllDevices).milliseconds;
|
||||
CARD32 nextTimeout = 0;
|
||||
|
||||
#ifdef DPMSExtension
|
||||
|
|
|
@ -1391,7 +1391,7 @@ recv_alive_msg(unsigned length)
|
|||
if (SessionRunning && AliveSessionID == SessionID) {
|
||||
/* backoff dormancy period */
|
||||
state = XDM_RUN_SESSION;
|
||||
if ((GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds) >
|
||||
if ((GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds) >
|
||||
keepaliveDormancy * 1000) {
|
||||
keepaliveDormancy <<= 1;
|
||||
if (keepaliveDormancy > XDM_MAX_DORMANCY)
|
||||
|
|
Loading…
Reference in New Issue