[cogl/wip/wl-list: 5/7] Use CoglList instead of COGL_LIST_* for CoglClosures



commit 0808db434ee437530c790ce6b66b5d77f0546b05
Author: Neil Roberts <neil linux intel com>
Date:   Sun Jun 9 01:50:22 2013 +0100

    Use CoglList instead of COGL_LIST_* for CoglClosures
    
    This is part of ongoing work to replace the BSD embedded list
    implementation with the one from Wayland. In this case the list head
    now has an extra pointer which means CoglOnscreen will grow by the
    size of three pointers, but this doesn't seem like a particularly
    struct to optimise for size anyway.

 cogl/cogl-closure-list-private.h |   52 +++++++++++++++++--------------------
 cogl/cogl-closure-list.c         |   10 +++---
 cogl/cogl-onscreen-private.h     |    6 ++--
 cogl/cogl-onscreen.c             |    6 ++--
 cogl/cogl-poll.c                 |    2 +-
 cogl/cogl-renderer-private.h     |    2 +-
 cogl/cogl-renderer.c             |    2 +-
 cogl/cogl-sdl.c                  |    2 +-
 8 files changed, 39 insertions(+), 43 deletions(-)
---
diff --git a/cogl/cogl-closure-list-private.h b/cogl/cogl-closure-list-private.h
index 9aaa179..92ba0a1 100644
--- a/cogl/cogl-closure-list-private.h
+++ b/cogl/cogl-closure-list-private.h
@@ -25,7 +25,7 @@
 #define _COGL_CLOSURE_LIST_PRIVATE_H_
 
 #include "cogl-object.h"
-#include "cogl-queue.h"
+#include "cogl-list.h"
 
 /*
  * This implements a list of callbacks that can be used a bit like
@@ -43,18 +43,14 @@
  * point.
  */
 
-typedef struct _CoglClosure CoglClosure;
-
-COGL_LIST_HEAD (CoglClosureList, CoglClosure);
-
-struct _CoglClosure
+typedef struct _CoglClosure
 {
-  COGL_LIST_ENTRY (CoglClosure) list_node;
+  CoglList link;
 
   void *function;
   void *user_data;
   CoglUserDataDestroyCallback destroy_cb;
-};
+} CoglClosure;
 
 /*
  * _cogl_closure_disconnect:
@@ -67,10 +63,10 @@ void
 _cogl_closure_disconnect (CoglClosure *closure);
 
 void
-_cogl_closure_list_disconnect_all (CoglClosureList *list);
+_cogl_closure_list_disconnect_all (CoglList *list);
 
 CoglClosure *
-_cogl_closure_list_add (CoglClosureList *list,
+_cogl_closure_list_add (CoglList *list,
                         void *function,
                         void *user_data,
                         CoglUserDataDestroyCallback destroy_cb);
@@ -91,26 +87,26 @@ _cogl_closure_list_add (CoglClosureList *list,
  * callbacks. If you want to handle the return value you should
  * manually iterate the list and invoke the callbacks yourself.
  */
