re-shuffle struct members to save a bit of memory

Analysis done with pahole(1).
This commit is contained in:
Michael Stapelberg 2013-06-08 15:37:41 +02:00
parent 80e7d2d346
commit a99fc537fc
2 changed files with 52 additions and 48 deletions

View File

@ -25,13 +25,13 @@ struct CommandResult {
/* The JSON generator to append a reply to. */ /* The JSON generator to append a reply to. */
yajl_gen json_gen; yajl_gen json_gen;
/* Whether the command requires calling tree_render. */
bool needs_tree_render;
/* The next state to transition to. Passed to the function so that we can /* The next state to transition to. Passed to the function so that we can
* determine the next state as a result of a function call, like * determine the next state as a result of a function call, like
* cfg_criteria_pop_state() does. */ * cfg_criteria_pop_state() does. */
int next_state; int next_state;
/* Whether the command requires calling tree_render. */
bool needs_tree_render;
}; };
struct CommandResult *parse_command(const char *input); struct CommandResult *parse_command(const char *input);

View File

@ -146,8 +146,8 @@ struct deco_render_params {
struct width_height con_window_rect; struct width_height con_window_rect;
Rect con_deco_rect; Rect con_deco_rect;
uint32_t background; uint32_t background;
bool con_is_leaf;
layout_t parent_layout; layout_t parent_layout;
bool con_is_leaf;
}; };
/** /**
@ -228,6 +228,14 @@ struct Binding {
B_UPON_KEYRELEASE_IGNORE_MODS = 2, B_UPON_KEYRELEASE_IGNORE_MODS = 2,
} release; } release;
uint32_t number_keycodes;
/** Keycode to bind */
uint32_t keycode;
/** Bitmask consisting of BIND_MOD_1, BIND_MODE_SWITCH, … */
uint32_t mods;
/** Symbol the user specified in configfile, if any. This needs to be /** Symbol the user specified in configfile, if any. This needs to be
* stored with the binding to be able to re-convert it into a keycode * stored with the binding to be able to re-convert it into a keycode
* if the keyboard mapping changes (using Xmodmap for example) */ * if the keyboard mapping changes (using Xmodmap for example) */
@ -240,13 +248,6 @@ struct Binding {
* This is an array of number_keycodes size. */ * This is an array of number_keycodes size. */
xcb_keycode_t *translated_to; xcb_keycode_t *translated_to;
uint32_t number_keycodes;
/** Keycode to bind */
uint32_t keycode;
/** Bitmask consisting of BIND_MOD_1, BIND_MODE_SWITCH, … */
uint32_t mods;
/** Command, like in command mode */ /** Command, like in command mode */
char *command; char *command;
@ -281,11 +282,6 @@ struct Autostart {
struct xoutput { struct xoutput {
/** Output id, so that we can requery the output directly later */ /** Output id, so that we can requery the output directly later */
xcb_randr_output_t id; xcb_randr_output_t id;
/** Name of the output */
char *name;
/** Pointer to the Con which represents this output */
Con *con;
/** Whether the output is currently active (has a CRTC attached with a /** Whether the output is currently active (has a CRTC attached with a
* valid mode) */ * valid mode) */
@ -297,6 +293,12 @@ struct xoutput {
bool to_be_disabled; bool to_be_disabled;
bool primary; bool primary;
/** Name of the output */
char *name;
/** Pointer to the Con which represents this output */
Con *con;
/** x, y, width, height */ /** x, y, width, height */
Rect rect; Rect rect;
@ -316,6 +318,11 @@ struct Window {
xcb_window_t leader; xcb_window_t leader;
xcb_window_t transient_for; xcb_window_t transient_for;
/** Pointers to the Assignments which were already ran for this Window
* (assignments run only once) */
uint32_t nr_assignments;
Assignment **ran_assignments;
char *class_class; char *class_class;
char *class_instance; char *class_instance;
@ -336,9 +343,6 @@ struct Window {
/** Whether the application needs to receive WM_TAKE_FOCUS */ /** Whether the application needs to receive WM_TAKE_FOCUS */
bool needs_take_focus; bool needs_take_focus;
/** When this window was marked urgent. 0 means not urgent */
struct timeval urgent;
/** Whether this window accepts focus. We store this inverted so that the /** Whether this window accepts focus. We store this inverted so that the
* default will be 'accepts focus'. */ * default will be 'accepts focus'. */
bool doesnt_accept_focus; bool doesnt_accept_focus;
@ -346,14 +350,12 @@ struct Window {
/** Whether the window says it is a dock window */ /** Whether the window says it is a dock window */
enum { W_NODOCK = 0, W_DOCK_TOP = 1, W_DOCK_BOTTOM = 2 } dock; enum { W_NODOCK = 0, W_DOCK_TOP = 1, W_DOCK_BOTTOM = 2 } dock;
/** When this window was marked urgent. 0 means not urgent */
struct timeval urgent;
/** Pixels the window reserves. left/right/top/bottom */ /** Pixels the window reserves. left/right/top/bottom */
struct reservedpx reserved; struct reservedpx reserved;
/** Pointers to the Assignments which were already ran for this Window
* (assignments run only once) */
uint32_t nr_assignments;
Assignment **ran_assignments;
/** Depth of the window */ /** Depth of the window */
uint16_t depth; uint16_t depth;
}; };
@ -386,8 +388,8 @@ struct Match {
M_DOCK_BOTTOM = 3 M_DOCK_BOTTOM = 3
} dock; } dock;
xcb_window_t id; xcb_window_t id;
Con *con_id;
enum { M_ANY = 0, M_TILING, M_FLOATING } floating; enum { M_ANY = 0, M_TILING, M_FLOATING } floating;
Con *con_id;
/* Where the window looking for a match should be inserted: /* Where the window looking for a match should be inserted:
* *
@ -400,12 +402,12 @@ struct Match {
*/ */
enum { M_HERE = 0, M_ASSIGN_WS, M_BELOW } insert_where; enum { M_HERE = 0, M_ASSIGN_WS, M_BELOW } insert_where;
TAILQ_ENTRY(Match) matches;
/* Whether this match was generated when restarting i3 inplace. /* Whether this match was generated when restarting i3 inplace.
* Leads to not setting focus when managing a new window, because the old * Leads to not setting focus when managing a new window, because the old
* focus stack should be restored. */ * focus stack should be restored. */
bool restart_mode; bool restart_mode;
TAILQ_ENTRY(Match) matches;
}; };
/** /**
@ -454,6 +456,24 @@ struct Assignment {
*/ */
struct Con { struct Con {
bool mapped; bool mapped;
/* Should this container be marked urgent? This gets set when the window
* inside this container (if any) sets the urgency hint, for example. */
bool urgent;
/** This counter contains the number of UnmapNotify events for this
* container (or, more precisely, for its ->frame) which should be ignored.
* UnmapNotify events need to be ignored when they are caused by i3 itself,
* for example when reparenting or when unmapping the window on a workspace
* change. */
uint8_t ignore_unmap;
/* ids/pixmap/graphics context for the frame window */
bool pixmap_recreated;
xcb_window_t frame;
xcb_pixmap_t pixmap;
xcb_gcontext_t pm_gc;
enum { enum {
CT_ROOT = 0, CT_ROOT = 0,
CT_OUTPUT = 1, CT_OUTPUT = 1,
@ -462,6 +482,11 @@ struct Con {
CT_WORKSPACE = 4, CT_WORKSPACE = 4,
CT_DOCKAREA = 5 CT_DOCKAREA = 5
} type; } type;
/** the workspace number, if this Con is of type CT_WORKSPACE and the
* workspace is not a named workspace (for named workspaces, num == -1) */
int num;
struct Con *parent; struct Con *parent;
struct Rect rect; struct Rect rect;
@ -472,10 +497,6 @@ struct Con {
char *name; char *name;
/** the workspace number, if this Con is of type CT_WORKSPACE and the
* workspace is not a named workspace (for named workspaces, num == -1) */
int num;
/* a sticky-group is an identifier which bundles several containers to a /* a sticky-group is an identifier which bundles several containers to a
* group. The contents are shared between all of them, that is they are * group. The contents are shared between all of them, that is they are
* displayed on whichever of the containers is currently visible */ * displayed on whichever of the containers is currently visible */
@ -505,19 +526,9 @@ struct Con {
struct Window *window; struct Window *window;
/* Should this container be marked urgent? This gets set when the window
* inside this container (if any) sets the urgency hint, for example. */
bool urgent;
/* timer used for disabling urgency */ /* timer used for disabling urgency */
struct ev_timer *urgency_timer; struct ev_timer *urgency_timer;
/* ids/pixmap/graphics context for the frame window */
xcb_window_t frame;
xcb_pixmap_t pixmap;
xcb_gcontext_t pm_gc;
bool pixmap_recreated;
/** Cache for the decoration rendering */ /** Cache for the decoration rendering */
struct deco_render_params *deco_render_params; struct deco_render_params *deco_render_params;
@ -559,13 +570,6 @@ struct Con {
FLOATING_USER_ON = 3 FLOATING_USER_ON = 3
} floating; } floating;
/** This counter contains the number of UnmapNotify events for this
* container (or, more precisely, for its ->frame) which should be ignored.
* UnmapNotify events need to be ignored when they are caused by i3 itself,
* for example when reparenting or when unmapping the window on a workspace
* change. */
uint8_t ignore_unmap;
TAILQ_ENTRY(Con) nodes; TAILQ_ENTRY(Con) nodes;
TAILQ_ENTRY(Con) focused; TAILQ_ENTRY(Con) focused;
TAILQ_ENTRY(Con) all_cons; TAILQ_ENTRY(Con) all_cons;