separate xevlog_analyze from x server (not depending on server)
authorHeebum Kwak <heebum0.kwak@samsung.com>
Fri, 10 May 2013 06:02:52 +0000 (15:02 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 17 Jun 2013 08:44:34 +0000 (17:44 +0900)
Change-Id: I82a4fdd6de5ecdc1034b4814dbc1514fb9b4c5e3

27 files changed:
bin/xevlog_analyze/xevlog_analyze.c
common/xdbg_evlog.c
common/xdbg_evlog.h
common/xdbg_evlog_composite.c
common/xdbg_evlog_composite.h
common/xdbg_evlog_core.c
common/xdbg_evlog_core.h
common/xdbg_evlog_damage.c
common/xdbg_evlog_damage.h
common/xdbg_evlog_dri2.c
common/xdbg_evlog_dri2.h
common/xdbg_evlog_event.c
common/xdbg_evlog_event.h
common/xdbg_evlog_gesture.c
common/xdbg_evlog_gesture.h
common/xdbg_evlog_randr.c
common/xdbg_evlog_randr.h
common/xdbg_evlog_request.c
common/xdbg_evlog_request.h
common/xdbg_evlog_xext.c
common/xdbg_evlog_xext.h
common/xdbg_evlog_xinput.c
common/xdbg_evlog_xinput.h
common/xdbg_evlog_xv.c
common/xdbg_evlog_xv.h
common/xdbg_types.h
module/xdbg_module_evlog.c

index a5074cd..fc9e35f 100644 (file)
@@ -90,13 +90,14 @@ _printUsage(char* name)
 }
 
 
-static void _xEvlogAnalyzePrint (Display* dpy, EvlogOption *eo, char* reply, int* len)
+static void _xEvlogAnalyzePrint (EvlogOption *eo, char* reply, int* len)
 {
     int fd = -1, cfd = -1;
     int total, read_len;
     int evlog_len;
     char fd_name[256];
     EvlogInfo evinfo={0,};
+    int i;
 
     if (!strlen(eo->path_name))
     {
@@ -126,21 +127,49 @@ static void _xEvlogAnalyzePrint (Display* dpy, EvlogOption *eo, char* reply, int
         int size = sizeof (log);
         static int init = 0;
 
+        memset (&evinfo, 0, sizeof (EvlogInfo));
+        total = read_len;
+
         if (!init)
         {
+            extern ExtensionInfo Evlog_extensions[];
+            extern int Extensions_size;
             int new_argc = 3;
             char* new_argv[3] = {"add", "allow", "all"};
+            int i;
 
             if(!eo->isRule)
                 xDbgEvlogRuleSet ((const int) new_argc, (const char**) new_argv, reply, len);
 
             printf("%s\n", reply);
-            init = 1;
-        }
 
-        memset (&evinfo, 0, sizeof (EvlogInfo));
+            read_len = read (fd, &Extensions_size, sizeof (int));
+            GOTO_IF_FAIL (read_len == sizeof (int), print_done);
+            total += read_len;
 
-        total = read_len;
+            for (i = 0 ; i < Extensions_size ; i++)
+            {
+                read_len = read (fd, &Evlog_extensions[i].opcode, sizeof (int));
+                GOTO_IF_FAIL (read_len == sizeof (int), print_done);
+                total += read_len;
+
+                read_len = read (fd, &Evlog_extensions[i].evt_base, sizeof (int));
+                GOTO_IF_FAIL (read_len == sizeof (int), print_done);
+                total += read_len;
+
+                read_len = read (fd, &Evlog_extensions[i].err_base, sizeof (int));
+                GOTO_IF_FAIL (read_len == sizeof (int), print_done);
+                total += read_len;
+            }
+
+            if (!xDbgEvlogGetExtensionEntry ())
+            {
+                printf ("failed: get extentions\n");
+                goto print_done;
+            }
+
+            init = 1;
+        }
 
         read_len = read (fd, &evinfo.time, sizeof (CARD32));
         GOTO_IF_FAIL (read_len == sizeof (CARD32), print_done);
@@ -182,18 +211,74 @@ static void _xEvlogAnalyzePrint (Display* dpy, EvlogOption *eo, char* reply, int
             GOTO_IF_FAIL (read_len == sizeof(EvlogEvent), print_done);
             total += read_len;
 
-            evinfo.evt.ptr = malloc (sizeof(xEvent));
+            evinfo.evt.ptr = malloc (evinfo.evt.size);
             GOTO_IF_FAIL (evinfo.evt.ptr != NULL, print_done);
 
-            read_len = read (fd, evinfo.evt.ptr, sizeof (xEvent));
-            GOTO_IF_FAIL (read_len == sizeof(xEvent), print_done);
+            WARNING_IF_FAIL (evinfo.evt.size > 0);
+
+            read_len = read (fd, evinfo.evt.ptr, evinfo.evt.size);
+            GOTO_IF_FAIL (read_len == evinfo.evt.size, print_done);
             total += read_len;
         }
+
+        if (evinfo.mask & EVLOG_MASK_ATOM)
+        {
+            EvlogAtomTable *table;
+
+            read_len = read (fd, &evinfo.evatom.size, sizeof (int));
+            GOTO_IF_FAIL (read_len == sizeof(int), print_done);
+            total += read_len;
+
+            for (i = 0 ; i < evinfo.evatom.size ; i++)
+            {
+                table = malloc (sizeof(EvlogAtomTable));
+                GOTO_IF_FAIL (table != NULL, print_done);
+
+                if (!evinfo.evatom.init)
+                {
+                    xorg_list_init(&evinfo.evatom.list);
+                    evinfo.evatom.init = 1;
+                }
+                read_len = read (fd, table, sizeof (EvlogAtomTable));
+                GOTO_IF_FAIL (read_len == sizeof(EvlogAtomTable), print_done);
+                total += read_len;
+
+                xorg_list_add(&table->link, &evinfo.evatom.list);
+            }
+        }
+
+        if (evinfo.mask & EVLOG_MASK_REGION)
+        {
+            EvlogRegionTable *table;
+
+            read_len = read (fd, &evinfo.evregion.size, sizeof (int));
+            GOTO_IF_FAIL (read_len == sizeof(int), print_done);
+            total += read_len;
+
+            for (i = 0 ; i < evinfo.evregion.size ; i++)
+            {
+                table = malloc (sizeof(EvlogRegionTable));
+                GOTO_IF_FAIL (table != NULL, print_done);
+
+                if (!evinfo.evregion.init)
+                {
+                    xorg_list_init(&evinfo.evregion.list);
+                    evinfo.evregion.init = 1;
+                }
+
+                read_len = read (fd, table, sizeof (EvlogRegionTable));
+                GOTO_IF_FAIL (read_len == sizeof(EvlogRegionTable), print_done);
+                total += read_len;
+
+                xorg_list_add(&table->link, &evinfo.evregion.list);
+            }
+        }
+
         GOTO_IF_FAIL (evlog_len == total, print_done);
 
         if (xDbgEvlogRuleValidate (&evinfo))
         {
-            xDbgEvlogFillLog(dpy, &evinfo, eo->detail, log, &size);
+            xDbgEvlogFillLog(&evinfo, eo->detail, log, &size);
             printf ("%s", log);
         }
 
@@ -208,6 +293,9 @@ static void _xEvlogAnalyzePrint (Display* dpy, EvlogOption *eo, char* reply, int
             free (evinfo.evt.ptr);
             evinfo.evt.ptr = NULL;
         }
+
+        xDbgDistroyAtomList(&evinfo);
+        xDbgDistroyRegionList(&evinfo);
     }
 
 
@@ -218,6 +306,9 @@ print_done:
     if (evinfo.evt.ptr)
         free (evinfo.evt.ptr);
 
+    xDbgDistroyAtomList(&evinfo);
+    xDbgDistroyRegionList(&evinfo);
+
     if (cfd >= 0)
         close (cfd);
 
@@ -227,7 +318,7 @@ print_done:
 
 
 static void
-_checkOption(Display* dpy, int argc, char** argv)
+_checkOption(int argc, char** argv)
 {
     int c;
     int opt_str_len = 0;
@@ -354,7 +445,7 @@ _checkOption(Display* dpy, int argc, char** argv)
         }
     }
 
