dix: Praise clients which haven't run for a while, rather than idle clients
A client which is ready, but hasn't run for a while, should receive the same benefit as one which has simply been idle for a while. Use the smart_stop_tick to see how long it has been since a client has run instead of smart_check_tick, which got reset each time a client was ready, even if it didn't get to run. Reported-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Keith Packard <keithp@keithp.com> Tested-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
76b275d7ac
commit
c1ce807d9f
|
@ -260,12 +260,11 @@ SmartScheduleClient(int *clientReady, int nready)
|
||||||
for (i = 0; i < nready; i++) {
|
for (i = 0; i < nready; i++) {
|
||||||
client = clientReady[i];
|
client = clientReady[i];
|
||||||
pClient = clients[client];
|
pClient = clients[client];
|
||||||
/* Praise clients which are idle */
|
/* Praise clients which haven't run in a while */
|
||||||
if ((now - pClient->smart_check_tick) >= idle) {
|
if ((now - pClient->smart_stop_tick) >= idle) {
|
||||||
if (pClient->smart_priority < 0)
|
if (pClient->smart_priority < 0)
|
||||||
pClient->smart_priority++;
|
pClient->smart_priority++;
|
||||||
}
|
}
|
||||||
pClient->smart_check_tick = now;
|
|
||||||
|
|
||||||
/* check priority to select best client */
|
/* check priority to select best client */
|
||||||
robin =
|
robin =
|
||||||
|
@ -3424,7 +3423,6 @@ InitClient(ClientPtr client, int i, void *ospriv)
|
||||||
QueryMinMaxKeyCodes(&client->minKC, &client->maxKC);
|
QueryMinMaxKeyCodes(&client->minKC, &client->maxKC);
|
||||||
client->smart_start_tick = SmartScheduleTime;
|
client->smart_start_tick = SmartScheduleTime;
|
||||||
client->smart_stop_tick = SmartScheduleTime;
|
client->smart_stop_tick = SmartScheduleTime;
|
||||||
client->smart_check_tick = SmartScheduleTime;
|
|
||||||
client->clientIds = NULL;
|
client->clientIds = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,7 +106,6 @@ typedef struct _Client {
|
||||||
|
|
||||||
int smart_start_tick;
|
int smart_start_tick;
|
||||||
int smart_stop_tick;
|
int smart_stop_tick;
|
||||||
int smart_check_tick;
|
|
||||||
|
|
||||||
DeviceIntPtr clientPtr;
|
DeviceIntPtr clientPtr;
|
||||||
ClientIdPtr clientIds;
|
ClientIdPtr clientIds;
|
||||||
|
|
Loading…
Reference in New Issue