[PATCH 4/7] dix: Repack ClientRec

Adam Jackson ajax at redhat.com
Thu Sep 20 13:56:05 PDT 2012


Pick smaller types where possible, including bitfielding some Bools and
small enums, then shuffle the result to be hole-free.  192 -> 128 bytes
on LP64, 144 -> 96 bytes on ILP32.

Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 include/dixstruct.h |   38 ++++++++++++++++++--------------------
 1 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/include/dixstruct.h b/include/dixstruct.h
index 875f6ca..c1236f5 100644
--- a/include/dixstruct.h
+++ b/include/dixstruct.h
@@ -56,8 +56,7 @@ ReplyNotSwappd(ClientPtr /* pClient */ ,
                void * /* pbuf */ ) _X_NORETURN;
 
 typedef enum { ClientStateInitial,
-    /* 1 is unused now, was ClientStateAuthenticating */
-    ClientStateRunning = 2,
+    ClientStateRunning,
     ClientStateRetained,
     ClientStateGone
 } ClientState;
@@ -86,27 +85,29 @@ typedef struct _Window *SaveSetElt;
 #endif
 
 typedef struct _Client {
-    int index;
-    Mask clientAsMask;
     pointer requestBuffer;
     pointer osPrivate;          /* for OS layer, including scheduler */
-    Bool swapped;
-    Bool local;
+    Mask clientAsMask;
+    short index;
+    unsigned char majorOp, minorOp;
+    int swapped:1;
+    int local:1;
+    int big_requests:1;          /* supports large requests */
+    int clientGone:1;
+    int closeDownMode:2;
+    int clientState:2;
+    char smart_priority;
+    short noClientException;      /* this client died or needs to be killed */
+    int priority;
     ReplySwapPtr pSwapReplyFunc;
     XID errorValue;
     int sequence;
-    int closeDownMode;
-    int clientGone;
-    int noClientException;      /* this client died or needs to be
-                                 * killed */
     int ignoreCount;            /* count for Attend/IgnoreClient */
-    SaveSetElt *saveSet;
     int numSaved;
+    SaveSetElt *saveSet;
     int (**requestVector) (ClientPtr /* pClient */ );
     CARD32 req_len;             /* length of current request */
-    Bool big_requests;          /* supports large requests */
-    int priority;
-    ClientState clientState;
+    unsigned int replyBytesRemaining;
     PrivateRec *devPrivates;
     unsigned short xkbClientFlags;
     unsigned short mapNotifyMask;
@@ -114,15 +115,12 @@ typedef struct _Client {
     unsigned short vMajor, vMinor;
     KeyCode minKC, maxKC;
 
-    unsigned long replyBytesRemaining;
-    int smart_priority;
-    long smart_start_tick;
-    long smart_stop_tick;
-    long smart_check_tick;
+    int smart_start_tick;
+    int smart_stop_tick;
+    int smart_check_tick;
 
     DeviceIntPtr clientPtr;
     ClientIdPtr clientIds;
-    unsigned short majorOp, minorOp;
 } ClientRec;
 
 /*
-- 
1.7.7.6



More information about the xorg-devel mailing list