From c73116540205c20162befe935ef608f4bed3af0a Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Fri, 30 Nov 2018 13:09:53 +0100 Subject: [PATCH] dix: cache ResourceClientBits() value The `LimitClient` is set once and for all at startup, whereas the function `ResourceClientBits()` which returns the client field offset within the XID based on the value of `LimitClient` can be called repeatedly. Small optimization, cache the result of `ilog2()`, that saves running the same loop over and over each time `ResourceClientBits()` is called. Signed-off-by: Olivier Fourdan --- dix/resource.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dix/resource.c b/dix/resource.c index b6ef99f10..a42cd007f 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -620,7 +620,12 @@ ilog2(int val) unsigned int ResourceClientBits(void) { - return (ilog2(LimitClients)); + static unsigned int cached = 0; + + if (cached == 0) + cached = ilog2(LimitClients); + + return cached; } /*****************