[PATCH:libX11 1/2] Use C99 named initializers to fill in events passed to XSendEvent

2014-07-11 Thread Alan Coopersmith
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

2014-07-11 Thread Matthieu Herrb

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: