diff options
author | Keith Packard <keithp@keithp.com> | 2014-01-22 11:01:59 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-01-23 10:10:28 -0800 |
commit | c1ce807d9f18f215332d7eeb844e8c640f71c53c (patch) | |
tree | 2575be554a4045c90f9457c4151136cf19a42831 /dix/dispatch.c | |
parent | 76b275d7acbfd6b28cb9e74fa4862faa6d08217d (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.c | 6 |
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; } |