-    _xEvlogAnalyzePrint(dpy, &eo, rule_log, &rule_size);
+    _xEvlogAnalyzePrint(&eo, rule_log, &rule_size);
 }
 
 
@@ -364,14 +455,6 @@ int main(int argc, char** argv)
     char **new_argv;
     int new_argc, i;
     char temp[128];
-    Display *dpy;
-
-    dpy = XOpenDisplay (NULL);
-    if (!dpy)
-    {
-        printf ("failed: open display\n");
-        exit (-1);
-    }
 
     new_argc = argc + 1;
     new_argv = (char**)malloc (new_argc * sizeof (char*));
@@ -387,10 +470,9 @@ int main(int argc, char** argv)
     for (i = 0; i < argc; i++)
         new_argv[i+1] = argv[i];
 
-    _checkOption(dpy, new_argc, new_argv);
+    _checkOption(new_argc, new_argv);
 
     free (new_argv);
-    XCloseDisplay (dpy);
 
     return 0;
 }
index 1aec82a..fa314fa 100644 (file)
@@ -248,6 +248,7 @@ ExtensionInfo Evlog_extensions[] = {
     {xDbgEvlogXvGetBase, 0, 0, 0, NULL}
 };
 ExtensionInfo* Sorted_Evlog_extensions;
+int Extensions_size = 0;
 
 static void
 _ExtensionsSwap(ExtensionInfo* first, ExtensionInfo* second)
@@ -270,10 +271,10 @@ _SortEvlogExtensions ()
 
     memcpy(Sorted_Evlog_extensions, Evlog_extensions, sizeof(Evlog_extensions));
 