-#define _cogl_closure_list_invoke(list, cb_type, ...)            \
-  G_STMT_START {                                                \
-    CoglClosure *_c, *_tmp;                                     \
-                                                                \
-    COGL_LIST_FOREACH_SAFE (_c, (list), list_node, _tmp)        \
-      {                                                         \
-        cb_type _cb = _c->function;                             \
-        _cb (__VA_ARGS__, _c->user_data);                       \
-      }                                                         \
+#define _cogl_closure_list_invoke(list, cb_type, ...)   \
+  G_STMT_START {                                        \
+    CoglClosure *_c, *_tmp;                             \
+                                                        \
+    _cogl_list_for_each_safe (_c, _tmp, (list), link)   \
+      {                                                 \
+        cb_type _cb = _c->function;                     \
+        _cb (__VA_ARGS__, _c->user_data);               \
+      }                                                 \
   } G_STMT_END
 
-#define _cogl_closure_list_invoke_no_args(list)                 \
-  G_STMT_START {                                                \
-    CoglClosure *_c, *_tmp;                                     \
-                                                                \
-    COGL_LIST_FOREACH_SAFE (_c, (list), list_node, _tmp)        \
-      {                                                         \
-        void (*_cb)(void *) = _c->function;                     \
-        _cb (_c->user_data);                                    \
-      }                                                         \
+#define _cogl_closure_list_invoke_no_args(list)         \
+  G_STMT_START {                                        \
+    CoglClosure *_c, *_tmp;                             \
+                                                        \
+    _cogl_list_for_each_safe (_c, _tmp, (list), link)   \
+      {                                                 \
+        void (*_cb)(void *) = _c->function;             \
+        _cb (_c->user_data);                            \
+      }                                                 \
   } G_STMT_END
 
 #endif /* _COGL_CLOSURE_LIST_PRIVATE_H_ */
diff --git a/cogl/cogl-closure-list.c b/cogl/cogl-closure-list.c
index 60b26b4..dfb5bf3 100644
--- a/cogl/cogl-closure-list.c
+++ b/cogl/cogl-closure-list.c
@@ -30,7 +30,7 @@
 void
 _cogl_closure_disconnect (CoglClosure *closure)
 {
-  COGL_LIST_REMOVE (closure, list_node);
+  _cogl_list_remove (&closure->link);
 
   if (closure->destroy_cb)
     closure->destroy_cb (closure->user_data);
@@ -39,16 +39,16 @@ _cogl_closure_disconnect (CoglClosure *closure)
 }
 
 void
-_cogl_closure_list_disconnect_all (CoglClosureList *list)
+_cogl_closure_list_disconnect_all (CoglList *list)
 {
   CoglClosure *closure, *next;
 
-  COGL_LIST_FOREACH_SAFE (closure, list, list_node, next)
+  _cogl_list_for_each_safe (closure, next, list, link)
     _cogl_closure_disconnect (closure);
 }
 
 CoglClosure *
-_cogl_closure_list_add (CoglClosureList *list,
+_cogl_closure_list_add (CoglList *list,
                         void *function,
                         void *user_data,
                         CoglUserDataDestroyCallback destroy_cb)
@@ -59,7 +59,7 @@ _cogl_closure_list_add (CoglClosureList *list,
   closure->user_data = user_data;
   closure->destroy_cb = destroy_cb;
 
-  COGL_LIST_INSERT_HEAD (list, closure, list_node);
+  _cogl_list_insert (list, &closure->link);
 
   return closure;
 }
diff --git a/cogl/cogl-onscreen-private.h b/cogl/cogl-onscreen-private.h
index 1383f3d..1fd62ea 100644
--- a/cogl/cogl-onscreen-private.h
+++ b/cogl/cogl-onscreen-private.h
@@ -72,12 +72,12 @@ struct _CoglOnscreen
 
   CoglBool swap_throttled;
 
-  CoglClosureList frame_closures;
+  CoglList frame_closures;
 
   CoglBool resizable;
-  CoglClosureList resize_closures;
+  CoglList resize_closures;
 
-  CoglClosureList dirty_closures;
+  CoglList dirty_closures;
 
   int64_t frame_counter;
   int64_t swap_frame_counter; /* frame counter at last all to
diff --git a/cogl/cogl-onscreen.c b/cogl/cogl-onscreen.c
index 8fdc1aa..c115a6e 100644
--- a/cogl/cogl-onscreen.c
+++ b/cogl/cogl-onscreen.c
@@ -47,9 +47,9 @@ _cogl_onscreen_init_from_template (CoglOnscreen *onscreen,
 {
   CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
 
-  COGL_LIST_INIT (&onscreen->frame_closures);
-  COGL_LIST_INIT (&onscreen->resize_closures);
-  COGL_LIST_INIT (&onscreen->dirty_closures);
+  _cogl_list_init (&onscreen->frame_closures);
+  _cogl_list_init (&onscreen->resize_closures);
+  _cogl_list_init (&onscreen->dirty_closures);
 
   framebuffer->config = onscreen_template->config;
   cogl_object_ref (framebuffer->config.swap_chain);
diff --git a/cogl/cogl-poll.c b/cogl/cogl-poll.c
index e29d997..c50d648 100644
--- a/cogl/cogl-poll.c
+++ b/cogl/cogl-poll.c
@@ -57,7 +57,7 @@ cogl_poll_renderer_get_info (CoglRenderer *renderer,
   *n_poll_fds = renderer->poll_fds->len;
   *timeout = -1;
 
-  if (!COGL_LIST_EMPTY (&renderer->idle_closures))
+  if (!_cogl_list_empty (&renderer->idle_closures))
     {
       *timeout = 0;
       return renderer->poll_fds_age;
diff --git a/cogl/cogl-renderer-private.h b/cogl/cogl-renderer-private.h
index 62aca7e..efc20a3 100644
--- a/cogl/cogl-renderer-private.h
+++ b/cogl/cogl-renderer-private.h
@@ -56,7 +56,7 @@ struct _CoglRenderer
   int poll_fds_age;
   GList *poll_sources;
 
-  CoglClosureList idle_closures;
+  CoglList idle_closures;
 
   GList *outputs;
 
diff --git a/cogl/cogl-renderer.c b/cogl/cogl-renderer.c
index bfd91cd..6f978c6 100644
--- a/cogl/cogl-renderer.c
+++ b/cogl/cogl-renderer.c
@@ -187,7 +187,7 @@ cogl_renderer_new (void)
 
   renderer->poll_fds = g_array_new (FALSE, TRUE, sizeof (CoglPollFD));
 
-  COGL_LIST_INIT (&renderer->idle_closures);
+  _cogl_list_init (&renderer->idle_closures);
 
 #ifdef COGL_HAS_XLIB_SUPPORT
   renderer->xlib_enable_event_retrieval = TRUE;
diff --git a/cogl/cogl-sdl.c b/cogl/cogl-sdl.c
index 602cac0..324bfd8 100644
--- a/cogl/cogl-sdl.c
+++ b/cogl/cogl-sdl.c
@@ -100,6 +100,6 @@ cogl_sdl_idle (CoglContext *context)
    * to make sure the blocking returns immediately. We'll post our
    * dummy event to make sure that happens
    */
-  if (!COGL_LIST_EMPTY (&renderer->idle_closures))
+  if (!_cogl_list_empty (&renderer->idle_closures))
     _cogl_sdl_push_wakeup_event (context);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]