summaryrefslogtreecommitdiff
path: root/dix/dispatch.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-01-22 11:01:59 -0800
committerKeith Packard <keithp@keithp.com>2014-01-23 10:10:28 -0800
commitc1ce807d9f18f215332d7eeb844e8c640f71c53c (patch)
tree2575be554a4045c90f9457c4151136cf19a42831 /dix/dispatch.c
parent76b275d7acbfd6b28cb9e74fa4862faa6d08217d (diff)
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>
Diffstat (limited to 'dix/dispatch.c')
-rw-r--r--dix/dispatch.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/dix/dispatch.c b/dix/dispatch.c
index e28270c16..9a5658db0 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -260,12 +260,11 @@ SmartScheduleClient(int *clientReady, int nready)
for (i = 0; i < nready; i++) {
client = clientReady[i];
pClient = clients[client];
- /* Praise clients which are idle */
- if ((now - pClient->smart_check_tick) >= idle) {
+ /* Praise clients which haven't run in a while */
+ if ((now - pClient->smart_stop_tick) >= idle) {
if (pClient->smart_priority < 0)
pClient->smart_priority++;
}
- pClient->smart_check_tick = now;
/* check priority to select best client */
robin =
@@ -3424,7 +3423,6 @@ InitClient(ClientPtr client, int i, void *ospriv)
QueryMinMaxKeyCodes(&client->minKC, &client->maxKC);
client->smart_start_tick = SmartScheduleTime;
client->smart_stop_tick = SmartScheduleTime;
- client->smart_check_tick = SmartScheduleTime;
client->clientIds = NULL;
}