-    for (i = 0 ; i < sizeof (Evlog_extensions) / sizeof (ExtensionInfo) - 1 ; i++)
+    for (i = 0 ; i < Extensions_size - 1 ; i++)
     {
         swap = 0;
-        for (j = 1 ; j < sizeof (Evlog_extensions) / sizeof (ExtensionInfo) - i ; j++)
+        for (j = 1 ; j < Extensions_size - i ; j++)
         {
             if(Sorted_Evlog_extensions[j-1].evt_base > Sorted_Evlog_extensions[j].evt_base)
             {
@@ -288,8 +289,8 @@ _SortEvlogExtensions ()
 }
 
 
-static Bool
-_EvlogGetExtentionEntry (void *dpy, int *return_extensions_size)
+Bool
+xDbgEvlogGetExtensionEntry ()
 {
     static int init = 0;
     static Bool success = FALSE;
@@ -299,16 +300,17 @@ _EvlogGetExtentionEntry (void *dpy, int *return_extensions_size)
         return success;
 
     init = 1;
+    Extensions_size = sizeof(Evlog_extensions) / sizeof (ExtensionInfo);
 
-    for (i = 0 ; i < sizeof (Evlog_extensions) / sizeof (ExtensionInfo); i++)
+    for (i = 0 ; i < Extensions_size ; i++)
     {
-        Evlog_extensions[i].get_base_func (dpy, Evlog_extensions + i);
+        Evlog_extensions[i].get_base_func (Evlog_extensions + i);
     }
 
     if(!_SortEvlogExtensions ())
         return FALSE;
 
-    *return_extensions_size = sizeof(Evlog_extensions);
+
     success = TRUE;
 
     return success;
@@ -316,10 +318,9 @@ _EvlogGetExtentionEntry (void *dpy, int *return_extensions_size)
 
 
 void
-xDbgEvlogFillLog (void *dpy, EvlogInfo *evinfo, Bool on, char *reply, int *len)
+xDbgEvlogFillLog (EvlogInfo *evinfo, Bool on, char *reply, int *len)
 {
     static CARD32 prev;
-    static int Extensions_size = 0;
 
     RETURN_IF_FAIL (evinfo->type >= 0 && (sizeof (evt_dir) / sizeof (char*)));
     RETURN_IF_FAIL (evinfo->type >= 0 && (sizeof (evt_type) / sizeof (char*)));
@@ -333,16 +334,17 @@ xDbgEvlogFillLog (void *dpy, EvlogInfo *evinfo, Bool on, char *reply, int *len)
                 evt_dir[evinfo->type],
                 evt_type[evinfo->type]);
 
-    if (evinfo->type == REQUEST && _EvlogGetExtentionEntry (dpy, &Extensions_size))
+    if (evinfo->type == REQUEST)
     {
         REPLY ("(");
-        reply = xDbgEvlogReqeust (dpy, evinfo, on, Extensions_size, reply, len);
+        reply = xDbgEvlogReqeust (evinfo, on, reply, len);
         REPLY (")");
     }
-    else if (evinfo->type == EVENT && _EvlogGetExtentionEntry (dpy, &Extensions_size))
+    else if (evinfo->type == EVENT)
     {
+        evinfo->evt.size = sizeof (xEvent);
         REPLY ("(");
-        reply = xDbgEvlogEvent (dpy, evinfo, on, Extensions_size, reply, len);
+        reply = xDbgEvlogEvent (evinfo, on, reply, len);
         REPLY (")");
     }
     else
@@ -361,120 +363,143 @@ xDbgEvlogFillLog (void *dpy, EvlogInfo *evinfo, Bool on, char *reply, int *len)
 }
 
 
-
-#ifdef XDBG_CLIENT
-Bool get_error_caught;
-
-static int
-_get_error_handle (Display *dpy, XErrorEvent *ev)
+void xDbgDistroyAtomList (EvlogInfo *evinfo)
 {
-    if (!dpy)
-        return 0;
+    EvlogAtomTable *cur, *next;
+
+    if (!evinfo->evatom.init)
+        return;
 
-    get_error_caught = True;
-    return 0;
+    xorg_list_for_each_entry_safe(cur, next, &evinfo->evatom.list, link)
+    {
+        xorg_list_del(&cur->link);
+        free (cur);
+        cur = NULL;
+    }
+    evinfo->evatom.init = 0;
+    evinfo->evatom.size = 0;
 }
-#endif
 
-char* xDbgGetAtom(void *dpy, Atom atom, char *reply, int *len)
+void xDbgDistroyRegionList (EvlogInfo *evinfo)
 {
-#ifdef XDBG_CLIENT
-    Display *d = NULL;
-    XErrorHandler old_handler = NULL;
+    EvlogRegionTable *cur, *next;
 
-    RETURN_VAL_IF_FAIL(dpy != NULL, reply);
+    if (!evinfo->evregion.init)
+        return;
 
-    get_error_caught = False;
-    d = (Display*)dpy;
+    xorg_list_for_each_entry_safe(cur, next, &evinfo->evregion.list, link)
+    {
+        xorg_list_del(&cur->link);
+        free (cur);
+        cur = NULL;
+    }
+    evinfo->evregion.init = 0;
+    evinfo->evregion.size = 0;
+}
 
-    XSync (d, 0);
-    old_handler = XSetErrorHandler (_get_error_handle);
+char* xDbgGetAtom(Atom atom, EvlogInfo *evinfo, char *reply, int *len)
+{
+    EvlogAtomTable *table;
+#ifndef XDBG_CLIENT
+    table = malloc (sizeof(EvlogAtomTable));
+    if (!table)
+        return reply;
 
-    if(XGetAtomName(d, atom))
-        REPLY("(%s)", XGetAtomName(d, atom));
-    else
-        REPLY("(0x%lx)", atom);
+    evinfo->mask |= EVLOG_MASK_ATOM;
+    table->xid = atom;
+
+    if (!evinfo->evatom.init)
+    {
+        xorg_list_init(&evinfo->evatom.list);
+        evinfo->evatom.init = 1;
+    }
 
-    get_error_caught = False;
-    XSetErrorHandler (old_handler);
-#else
     if (NameForAtom(atom))
-        REPLY("(%s)", (char*)NameForAtom(atom));
+        snprintf (table->buf, XDBG_BUF_SIZE, "%s", (char*)NameForAtom(atom));
     else
-        REPLY("(0x%lx)", atom);
+        snprintf (table->buf, XDBG_BUF_SIZE, "0x%lx", atom);
+
+    xorg_list_add(&table->link, &evinfo->evatom.list);
+    evinfo->evatom.size++;
 #endif
+    xorg_list_for_each_entry(table, &evinfo->evatom.list, link)
+        if(table->xid == atom)
+        {
+            REPLY ("(%s)", table->buf);
+            break;
+        }
 
     return reply;
 }
 
-char* xDbgGetRegion(void* dpy, EvlogInfo *evinfo, XserverRegion region, char *reply, int *len)
+char* xDbgGetRegion(XserverRegion region, EvlogInfo *evinfo, char *reply, int *len)
 {
-#ifdef XDBG_CLIENT
-    int nrect, i;
-    XRectangle *rects;
-    Display *d = (Display*)dpy;
-    XErrorHandler old_handler = NULL;
-
-    RETURN_VAL_IF_FAIL(dpy != NULL, reply);
-
-    get_error_caught = False;
-    d = (Display*)dpy;
-
-    XSync (d, 0);
-    old_handler = XSetErrorHandler (_get_error_handle);
-
-    rects = XFixesFetchRegion(d, region, &nrect);
-    if (!get_error_caught)
-    {
-        REPLY ("(");
-        for (i = 0; i < nrect; i++)
-        {
-            REPLY ("[%d,%d %dx%d]",
-                   rects[i].x,
-                   rects[i].y,
-                   rects[i].width,
-                   rects[i].height);
-            if(i != nrect - 1)
-                REPLY (",");
-        }
-        REPLY (")");
-    }
-    else
-        REPLY ("(0x%lx)", region);
-
-    get_error_caught = False;
-    XSetErrorHandler (old_handler);
-#else
+    EvlogRegionTable *table;
+#ifndef XDBG_CLIENT
     extern _X_EXPORT RESTYPE RegionResType;
     RegionPtr pRegion;
     BoxPtr rects;
     int nrect, i;
-
+    int s;
     int err = dixLookupResourceByType((pointer *) &pRegion, region,
                                        RegionResType, (ClientPtr)evinfo->client.pClient,
                                        DixReadAccess);
+
+    evinfo->mask |= EVLOG_MASK_REGION;
+
+    if (!evinfo->evregion.init)
+    {
+        xorg_list_init(&evinfo->evregion.list);
+        evinfo->evregion.init = 1;
+    }
+
        if (err != Success)
        {
-        REPLY ("(0x%lx)", region);
-           return reply;
-       }
+        table = malloc (sizeof(EvlogAtomTable));
+        if (!table)
+            return reply;
 
-    nrect = RegionNumRects(pRegion);
-    rects = RegionRects(pRegion);
+        table->xid = region;
 
-    REPLY ("(");
-    for (i = 0; i < nrect; i++)
+        snprintf (table->buf, XDBG_BUF_SIZE, "0x%lx", region);
+        xorg_list_add(&table->link, &evinfo->evregion.list);
+        evinfo->evregion.size++;
+    }
+    else
     {
-        REPLY ("[%d,%d %dx%d]",
-               rects[i].x1,
-               rects[i].y1,
-               rects[i].x2 - rects[i].x1,
-               rects[i].y2 - rects[i].y1);
-        if(i != nrect - 1)
-            REPLY (",");
+        nrect = RegionNumRects(pRegion);
+        rects = RegionRects(pRegion);
+
+        for (i = 0; i < nrect; i++)
+        {
+            table = malloc (sizeof(EvlogAtomTable));
+            if (!table)
+                return reply;
+
+            table->xid = region;
+
+            s = 0;
+            s += snprintf (table->buf + s, XDBG_BUF_SIZE - s,
+                           "[%d,%d %dx%d]",
+                               rects[i].x1,
+                               rects[i].y1,
+                               rects[i].x2 - rects[i].x1,
+                               rects[i].y2 - rects[i].y1);
+            xorg_list_add(&table->link, &evinfo->evregion.list);
+            evinfo->evregion.size++;
+        }
     }
-    REPLY (")");
+
 #endif
+    REPLY("(");
+    xorg_list_for_each_entry(table, &evinfo->evregion.list, link)
+        if(table->xid == region)
+        {
+            REPLY ("%s", table->buf);
+            if(table != xorg_list_last_entry(&evinfo->evregion.list, EvlogRegionTable, link))
+                REPLY (", ");
+        }
+    REPLY(")");
 
     return reply;
 }
index 74f7be7..6d851a8 100644 (file)
@@ -45,14 +45,18 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog_randr.h"
 #include "xdbg_evlog_xinput.h"
 #include "xdbg_evlog_xv.h"
+#include <list.h>
 
 
 char*  xDbgEvlogGetCmd         (char *path);
 Bool   xDbgEvlogRuleSet        (const int argc, const char **argv, char *reply, int *len);
 Bool   xDbgEvlogRuleValidate   (EvlogInfo *evinfo);
-void   xDbgEvlogFillLog        (void* dpy, EvlogInfo *evinfo, Bool on, char *reply, int *len);
+Bool   xDbgEvlogGetExtensionEntry ();
+void   xDbgEvlogFillLog        (EvlogInfo *evinfo, Bool on, char *reply, int *len);
 
-char*  xDbgGetAtom       (void* dpy, Atom atom, char *reply, int *len);
-char*  xDbgGetRegion    (void* dpy, EvlogInfo *evinfo, XserverRegion region, char *reply, int *len);
+void   xDbgDistroyAtomList  (EvlogInfo *evinfo);
+void   xDbgDistroyRegionList (EvlogInfo *evinfo);
+char*  xDbgGetAtom              (Atom atom, EvlogInfo *evinfo, char *reply, int *len);
+char*  xDbgGetRegion          (XserverRegion region, EvlogInfo *evinfo, char *reply, int *len);
 
 #endif
index 8ce5b2b..ea5ae5d 100644 (file)
@@ -59,7 +59,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestComposite(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestComposite(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -123,7 +123,7 @@ _EvlogRequestComposite(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 }
 
 static char *
-_EvlogEventComposite (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventComposite (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -139,24 +139,17 @@ _EvlogEventComposite (void *dpy, EvlogInfo *evinfo, int first_base, char *reply,
 
 
 void
-xDbgEvlogCompositeGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogCompositeGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, COMPOSITE_NAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Composite extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestComposite;
     extinfo->evt_func = _EvlogEventComposite;
 #else
     ExtensionEntry *xext = CheckExtension (COMPOSITE_NAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index 2c8ac51..eee3edb 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void    xDbgEvlogCompositeGetBase (void *dpy, ExtensionInfo *extinfo);
+void    xDbgEvlogCompositeGetBase (ExtensionInfo *extinfo);
 
 #endif
index d3eaab7..1288ee7 100644 (file)
@@ -57,7 +57,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog_core.h"
 #include "xdbg_evlog.h"
 
-char * xDbgEvlogRequestCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+char * xDbgEvlogRequestCore (EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -134,9 +134,10 @@ char * xDbgEvlogRequestCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len
                 stuff->window);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
+
             REPLY (" Type");
-            reply = xDbgGetAtom(dpy, stuff->type, reply, len);
+            reply = xDbgGetAtom(stuff->type, evinfo, reply, len);
 
             return reply;
         }
@@ -148,7 +149,7 @@ char * xDbgEvlogRequestCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len
                 stuff->window);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
 
             return reply;
         }
@@ -160,7 +161,7 @@ char * xDbgEvlogRequestCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len
                 stuff->window);
 
             REPLY (" Selection");
-            reply = xDbgGetAtom(dpy, stuff->selection, reply, len);
+            reply = xDbgGetAtom(stuff->selection, evinfo, reply, len);
 
             return reply;
         }
@@ -172,11 +173,11 @@ char * xDbgEvlogRequestCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len
                 stuff->requestor);
 
             REPLY (" Selection");
-            reply = xDbgGetAtom(dpy, stuff->selection, reply, len);
+            reply = xDbgGetAtom(stuff->selection, evinfo, reply, len);
             REPLY (" Target");
-            reply = xDbgGetAtom(dpy, stuff->target, reply, len);
+            reply = xDbgGetAtom(stuff->target, evinfo, reply, len);
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
 
             return reply;
         }
