Home | Up | Questions? |
The client/server nature of the X11 window system design allows
clients to communicate with servers as separate processes
communicating over well-defined network channels. This has allowed
the development of two pseudo-servers for X11: Xscope and Xprog.
Both pseudo-servers present themselves as servers to clients, but
utilize a remote X11 window server for the actual work of the
window server. Xscope and Xprog examine the information passed
between the client and the real X11 server and provide useful
debugging and performance information for the client developer.
16 0.00: Client 1 --> 12 bytes 0.01: 160 bytes <-- X11 Server 1 0.02: Client 1 --> 40 bytes ............REQUEST: CreateGC ............REQUEST: GetProperty 0.03: 32 bytes <-- X11 Server 1 ..............REPLY: GetProperty 0.04: Client 1 --> 196 bytes ............REQUEST: CreateWindow ............REQUEST: ChangeProperty ............REQUEST: ChangeProperty ............REQUEST: ChangeProperty ............REQUEST: CreateGC ............REQUEST: MapWindow ............REQUEST: ChangeWindowAttributes ............REQUEST: ClearArea ............REQUEST: GetWindowAttributes 0.05: 44 bytes <-- X11 Server 1 ..............REPLY: GetWindowAttributes 0.06: Client 1 --> 8 bytes ............REQUEST: GetGeometry 0.07: 32 bytes <-- X11 Server 1 ..............REPLY: GetGeometry 0.08: Client 1 --> 120 bytes ............REQUEST: ClearArea ............REQUEST: PolySegment ............REQUEST: PolySegment 0.17: 32 bytes <-- X11 Server 1 ..............EVENT: Expose 0.18: Client 1 --> 24 bytes ............REQUEST: ClearArea ............REQUEST: GetWindowAttributes 0.23: 44 bytes <-- X11 Server 1 ..............REPLY: GetWindowAttributes 0.24: Client 1 --> 8 bytes ............REQUEST: GetGeometry 0.27: 32 bytes <-- X11 Server 1 ..............REPLY: GetGeometry 0.28: Client 1 --> 120 bytes ............REQUEST: ClearArea ............REQUEST: PolySegment ............REQUEST: PolySegment 1.29: 32 bytes <-- X11 Server 1 ..............EVENT: KeyPress 1.30: Client 1 --> 8 bytes ............REQUEST: GetKeyboardMapping 1.32: 1104 bytes <-- X11 Server 1 ..............REPLY: GetKeyboardMapping 1.33: Client 1 --> 4 bytes ............REQUEST: GetModifierMapping 1.34: 48 bytes <-- X11 Server 1 ..............REPLY: GetModifierMapping 1.35: Client 1 --> EOF
17 0.23: Client 1 --> 8 bytes ............REQUEST: GetGeometry drawable: DWB 00900001 0.26: 32 bytes <-- X11 Server 1 ..............REPLY: GetGeometry depth: 08 root: WIN 0008006b x: 0 y: 0 width: 0320 height: 0320 border-width: 0000 0.27: Client 1 --> 120 bytes ............REQUEST: ClearArea exposures: False window: WIN 00900001 x: 0 y: 0 width: 0000 height: 0000 ............REQUEST: PolySegment drawable: DWB 00900001 gc: GXC 00900002 segments: (8) ............REQUEST: PolySegment drawable: DWB 00900001 gc: GXC 00900002 segments: (2) 1.12: 32 bytes <-- X11 Server 1 ..............EVENT: KeyPress detail: 25 (^Y) time: TIM a4f62fd4 root: WIN 0008006b event: WIN 00900001 child: None root-x: 855 root-y: 700 event-x: 747 event-y: 646 state: 0 same-screen: True 1.13: Client 1 --> 8 bytes ............REQUEST: GetKeyboardMapping first-keycode: 8 (^H) count: 86 1.14: 1104 bytes <-- X11 Server 1 ..............REPLY: GetKeyboardMapping keysyms-per-keycode: 02 keysyms: (268) 1.16: Client 1 --> 4 bytes ............REQUEST: GetModifierMapping 1.17: 48 bytes <-- X11 Server 1 ..............REPLY: GetModifierMapping keycodes-per-modifier: 02 keycodes: (2) 1.18: Client 1 --> EOF
32 #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xatom.h> Display *dpy; Window W8006b; Window W1; GC GC2; WaitForEvent(type, prompt) int type; char *prompt; { XFlush(dpy); fprintf(stderr, "Waiting for %s\n",prompt); while (TRUE) { XEvent xev; XNextEvent(dpy, &xev); if (xev.type == type) return; } } main() { dpy = XOpenDisplay(getenv("DISPLAY")); W8006b = RootWindow(dpy, DefaultScreen(dpy)); { XSetWindowAttributes temp; long mask = 0; mask = mask | CWBackPixel; temp.background_pixel = 1; W1 = XCreateWindow(dpy, W8006b, 0, 0, 800, 800, 1, 0, InputOutput, CopyFromParent, mask, &temp); } { XGCValues temp; long mask = 0; GC2 = XCreateGC(dpy, W1, mask, &temp); } XMapWindow(dpy, W1); XSelectInput(dpy, W1, KeyPressMask | ButtonPressMask | ExposureMask); WaitForEvent(Expose,"Expose") /* of window W1 */; XClearArea(dpy, W1, 0, 0, 0, 0, FALSE); { Window a; int b; int c; unsigned int d; unsigned int e; unsigned int f; unsigned int g; (void)XGetGeometry(dpy, W1, &a, &b, &c, &d, &e, &f, &g); } XClearArea(dpy, W1, 0, 0, 0, 0, FALSE); XDrawLine(dpy, W1, GC2, 10, 10, 790, 790); XDrawLine(dpy, W1, GC2, 10, 790, 790, 10); WaitForEvent(KeyPress,"KeyPress"); exit(0); }
Home | Comments? |