Change lastDeviceIdleTime to be per-device

Preparation work for per-device idle counters.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
Reviewed-by: Jamey Sharp <jamey@minilop.net>
Reviewed-by: James Jones <jajones@nvidia.com>
This commit is contained in:
Peter Hutterer 2012-03-12 13:51:02 +10:00
parent 20cf0ef825
commit 6aef209ebc
11 changed files with 25 additions and 17 deletions

View File

@ -46,6 +46,7 @@ in this Software without prior written authorization from the X Consortium.
#include "cursorstr.h"
#include "colormapst.h"
#include "xace.h"
#include "inputstr.h"
#ifdef PANORAMIX
#include "panoramiX.h"
#include "panoramiXsrv.h"
@ -388,8 +389,10 @@ ScreenSaverFreeSuspend(pointer value, XID id)
if (screenIsSaved != SCREEN_SAVER_ON)
#endif
{
DeviceIntPtr dev;
UpdateCurrentTimeIf();
lastDeviceEventTime = currentTime;
nt_list_for_each_entry(dev, inputInfo.devices, next)
lastDeviceEventTime[dev->id] = currentTime;
SetScreenSaverTimer();
}
}
@ -672,7 +675,7 @@ ProcScreenSaverQueryInfo(ClientPtr client)
pPriv = GetScreenPrivate(pDraw->pScreen);
UpdateCurrentTime();
lastInput = GetTimeInMillis() - lastDeviceEventTime.milliseconds;
lastInput = GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds;
rep.type = X_Reply;
rep.length = 0;

View File

@ -2599,7 +2599,7 @@ typedef struct {
static void
IdleTimeQueryValue(pointer pCounter, CARD64 * pValue_return)
{
CARD32 idle = GetTimeInMillis() - lastDeviceEventTime.milliseconds;
CARD32 idle = GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds;
XSyncIntsToValue(pValue_return, idle, 0);
}

View File

@ -1598,7 +1598,7 @@ ProcessDeviceEvent(InternalEvent *ev, DeviceIntPtr device)
GetSpritePosition(device, &rootX, &rootY);
event->root_x = rootX;
event->root_y = rootY;
NoticeEventTime((InternalEvent *) event);
NoticeEventTime((InternalEvent *) event, device);
event->corestate = corestate;
key = event->detail.key;
break;

View File

@ -1055,19 +1055,20 @@ MonthChangedOrBadTime(InternalEvent *ev)
}
static void
NoticeTime(InternalEvent *ev)
NoticeTime(InternalEvent *ev, DeviceIntPtr dev)
{
if (ev->any.time < currentTime.milliseconds)
MonthChangedOrBadTime(ev);
currentTime.milliseconds = ev->any.time;
lastDeviceEventTime = currentTime;
lastDeviceEventTime[XIAllDevices] = currentTime;
lastDeviceEventTime[dev->id] = currentTime;
}
void
NoticeEventTime(InternalEvent *ev)
NoticeEventTime(InternalEvent *ev, DeviceIntPtr dev)
{
if (!syncEvents.playingEvents)
NoticeTime(ev);
NoticeTime(ev, dev);
}
/**************************************************************************
@ -1091,7 +1092,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);
NoticeTime((InternalEvent *)event, device);
/* Fix for key repeating bug. */
if (device->key != NULL && device->key->xkbInfo != NULL &&
@ -5163,6 +5164,7 @@ InitEvents(void)
for (i = 0; i < MAXDEVICES; i++) {
memcpy(&event_filters[i], default_filter, sizeof(default_filter));
lastDeviceEventTime[i] = currentTime;
}
syncEvents.replayDev = (DeviceIntPtr) NULL;
@ -5176,7 +5178,6 @@ InitEvents(void)
syncEvents.time.milliseconds = 0; /* hardly matters */
currentTime.months = 0;
currentTime.milliseconds = GetTimeInMillis();
lastDeviceEventTime = currentTime;
for (i = 0; i < DNPMCOUNT; i++) {
DontPropagateMasks[i] = 0;
DontPropagateRefCnts[i] = 0;

View File

@ -122,7 +122,7 @@ Bool party_like_its_1989 = FALSE;
Bool whiteRoot = FALSE;
TimeStamp currentTime;
TimeStamp lastDeviceEventTime;
TimeStamp lastDeviceEventTime[MAXDEVICES];
int defaultColorVisualClass = -1;
int monitorResolution = 0;

View File

@ -3134,8 +3134,10 @@ dixSaveScreens(ClientPtr client, int on, int mode)
screenIsSaved = what;
if (mode == ScreenSaverReset) {
if (on == SCREEN_SAVER_FORCER) {
DeviceIntPtr dev;
UpdateCurrentTimeIf();
lastDeviceEventTime = currentTime;
nt_list_for_each_entry(dev, inputInfo.devices, next)
lastDeviceEventTime[dev->id] = currentTime;
}
SetScreenSaverTimer();
}

View File

@ -340,7 +340,8 @@ KdEnableInput(void)
/* reset screen saver */
ev.any.time = GetTimeInMillis();
NoticeEventTime(&ev);
NoticeEventTime(&ev, pi->dixdev);
NoticeEventTime(&ev, ki->dixdev);
KdUnblockSigio();
}

View File

@ -313,7 +313,8 @@ extern _X_EXPORT WindowPtr
GetSpriteWindow(DeviceIntPtr pDev);
extern _X_EXPORT void
NoticeEventTime(InternalEvent *ev);
NoticeEventTime(InternalEvent *ev,
DeviceIntPtr dev);
extern void
EnqueueEvent(InternalEvent * /* ev */ ,

View File

@ -156,7 +156,7 @@ typedef struct _WorkQueue {
} WorkQueueRec;
extern _X_EXPORT TimeStamp currentTime;
extern _X_EXPORT TimeStamp lastDeviceEventTime;
extern _X_EXPORT TimeStamp lastDeviceEventTime[MAXDEVICES];
extern _X_EXPORT int
CompareTimeStamps(TimeStamp /*a */ ,

View File

@ -547,7 +547,7 @@ NextDPMSTimeout(INT32 timeout)
static CARD32
ScreenSaverTimeoutExpire(OsTimerPtr timer, CARD32 now, pointer arg)
{
INT32 timeout = now - lastDeviceEventTime.milliseconds;
INT32 timeout = now - lastDeviceEventTime[XIAllDevices].milliseconds;
CARD32 nextTimeout = 0;
#ifdef DPMSExtension

View File

@ -1391,7 +1391,7 @@ recv_alive_msg(unsigned length)
if (SessionRunning && AliveSessionID == SessionID) {
/* backoff dormancy period */
state = XDM_RUN_SESSION;
if ((GetTimeInMillis() - lastDeviceEventTime.milliseconds) >
if ((GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds) >
keepaliveDormancy * 1000) {
keepaliveDormancy <<= 1;
if (keepaliveDormancy > XDM_MAX_DORMANCY)