@@ -557,7 +558,7 @@ char * xDbgEvlogRequestCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len
 }
 
 
-char * xDbgEvlogEventCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+char * xDbgEvlogEventCore (EvlogInfo *evinfo, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -777,7 +778,8 @@ char * xDbgEvlogEventCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 evt->u.property.window);
 
             REPLY (" Atom");
-            reply = xDbgGetAtom(dpy, evt->u.property.atom, reply, len);
+            reply = xDbgGetAtom(evt->u.property.atom, evinfo, reply, len);
+
             return reply;
                }
 
@@ -787,7 +789,7 @@ char * xDbgEvlogEventCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 evt->u.selectionClear.window);
 
             REPLY (" Atom");
-            reply = xDbgGetAtom(dpy, evt->u.selectionClear.atom, reply, len);
+            reply = xDbgGetAtom(evt->u.selectionClear.atom, evinfo, reply, len);
 
             return reply;
                }
@@ -799,11 +801,11 @@ char * xDbgEvlogEventCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 evt->u.selectionRequest.requestor);
 
             REPLY (" selection");
-            reply = xDbgGetAtom(dpy, evt->u.selectionRequest.selection, reply, len);
+            reply = xDbgGetAtom(evt->u.selectionRequest.selection, evinfo, reply, len);
             REPLY (" Target");
-            reply = xDbgGetAtom(dpy, evt->u.selectionRequest.target, reply, len);
+            reply = xDbgGetAtom(evt->u.selectionRequest.target, evinfo, reply, len);
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, evt->u.selectionRequest.property, reply, len);
+            reply = xDbgGetAtom(evt->u.selectionRequest.property, evinfo, reply, len);
 
             return reply;
                }
@@ -814,11 +816,11 @@ char * xDbgEvlogEventCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 evt->u.selectionNotify.requestor);
 
             REPLY (" selection");
-            reply = xDbgGetAtom(dpy, evt->u.selectionNotify.selection, reply, len);
+            reply = xDbgGetAtom(evt->u.selectionNotify.selection, evinfo, reply, len);
             REPLY (" Target");
-            reply = xDbgGetAtom(dpy, evt->u.selectionNotify.target, reply, len);
+            reply = xDbgGetAtom(evt->u.selectionNotify.target, evinfo, reply, len);
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, evt->u.selectionNotify.property, reply, len);
+            reply = xDbgGetAtom(evt->u.selectionNotify.property, evinfo, reply, len);
 
             return reply;
                }
@@ -838,7 +840,7 @@ char * xDbgEvlogEventCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 evt->u.clientMessage.window);
 
             REPLY (" Type");
-            reply = xDbgGetAtom(dpy, evt->u.clientMessage.u.b.type, reply, len);
+            reply = xDbgGetAtom(evt->u.clientMessage.u.b.type, evinfo, reply, len);
 
             return reply;
                }
index fd00d42..6b44b91 100644 (file)
@@ -34,7 +34,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-char * xDbgEvlogRequestCore (void *dpy, EvlogInfo *evinfo, char *reply, int *len);
-char * xDbgEvlogEventCore     (void *dpy, EvlogInfo *evinfo, char *reply, int *len);
+char * xDbgEvlogRequestCore (EvlogInfo *evinfo, char *reply, int *len);
+char * xDbgEvlogEventCore     (EvlogInfo *evinfo, char *reply, int *len);
 
 #endif
index 23de22a..f991163 100644 (file)
@@ -60,7 +60,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestDamage(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestDamage(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -94,7 +94,7 @@ _EvlogRequestDamage(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 }
 
 static char*
-_EvlogEventDamage (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventDamage (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -126,25 +126,17 @@ _EvlogEventDamage (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, in
 }
 
 void
-xDbgEvlogDamageGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogDamageGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, DAMAGE_NAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Damage extension. \n");
-        return;
-    }
-
     extinfo->req_func = _EvlogRequestDamage;
     extinfo->evt_func = _EvlogEventDamage;
 #else
     ExtensionEntry *xext = CheckExtension (DAMAGE_NAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index e1ca315..50cf566 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void     xDbgEvlogDamageGetBase (void *dpy, ExtensionInfo *extinfo);
+void     xDbgEvlogDamageGetBase (ExtensionInfo *extinfo);
 
 #endif
index 2f484eb..f91aca8 100644 (file)
@@ -60,7 +60,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestDri2 (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestDri2 (EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -103,7 +103,7 @@ _EvlogRequestDri2 (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->dest);
 
             REPLY (" Region");
-            reply = xDbgGetRegion(dpy, evinfo, stuff->region, reply, len);
+            reply = xDbgGetRegion(stuff->region, evinfo, reply, len);
 
             return reply;
         }
@@ -151,7 +151,7 @@ _EvlogRequestDri2 (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->drawable);
 
             REPLY (" Region");
-            reply = xDbgGetRegion(dpy, evinfo, stuff->region, reply, len);
+            reply = xDbgGetRegion(stuff->region, evinfo, reply, len);
 
             return reply;
         }
@@ -165,7 +165,7 @@ _EvlogRequestDri2 (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 
 
 static char *
-_EvlogEventDri2 (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventDri2 (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -183,6 +183,8 @@ _EvlogEventDri2 (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int
                 stuff->sbc_hi,
                 stuff->sbc_lo);
 
+            evinfo->evt.size = sizeof (xDRI2BufferSwapComplete);
+
             return reply;
         }
 
@@ -205,24 +207,17 @@ _EvlogEventDri2 (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int
 
 
 void
-xDbgEvlogDri2GetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogDri2GetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, DRI2_NAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no DRI2 extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestDri2;
     extinfo->evt_func = _EvlogEventDri2;
 #else
     ExtensionEntry *xext = CheckExtension (DRI2_NAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index b7c01aa..b5e4d7a 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void    xDbgEvlogDri2GetBase (void *dpy, ExtensionInfo *extinfo);
+void    xDbgEvlogDri2GetBase (ExtensionInfo *extinfo);
 
 #endif
index ae10532..d01a11a 100644 (file)
@@ -59,12 +59,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define UNKNOWN_EVENT "<unknown>"
 
-extern ExtensionInfo* Sorted_Evlog_extensions;
 
 char *
-xDbgEvlogEvent (void *dpy, EvlogInfo *evinfo, Bool on, int Extensions_size, char *reply, int *len)
+xDbgEvlogEvent (EvlogInfo *evinfo, Bool on, char *reply, int *len)
 {
-    EvlogEvent   ev;
+    extern ExtensionInfo* Sorted_Evlog_extensions;
+    extern int Extensions_size;
+    EvlogEvent ev;
     xEvent *xEvt = NULL;
     int type;
 
@@ -89,28 +90,28 @@ xDbgEvlogEvent (void *dpy, EvlogInfo *evinfo, Bool on, int Extensions_size, char
 
     if (type < EXTENSION_EVENT_BASE)
     {
-        return xDbgEvlogEventCore (dpy, evinfo, reply, len);
+        return xDbgEvlogEventCore (evinfo, reply, len);
     }
     else
     {
         int i;
 
-        for (i = 0 ; i < Extensions_size / sizeof (ExtensionInfo); i++)
+        for (i = 0 ; i < Extensions_size ; i++)
         {
             if (Sorted_Evlog_extensions[i].evt_base == 0)
                 continue;
 
-            if (i != Extensions_size / sizeof (ExtensionInfo) - 1)
+            if (i != Extensions_size - 1)
             {
                 if (type >= Sorted_Evlog_extensions[i].evt_base &&
                      type < Sorted_Evlog_extensions[i+1].evt_base)
                 {
-                    return Sorted_Evlog_extensions[i].evt_func (dpy, evinfo, Sorted_Evlog_extensions[i].evt_base, reply, len);
+                    return Sorted_Evlog_extensions[i].evt_func (evinfo, Sorted_Evlog_extensions[i].evt_base, reply, len);
                 }
                 continue;
             }
 
-            return Sorted_Evlog_extensions[i].evt_func (dpy, evinfo, Sorted_Evlog_extensions[i].evt_base, reply, len);
+            return Sorted_Evlog_extensions[i].evt_func (evinfo, Sorted_Evlog_extensions[i].evt_base, reply, len);
         }
 
     }
index 8d61fee..eff291d 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-char *  xDbgEvlogEvent (void *dpy, EvlogInfo *evinfo, Bool on, int Extensions_size, char *reply, int *len);
+char *  xDbgEvlogEvent (EvlogInfo *evinfo, Bool on, char *reply, int *len);
 
 #endif
index 4ad23ee..6ef524e 100644 (file)
@@ -60,7 +60,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestGesture(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestGesture(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -114,7 +114,7 @@ _EvlogRequestGesture(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 }
 
 static char *
-_EvlogEventGesture (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventGesture (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -219,23 +219,17 @@ _EvlogEventGesture (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, i
 
 
 void
-xDbgEvlogGestureGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogGestureGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
+    RETURN_IF_FAIL (extinfo != NULL);
 
-    RETURN_IF_FAIL (d != NULL);
-
-    if (!XQueryExtension(d, GESTURE_EXT_NAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Gesture extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestGesture;
     extinfo->evt_func = _EvlogEventGesture;
 #else
     ExtensionEntry *xext = CheckExtension (GESTURE_EXT_NAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index 0090872..9fe61ca 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void    xDbgEvlogGestureGetBase (void *dpy, ExtensionInfo *extinfo);
+void    xDbgEvlogGestureGetBase (ExtensionInfo *extinfo);
 
 #endif
index 7e403c4..cc24009 100644 (file)
@@ -61,7 +61,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestRandr (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestRandr (EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -123,7 +123,7 @@ _EvlogRequestRandr (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->output);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
 
             return reply;
         }
@@ -135,7 +135,7 @@ _EvlogRequestRandr (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->output);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
 
             return reply;
         }
@@ -149,9 +149,9 @@ _EvlogRequestRandr (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->nUnits);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
             REPLY (" Type");
-            reply = xDbgGetAtom(dpy, stuff->type, reply, len);
+            reply = xDbgGetAtom(stuff->type, evinfo, reply, len);
 
             return reply;
         }
@@ -163,7 +163,7 @@ _EvlogRequestRandr (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->output);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
 
             return reply;
         }
@@ -177,9 +177,9 @@ _EvlogRequestRandr (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->longLength);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
             REPLY (" Type");
-            reply = xDbgGetAtom(dpy, stuff->type, reply, len);
+            reply = xDbgGetAtom(stuff->type, evinfo, reply, len);
 
             return reply;
         }
@@ -223,7 +223,7 @@ _EvlogRequestRandr (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 
 
 static char *
-_EvlogEventRandr (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventRandr (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -284,7 +284,7 @@ _EvlogEventRandr (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int
                         stuff->output);
 
                     REPLY (" Atom");
-                    reply = xDbgGetAtom(dpy, stuff->atom, reply, len);
+                    reply = xDbgGetAtom(stuff->atom, evinfo, reply, len);
 
                     return reply;
                 }
@@ -307,7 +307,7 @@ _EvlogEventRandr (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int
                         stuff->provider);
 
                     REPLY (" Atom");
-                    reply = xDbgGetAtom(dpy, stuff->atom, reply, len);
+                    reply = xDbgGetAtom(stuff->atom, evinfo, reply, len);
 
                     return reply;
                 }
@@ -335,24 +335,17 @@ _EvlogEventRandr (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int
 
 
 void
-xDbgEvlogRandrGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogRandrGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, RANDR_NAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Randr extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestRandr;
     extinfo->evt_func = _EvlogEventRandr;
 #else
     ExtensionEntry *xext = CheckExtension (RANDR_NAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index d491c09..fd2f1a5 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void    xDbgEvlogRandrGetBase (void *dpy, ExtensionInfo *extinfo);
+void    xDbgEvlogRandrGetBase (ExtensionInfo *extinfo);
 
 #endif
index 102332d..5bcd38d 100644 (file)
@@ -59,14 +59,16 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define UNKNOWN_EVENT "<unknown>"
 
-extern ExtensionInfo Evlog_extensions[];
 
 char *
-xDbgEvlogReqeust (void *dpy, EvlogInfo *evinfo, Bool on, int Extensions_size, char *reply, int *len)
+xDbgEvlogReqeust (EvlogInfo *evinfo, Bool on, char *reply, int *len)
 {
+    extern ExtensionInfo Evlog_extensions[];
+    extern int Extensions_size;
     EvlogRequest req;
     xReq *xReq = NULL;
 
+
     RETURN_VAL_IF_FAIL (evinfo != NULL, reply);
     RETURN_VAL_IF_FAIL (evinfo->type == REQUEST, reply);
 
@@ -80,17 +82,17 @@ xDbgEvlogReqeust (void *dpy, EvlogInfo *evinfo, Bool on, int Extensions_size, ch
 
     if (xReq->reqType < EXTENSION_BASE)
     {
-        return xDbgEvlogRequestCore (dpy, evinfo, reply, len);
+        return xDbgEvlogRequestCore (evinfo, reply, len);
     }
     else
     {
         int i;
 
-        for (i = 0 ; i < Extensions_size / sizeof (ExtensionInfo); i++)
+        for (i = 0 ; i < Extensions_size ; i++)
         {
             if (xReq->reqType == Evlog_extensions[i].opcode)
             {
-                return Evlog_extensions[i].req_func (dpy, evinfo, reply, len);
+                return Evlog_extensions[i].req_func (evinfo, reply, len);
             }
         }
     }
index 908edef..7c82719 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-char *  xDbgEvlogReqeust (void *dpy, EvlogInfo *evinfo, Bool on, int Extensions_size, char *reply, int *len);
+char *  xDbgEvlogReqeust (EvlogInfo *evinfo, Bool on, char *reply, int *len);
 
 #endif
index d4b1ab4..6d7b426 100644 (file)
@@ -70,7 +70,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestXextDpms(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestXextDpms(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -105,7 +105,7 @@ _EvlogRequestXextDpms(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 
 
 static char *
-_EvlogRequestXextShm (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestXextShm (EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -161,7 +161,7 @@ _EvlogRequestXextShm (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 }
 
 static char *
-_EvlogRequestXextSync(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestXextSync(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -226,7 +226,7 @@ _EvlogRequestXextSync(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 }
 
 static char *
-_EvlogRequestXextXtestExt1(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestXextXtestExt1(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -259,7 +259,7 @@ _EvlogRequestXextXtestExt1(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 
 
 static char *
-_EvlogRequestXextXtest(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestXextXtest(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -314,7 +314,7 @@ _EvlogRequestXextXtest(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 
 
 static char *
-_EvlogEventXextDpms (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventXextDpms (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -330,7 +330,7 @@ _EvlogEventXextDpms (void *dpy, EvlogInfo *evinfo, int first_base, char *reply,
 
 
 static char *
-_EvlogEventXextShm (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventXextShm (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -354,7 +354,7 @@ _EvlogEventXextShm (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, i
 
 
 static char *
-_EvlogEventXextSync (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventXextSync (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -395,7 +395,7 @@ _EvlogEventXextSync (void *dpy, EvlogInfo *evinfo, int first_base, char *reply,
 
 
 static char *
-_EvlogEventXextXtestExt1 (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventXextXtestExt1 (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -410,7 +410,7 @@ _EvlogEventXextXtestExt1 (void *dpy, EvlogInfo *evinfo, int first_base, char *re
 }
 
 static char *
-_EvlogEventXextXtest (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventXextXtest (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -425,24 +425,17 @@ _EvlogEventXextXtest (void *dpy, EvlogInfo *evinfo, int first_base, char *reply,
 }
 
 void
-xDbgEvlogXextDpmsGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogXextDpmsGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, DPMSExtensionName, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Xext_DPMS extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestXextDpms;
     extinfo->evt_func = _EvlogEventXextDpms;
 #else
     ExtensionEntry *xext = CheckExtension (DPMSExtensionName);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
@@ -454,24 +447,17 @@ xDbgEvlogXextDpmsGetBase (void *dpy, ExtensionInfo *extinfo)
 
 
 void
-xDbgEvlogXextShmGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogXextShmGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, SHMNAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no XShm extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestXextShm;
     extinfo->evt_func = _EvlogEventXextShm;
 #else
     ExtensionEntry *xext = CheckExtension (SHMNAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
@@ -483,25 +469,17 @@ xDbgEvlogXextShmGetBase (void *dpy, ExtensionInfo *extinfo)
 
 
 void
-xDbgEvlogXextSyncGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogXextSyncGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, SYNC_NAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Sync extension. \n");
-        return;
-    }
-
     extinfo->req_func = _EvlogRequestXextSync;
     extinfo->evt_func = _EvlogEventXextSync;
 #else
     ExtensionEntry *xext = CheckExtension (SYNC_NAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
@@ -514,24 +492,17 @@ xDbgEvlogXextSyncGetBase (void *dpy, ExtensionInfo *extinfo)
 
 
 void
-xDbgEvlogXextXtestExt1GetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogXextXtestExt1GetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, XTestEXTENSION_NAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no XTestExt1 extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestXextXtestExt1;
     extinfo->evt_func = _EvlogEventXextXtestExt1;
 #else
     ExtensionEntry *xext = CheckExtension (XTestEXTENSION_NAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
@@ -544,24 +515,17 @@ xDbgEvlogXextXtestExt1GetBase (void *dpy, ExtensionInfo *extinfo)
 
 
 void
-xDbgEvlogXextXtestGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogXextXtestGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, XTestExtensionName, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Xext_Xtest extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestXextXtest;
     extinfo->evt_func = _EvlogEventXextXtest;
 #else
     ExtensionEntry *xext = CheckExtension (XTestExtensionName);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index c0c1a09..79c2fe7 100644 (file)
@@ -34,10 +34,10 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void    xDbgEvlogXextDpmsGetBase (void *dpy, ExtensionInfo *extinfo);
-void    xDbgEvlogXextShmGetBase (void *dpy, ExtensionInfo *extinfo);
-void    xDbgEvlogXextSyncGetBase (void *dpy, ExtensionInfo *extinfo);
-void    xDbgEvlogXextXtestExt1GetBase (void *dpy, ExtensionInfo *extinfo);
-void    xDbgEvlogXextXtestGetBase (void *dpy, ExtensionInfo *extinfo);
+void    xDbgEvlogXextDpmsGetBase (ExtensionInfo *extinfo);
+void    xDbgEvlogXextShmGetBase (ExtensionInfo *extinfo);
+void    xDbgEvlogXextSyncGetBase (ExtensionInfo *extinfo);
+void    xDbgEvlogXextXtestExt1GetBase (ExtensionInfo *extinfo);
+void    xDbgEvlogXextXtestGetBase (ExtensionInfo *extinfo);
 
 #endif
index ebbc010..33467a3 100644 (file)
@@ -63,7 +63,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestXinput (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestXinput (EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -374,9 +374,9 @@ _EvlogRequestXinput (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->num_items);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
             REPLY (" Type");
-            reply = xDbgGetAtom(dpy, stuff->type, reply, len);
+            reply = xDbgGetAtom(stuff->type, evinfo, reply, len);
 
             return reply;
         }
@@ -388,7 +388,7 @@ _EvlogRequestXinput (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->deviceid);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
 
             return reply;
         }
@@ -400,9 +400,9 @@ _EvlogRequestXinput (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->deviceid);
 
             REPLY (" Property");
-            reply = xDbgGetAtom(dpy, stuff->property, reply, len);
+            reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
             REPLY (" Type");
-            reply = xDbgGetAtom(dpy, stuff->type, reply, len);
+            reply = xDbgGetAtom(stuff->type, evinfo, reply, len);
 
             return reply;
         }
@@ -424,7 +424,7 @@ _EvlogRequestXinput (void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 }
 
 static char *
-_EvlogEventXinput (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventXinput (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -636,7 +636,7 @@ _EvlogEventXinput (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, in
                 stuff->deviceid);
 
             REPLY (" Atom");
-            reply = xDbgGetAtom(dpy, stuff->atom, reply, len);
+            reply = xDbgGetAtom(stuff->atom, evinfo, reply, len);
 
             return reply;
         }
@@ -649,24 +649,17 @@ _EvlogEventXinput (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, in
 }
 
 void
-xDbgEvlogXinputGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogXinputGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, INAME, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Xinput extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestXinput;
     extinfo->evt_func = _EvlogEventXinput;
 #else
     ExtensionEntry *xext = CheckExtension (INAME);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index b7ed651..0c30e17 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void    xDbgEvlogXinputGetBase (void *dpy, ExtensionInfo *extinfo);
+void    xDbgEvlogXinputGetBase (ExtensionInfo *extinfo);
 
 #endif
index 2452471..52d2842 100644 (file)
@@ -61,7 +61,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xdbg_evlog.h"
 
 static char *
-_EvlogRequestXv(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
+_EvlogRequestXv(EvlogInfo *evinfo, char *reply, int *len)
 {
     xReq *req = evinfo->req.ptr;
 
@@ -212,7 +212,7 @@ _EvlogRequestXv(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->value);
 
             REPLY (" Attribute");
-            reply = xDbgGetAtom(dpy, stuff->attribute, reply, len);
+            reply = xDbgGetAtom(stuff->attribute, evinfo, reply, len);
 
             return reply;
         }
@@ -224,7 +224,7 @@ _EvlogRequestXv(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
                 stuff->port);
 
             REPLY (" Attribute");
-            reply = xDbgGetAtom(dpy, stuff->attribute, reply, len);
+            reply = xDbgGetAtom(stuff->attribute, evinfo, reply, len);
 
             return reply;
         }
@@ -282,7 +282,7 @@ _EvlogRequestXv(void *dpy, EvlogInfo *evinfo, char *reply, int *len)
 }
 
 static char *
-_EvlogEventXv (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len)
+_EvlogEventXv (EvlogInfo *evinfo, int first_base, char *reply, int *len)
 {
     xEvent *evt = evinfo->evt.ptr;
 
@@ -307,7 +307,7 @@ _EvlogEventXv (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *l
                 stuff->value);
 
             REPLY (" Attribute");
-            reply = xDbgGetAtom(dpy, stuff->attribute, reply, len);
+            reply = xDbgGetAtom(stuff->attribute, evinfo, reply, len);
 
             return reply;
         }
@@ -320,24 +320,17 @@ _EvlogEventXv (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *l
 }
 
 void
-xDbgEvlogXvGetBase (void *dpy, ExtensionInfo *extinfo)
+xDbgEvlogXvGetBase (ExtensionInfo *extinfo)
 {
 #ifdef XDBG_CLIENT
-    Display *d = (Display*)dpy;
-
-    RETURN_IF_FAIL (d != NULL);
     RETURN_IF_FAIL (extinfo != NULL);
 
-    if (!XQueryExtension(d, XvName, &extinfo->opcode, &extinfo->evt_base, &extinfo->err_base))
-    {
-        XDBG_LOG ("no Xv extension. \n");
-        return;
-    }
     extinfo->req_func = _EvlogRequestXv;
     extinfo->evt_func = _EvlogEventXv;
 #else
     ExtensionEntry *xext = CheckExtension (XvName);
     RETURN_IF_FAIL (xext != NULL);
+    RETURN_IF_FAIL (extinfo != NULL);
 
     extinfo->opcode = xext->base;
     extinfo->evt_base = xext->eventBase;
index 5ea8ee3..4533663 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_types.h"
 
-void   xDbgEvlogXvGetBase (void *dpy, ExtensionInfo *extinfo);
+void   xDbgEvlogXvGetBase (ExtensionInfo *extinfo);
 
 #endif
index 791d3ae..6ed2cfe 100644 (file)
@@ -36,9 +36,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <X11/Xdefs.h> /* for Bool */
 #include <X11/Xlib.h>
 #include <X11/extensions/Xfixes.h>
+#include <list.h>
 
 
 #define XDBG_PATH_MAX        1024
+#define XDBG_BUF_SIZE        64
 
 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
@@ -82,6 +84,23 @@ typedef enum
 #define EVLOG_MASK_CLIENT    (1<<0)
 #define EVLOG_MASK_REQUEST   (1<<1)
 #define EVLOG_MASK_EVENT     (1<<2)
+#define EVLOG_MASK_ATOM      (1<<3)
+#define EVLOG_MASK_REGION    (1<<4)
+
+
+typedef struct _EvlogTable
+{
+    CARD32           xid;
+    char             buf[XDBG_BUF_SIZE];
+    struct xorg_list link;
+} EvlogAtomTable, EvlogRegionTable;
+
+typedef struct _EvlogList
+{
+    struct xorg_list list;
+    int              init;
+    int              size;
+} EvlogAtom, EvlogRegion;
 
 typedef struct _EvlogClient
 {
@@ -104,19 +123,22 @@ typedef struct _EvlogRequest
 typedef struct _EvlogEvent
 {
     xEvent *ptr;
+    int     size;
     char    name[PATH_MAX+1];
 } EvlogEvent;
 
 typedef struct _EvlogInfo
 {
-    EvlogType    type;
+    EvlogType     type;
 
-    int          mask;
-    EvlogClient  client;
-    EvlogRequest req;
-    EvlogEvent   evt;
+    int           mask;
+    EvlogClient   client;
+    EvlogRequest  req;
+    EvlogEvent    evt;
+    EvlogAtom     evatom;
+    EvlogRegion   evregion;
 
-    CARD32       time;
+    CARD32        time;
 } EvlogInfo;
 
 
@@ -124,12 +146,12 @@ typedef struct _ExtensionInfo ExtensionInfo;
 
 struct _ExtensionInfo
 {
-    void  (*get_base_func) (void *dpy, ExtensionInfo *extinfo);
+    void  (*get_base_func) (ExtensionInfo *extinfo);
     int     opcode;
     int     evt_base;
     int     err_base;
-    char* (*req_func) (void *dpy, EvlogInfo *evinfo, char *reply, int *len);
-    char* (*evt_func) (void *dpy, EvlogInfo *evinfo, int first_base, char *reply, int *len);
+    char* (*req_func) (EvlogInfo *evinfo, char *reply, int *len);
+    char* (*evt_func) (EvlogInfo *evinfo, int first_base, char *reply, int *len);
 };
 
 #endif
index 88b9579..3723cce 100644 (file)
@@ -74,10 +74,14 @@ static int  xev_trace_fd = -1;
 static int  xev_trace_record_fd = -1;
 static Atom atom_rotate = None;
 static Atom atom_client_pid = None;
+static int  init = 0;
 
 static void evtRecord (int fd, EvlogInfo *evinfo)
 {
+    extern ExtensionInfo Evlog_extensions[];
+    extern int Extensions_size;
     int write_len = 0;
+    int i;
 
     XDBG_RETURN_IF_FAIL (fd >= 0)
     XDBG_RETURN_IF_FAIL (evinfo != NULL);
@@ -94,13 +98,56 @@ static void evtRecord (int fd, EvlogInfo *evinfo)
         write_len += (sizeof (EvlogRequest) + (evinfo->req.length * 4));
 
     if (evinfo->mask & EVLOG_MASK_EVENT)
-        write_len += (sizeof (EvlogEvent) + sizeof (xEvent));
+        write_len += (sizeof (EvlogEvent) + evinfo->evt.size);
+
+    if (evinfo->mask & EVLOG_MASK_ATOM)
+        write_len += (sizeof (int) +
+                     (sizeof (EvlogAtomTable) * evinfo->evatom.size));
+
+    if (evinfo->mask & EVLOG_MASK_REGION)
+        write_len += (sizeof (int) +
+                     (sizeof (EvlogRegionTable) * evinfo->evregion.size));
+
+    if (!init)
+        write_len += (sizeof (int) +
+                    ((sizeof (int) * 3) * Extensions_size));
 
     if (write (fd, &write_len, sizeof(int)) == -1)
     {
         XDBG_ERROR (MXDBG, "failed: write write_len\n");
         return;
     }
+
+    if (!init)
+    {
+        if (write (fd, &Extensions_size, sizeof(int)) == -1)
+        {
+            XDBG_ERROR (MXDBG, "failed: write Extensions_size\n");
+            return;
+        }
+
+        for (i = 0 ; i < Extensions_size ; i++)
+        {
+            if (write (fd, &Evlog_extensions[i].opcode, sizeof(int)) == -1)
+            {
+                XDBG_ERROR (MXDBG, "failed: write Evlog_extensions[%d] opcode\n", i);
+                return;
+            }
+            if (write (fd, &Evlog_extensions[i].evt_base, sizeof(int)) == -1)
+            {
+                XDBG_ERROR (MXDBG, "failed: write Evlog_extensions[%d] evt_base\n", i);
+                return;
+            }
+            if (write (fd, &Evlog_extensions[i].err_base, sizeof(int)) == -1)
+            {
+                XDBG_ERROR (MXDBG, "failed: write Evlog_extensions[%d] err_base\n", i);
+                return;
+            }
+        }
+
+        init = 1;
+    }
+
     if (write (fd, &evinfo->time, sizeof(CARD32)) == -1)
     {
         XDBG_ERROR (MXDBG, "failed: write msec\n");
@@ -144,23 +191,52 @@ static void evtRecord (int fd, EvlogInfo *evinfo)
             XDBG_ERROR (MXDBG, "failed: write event\n");
             return;
         }
-        if (write (fd, evinfo->evt.ptr, sizeof (xEvent)) == -1)
+
+        XDBG_WARNING_IF_FAIL (evinfo->evt.size > 0);
+        if (write (fd, evinfo->evt.ptr, evinfo->evt.size) == -1)
         {
             XDBG_ERROR (MXDBG, "failed: write event\n");
             return;
         }
     }
-}
 
-static void evtPrintF (int fd, EvlogInfo *evinfo)
-{
-    char log[1024];
-    int size = sizeof (log);
+    if (evinfo->mask & EVLOG_MASK_ATOM)
+    {
+        EvlogAtomTable *table;
 
+        if (write (fd, &evinfo->evatom.size, sizeof (int)) == -1)
+        {
+            XDBG_ERROR (MXDBG, "failed: write atom size\n");
+            return;
+        }
+        xorg_list_for_each_entry(table, &evinfo->evatom.list, link)
+            if (write (fd, table, sizeof (EvlogAtomTable)) == -1)
+            {
+                XDBG_ERROR (MXDBG, "failed: write atom table\n");
+                return;
+            }
+    }
 
+    if (evinfo->mask & EVLOG_MASK_REGION)
+    {
+        EvlogRegionTable *table;
 
-    xDbgEvlogFillLog (NULL, evinfo, TRUE, log, &size);
+        if (write (fd, &evinfo->evregion.size, sizeof (int)) == -1)
+        {
+            XDBG_ERROR (MXDBG, "failed: write region size\n");
+            return;
+        }
+        xorg_list_for_each_entry(table, &evinfo->evregion.list, link)
+            if (write (fd, table, sizeof (EvlogRegionTable)) == -1)
+            {
+                XDBG_ERROR (MXDBG, "failed: write region table\n");
+                return;
+            }
+    }
+}
 
+static void evtPrintF (int fd, EvlogInfo *evinfo, char *log)
+{
     if (fd < 0)
         ErrorF ("%s", log);
     else
@@ -170,6 +246,7 @@ static void evtPrintF (int fd, EvlogInfo *evinfo)
 static void evtPrint (EvlogType type, ClientPtr client, xEvent *ev)
 {
     EvlogInfo evinfo = {0,};
+    static int EntryInit = 0;
 
     /* evinfo.type */
     evinfo.type = type;
@@ -221,14 +298,32 @@ static void evtPrint (EvlogType type, ClientPtr client, xEvent *ev)
     /* evinfo.time */
     evinfo.time = GetTimeInMillis ();
 
+    /* get extension entry */
+    if (!EntryInit && !xDbgEvlogGetExtensionEntry (NULL))
+        return;
+
+    EntryInit = 1;
+
     if (!xDbgEvlogRuleValidate (&evinfo))
         return;
 
     if (xev_trace_record_fd >= 0)
+    {
+        xDbgEvlogFillLog (&evinfo, TRUE, NULL, NULL);
         evtRecord (xev_trace_record_fd, &evinfo);
+    }
     else
-        evtPrintF (xev_trace_fd, &evinfo);
+    {
+        char log[1024];
+        int size = sizeof (log);
+
+        xDbgEvlogFillLog (&evinfo, TRUE, log, &size);
+        evtPrintF (xev_trace_fd, &evinfo, log);
+    }
 
+    /* evatom initialize */
+    xDbgDistroyAtomList(&evinfo);
+    xDbgDistroyRegionList(&evinfo);
 }
 
 static const char*
@@ -564,6 +659,7 @@ Bool
 xDbgModuleEvlogSetEvlogPath (XDbgModule *pMod, int pid, char *path, char *reply, int *len)
 {
     char fd_name[XDBG_PATH_MAX];
+    int  fd_check = -1;
 
     if (!path || strlen (path) <= 0)
     {
@@ -607,6 +703,12 @@ xDbgModuleEvlogSetEvlogPath (XDbgModule *pMod, int pid, char *path, char *reply,
             snprintf (fd_name, XDBG_PATH_MAX, "%s", path);
     }
 
+    fd_check = open (fd_name, O_RDONLY);
+    if(fd_check < 0)
+        init = 0;
+    else
+        close (fd_check);
+
     xev_trace_record_fd = open (fd_name, O_CREAT|O_RDWR|O_APPEND, 0755);
     if (xev_trace_record_fd < 0)
     {