[PATCH:libX11 1/2] Use C99 named initializers to fill in events passed to XSendEvent
Forces compiler to zero-fill unset fields in the struct (fixing bug 81236) and allows optimizer to order field initialization to best fit cache layout or other considertations. Before after output of gcc -S on AMD64 shows insertion of rep stosq instructions to rapidly zero-fill structs. Signed-off-by: Alan Coopersmith alan.coopersm...@oracle.com --- src/Iconify.c | 26 +++--- src/ReconfWM.c | 37 - src/Withdraw.c | 22 -- 3 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/Iconify.c b/src/Iconify.c index 3a969d7..9da4165 100644 --- a/src/Iconify.c +++ b/src/Iconify.c @@ -67,19 +67,23 @@ Status XIconifyWindow ( Window w, int screen) { -XClientMessageEvent ev; -Window root = RootWindow (dpy, screen); Atom prop; prop = XInternAtom (dpy, WM_CHANGE_STATE, False); -if (prop == None) return False; +if (prop == None) +return False; +else { +XClientMessageEvent ev = { +.type = ClientMessage, +.window = w, +.message_type = prop, +.format = 32, +.data.l[0] = IconicState +}; +Window root = RootWindow (dpy, screen); -ev.type = ClientMessage; -ev.window = w; -ev.message_type = prop; -ev.format = 32; -ev.data.l[0] = IconicState; -return (XSendEvent (dpy, root, False, - SubstructureRedirectMask|SubstructureNotifyMask, - (XEvent *)ev)); +return (XSendEvent (dpy, root, False, +SubstructureRedirectMask|SubstructureNotifyMask, +(XEvent *)ev)); +} } diff --git a/src/ReconfWM.c b/src/ReconfWM.c index 1776f2e..8dc3534 100644 --- a/src/ReconfWM.c +++ b/src/ReconfWM.c @@ -41,7 +41,6 @@ Status XReconfigureWMWindow ( unsigned int mask, XWindowChanges *changes) { -XConfigureRequestEvent ev; Window root = RootWindow (dpy, screen); _XAsyncHandler async; _XAsyncErrorState async_state; @@ -120,20 +119,24 @@ Status XReconfigureWMWindow ( /* * If the request succeeded, then everything is okay; otherwise, send event */ -if (!async_state.error_count) return True; - -ev.type= ConfigureRequest; -ev.window = w; -ev.parent = root; -ev.value_mask = (mask AllMaskBits); -ev.x = changes-x; -ev.y = changes-y; -ev.width = changes-width; -ev.height = changes-height; -ev.border_width= changes-border_width; -ev.above = changes-sibling; -ev.detail = changes-stack_mode; -return (XSendEvent (dpy, root, False, - SubstructureRedirectMask|SubstructureNotifyMask, - (XEvent *)ev)); +if (!async_state.error_count) +return True; +else { +XConfigureRequestEvent ev = { +.type = ConfigureRequest, +.window= w, +.parent= root, +.value_mask= (mask AllMaskBits), +.x = changes-x, +.y = changes-y, +.width = changes-width, +.height= changes-height, +.border_width = changes-border_width, +.above = changes-sibling, +.detail= changes-stack_mode, +}; +return (XSendEvent (dpy, root, False, +SubstructureRedirectMask|SubstructureNotifyMask, +(XEvent *)ev)); +} } diff --git a/src/Withdraw.c b/src/Withdraw.c index ac15ddc..1015f5b 100644 --- a/src/Withdraw.c +++ b/src/Withdraw.c @@ -67,16 +67,18 @@ Status XWithdrawWindow ( Window w, int screen) { -XUnmapEvent ev; -Window root = RootWindow (dpy, screen); - XUnmapWindow (dpy, w); -ev.type = UnmapNotify; -ev.event = root; -ev.window = w; -ev.from_configure = False; -return (XSendEvent (dpy, root, False, - SubstructureRedirectMask|SubstructureNotifyMask, - (XEvent *)ev)); +{ +Window root = RootWindow (dpy, screen); +XUnmapEvent ev = { +.type = UnmapNotify, +.event = root, +.window = w, +.from_configure = False +}; +return (XSendEvent (dpy, root, False, +SubstructureRedirectMask|SubstructureNotifyMask, +(XEvent *)ev)); +} } -- 1.7.9.2 ___ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
Re: [PATCH:libX11 1/2] Use C99 named initializers to fill in events passed to XSendEvent
On 07/12/2014 06:22 AM, Alan Coopersmith wrote: Forces compiler to zero-fill unset fields in the struct (fixing bug 81236) and allows optimizer to order field initialization to best fit cache layout or other considertations. Before after output of gcc -S on AMD64 shows insertion of rep stosq instructions to rapidly zero-fill structs. Signed-off-by: Alan Coopersmith alan.coopersm...@oracle.com Reviewed-by: Matthieu Herrb matth...@herrb.eu --- src/Iconify.c | 26 +++--- src/ReconfWM.c | 37 - src/Withdraw.c | 22 -- 3 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/Iconify.c b/src/Iconify.c index 3a969d7..9da4165 100644 --- a/src/Iconify.c +++ b/src/Iconify.c @@ -67,19 +67,23 @@ Status XIconifyWindow ( Window w, int screen) { -XClientMessageEvent ev; -Window root = RootWindow (dpy, screen); Atom prop; prop = XInternAtom (dpy, WM_CHANGE_STATE, False); -if (prop == None) return False; +if (prop == None) +return False; +else { +XClientMessageEvent ev = { +.type = ClientMessage, +.window = w, +.message_type = prop, +.format = 32, +.data.l[0] = IconicState +}; +Window root = RootWindow (dpy, screen); -ev.type = ClientMessage; -ev.window = w; -ev.message_type = prop; -ev.format = 32; -ev.data.l[0] = IconicState; -return (XSendEvent (dpy, root, False, - SubstructureRedirectMask|SubstructureNotifyMask, - (XEvent *)ev)); +return (XSendEvent (dpy, root, False, +SubstructureRedirectMask|SubstructureNotifyMask, +(XEvent *)ev)); +} } diff --git a/src/ReconfWM.c b/src/ReconfWM.c index 1776f2e..8dc3534 100644 --- a/src/ReconfWM.c +++ b/src/ReconfWM.c @@ -41,7 +41,6 @@ Status XReconfigureWMWindow ( unsigned int mask, XWindowChanges *changes) { -XConfigureRequestEvent ev; Window root = RootWindow (dpy, screen); _XAsyncHandler async; _XAsyncErrorState async_state; @@ -120,20 +119,24 @@ Status XReconfigureWMWindow ( /* * If the request succeeded, then everything is okay; otherwise, send event */ -if (!async_state.error_count) return True; - -ev.type= ConfigureRequest; -ev.window = w; -ev.parent = root; -ev.value_mask = (mask AllMaskBits); -ev.x = changes-x; -ev.y = changes-y; -ev.width = changes-width; -ev.height = changes-height; -ev.border_width= changes-border_width; -ev.above = changes-sibling; -ev.detail = changes-stack_mode; -return (XSendEvent (dpy, root, False, - SubstructureRedirectMask|SubstructureNotifyMask, - (XEvent *)ev)); +if (!async_state.error_count) +return True; +else { +XConfigureRequestEvent ev = { +.type = ConfigureRequest, +.window= w, +.parent= root, +.value_mask= (mask AllMaskBits), +.x = changes-x, +.y = changes-y, +.width = changes-width, +.height= changes-height, +.border_width = changes-border_width, +.above = changes-sibling, +.detail= changes-stack_mode, +}; +return (XSendEvent (dpy, root, False, +SubstructureRedirectMask|SubstructureNotifyMask, +(XEvent *)ev)); +} } diff --git a/src/Withdraw.c b/src/Withdraw.c index ac15ddc..1015f5b 100644 --- a/src/Withdraw.c +++ b/src/Withdraw.c @@ -67,16 +67,18 @@ Status XWithdrawWindow ( Window w, int screen) { -XUnmapEvent ev; -Window root = RootWindow (dpy, screen); - XUnmapWindow (dpy, w); -ev.type = UnmapNotify; -ev.event = root; -ev.window = w; -ev.from_configure = False; -return (XSendEvent (dpy, root, False, - SubstructureRedirectMask|SubstructureNotifyMask, - (XEvent *)ev)); +{ +Window root = RootWindow (dpy, screen); +XUnmapEvent ev = { +.type = UnmapNotify, +.event = root, +.window = w, +.from_configure = False +}; +return (XSendEvent (dpy, root, False, +SubstructureRedirectMask|SubstructureNotifyMask, +(XEvent *)ev)); +} } ___ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: