[Mesa-dev] [PATCH 12/21] mesa: refactor _mesa_PopDebugGroup and _mesa_free_errors_data

Chia-I Wu olvaffe at gmail.com
Tue Apr 22 01:58:27 PDT 2014


Move group clearing to debug_clear_group.  Add debug_pop_group and
debug_destroy for use in _mesa_PopDebugGroup and _mesa_free_errors_data
respectively.

Signed-off-by: Chia-I Wu <olv at lunarg.com>
---
 src/mesa/main/errors.c | 127 +++++++++++++++++++++++++------------------------
 1 file changed, 64 insertions(+), 63 deletions(-)

diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c
index 9873dfc..139e31d 100644
--- a/src/mesa/main/errors.c
+++ b/src/mesa/main/errors.c
@@ -217,7 +217,57 @@ debug_create(void)
    return debug;
 }
 
-/*
+static void
+debug_clear_group_cb(GLuint key, void *data, void *userData)
+{
+}
+
+/**
+ * Free debug state for the given stack depth.
+ */
+static void
+debug_clear_group(struct gl_debug_state *debug, GLint gstack)
+{
+   enum mesa_debug_type t;
+   enum mesa_debug_source s;
+   enum mesa_debug_severity sev;
+
+   /* Tear down state for filtering debug messages. */
+   for (s = 0; s < MESA_DEBUG_SOURCE_COUNT; s++) {
+      for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) {
+         struct gl_debug_namespace *nspace = &debug->Namespaces[gstack][s][t];
+
+         _mesa_HashDeleteAll(nspace->IDs, debug_clear_group_cb, NULL);
+         _mesa_DeleteHashTable(nspace->IDs);
+         for (sev = 0; sev < MESA_DEBUG_SEVERITY_COUNT; sev++) {
+            struct simple_node *node, *tmp;
+            struct gl_debug_severity *entry;
+
+            foreach_s(node, tmp, &nspace->Severity[sev]) {
+               entry = (struct gl_debug_severity *)node;
+               free(entry);
+            }
+         }
+      }
+   }
+}
+
+/**
+ * Loop through debug group stack tearing down states for
+ * filtering debug messages.  Then free debug output state.
+ */
+static void
+debug_destroy(struct gl_debug_state *debug)
+{
+   GLint i;
+
+   for (i = 0; i <= debug->GroupStackDepth; i++)
+      debug_clear_group(debug, i);
+
+   free(debug);
+}
+
+/**
  * Sets the state of the given message source/type/ID tuple.
  */
 static void
@@ -538,6 +588,15 @@ out:
    debug->GroupStackDepth++;
 }
 
+static void
+debug_pop_group(struct gl_debug_state *debug)
+{
+   const GLint gstack = debug->GroupStackDepth;
+
+   debug->GroupStackDepth--;
+   debug_clear_group(debug, gstack);
+}
+
 
 /**
  * Return debug state for the context.  The debug state will be allocated
@@ -840,47 +899,6 @@ message_insert(GLenum source, GLenum type, GLuint id,
 }
 
 
-static void
-do_nothing(GLuint key, void *data, void *userData)
-{
-}
-
-
-/**
- * Free context state pertaining to error/debug state for the given stack
- * depth.
- */
-static void
-free_errors_data(struct gl_context *ctx, GLint gstack)
-{
-   struct gl_debug_state *debug = ctx->Debug;
-   enum mesa_debug_type t;
-   enum mesa_debug_source s;
-   enum mesa_debug_severity sev;
-
-   assert(debug);
-
-   /* Tear down state for filtering debug messages. */
-   for (s = 0; s < MESA_DEBUG_SOURCE_COUNT; s++) {
-      for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) {
-         _mesa_HashDeleteAll(debug->Namespaces[gstack][s][t].IDs,
-                             do_nothing, NULL);
-         _mesa_DeleteHashTable(debug->Namespaces[gstack][s][t].IDs);
-         for (sev = 0; sev < MESA_DEBUG_SEVERITY_COUNT; sev++) {
-            struct simple_node *node, *tmp;
-            struct gl_debug_severity *entry;
-
-            foreach_s(node, tmp,
-                      &debug->Namespaces[gstack][s][t].Severity[sev]) {
-               entry = (struct gl_debug_severity *)node;
-               free(entry);
-            }
-         }
-      }
-   }
-}
-
-
 void GLAPIENTRY
 _mesa_DebugMessageInsert(GLenum source, GLenum type, GLuint id,
                          GLenum severity, GLint length,
@@ -1044,7 +1062,6 @@ _mesa_PopDebugGroup(void)
    struct gl_debug_state *debug = _mesa_get_debug_state(ctx);
    const char *callerstr = "glPopDebugGroup";
    struct gl_debug_msg *gdmessage;
-   GLint prevStackDepth;
 
    if (!debug)
       return;
@@ -1054,10 +1071,9 @@ _mesa_PopDebugGroup(void)
       return;
    }
 
-   prevStackDepth = debug->GroupStackDepth;
-   debug->GroupStackDepth--;
+   debug_pop_group(debug);
 
-   gdmessage = &debug->DebugGroupMsgs[prevStackDepth];
+   gdmessage = debug_get_group_message(debug);
    /* using log_msg() directly here as verification of parameters
     * already done in push
     */
@@ -1067,13 +1083,7 @@ _mesa_PopDebugGroup(void)
            gl_enum_to_debug_severity(GL_DEBUG_SEVERITY_NOTIFICATION),
            gdmessage->length, gdmessage->message);
 
-   if (gdmessage->message != (char*)out_of_memory)
-      free(gdmessage->message);
-   gdmessage->message = NULL;
-   gdmessage->length = 0;
-
-   /* free popped debug group data */
-   free_errors_data(ctx, prevStackDepth);
+   debug_clear_message(debug, gdmessage);
 }
 
 
@@ -1084,20 +1094,11 @@ _mesa_init_errors(struct gl_context *ctx)
 }
 
 
-/**
- * Loop through debug group stack tearing down states for
- * filtering debug messages.  Then free debug output state.
- */
 void
 _mesa_free_errors_data(struct gl_context *ctx)
 {
    if (ctx->Debug) {
-      GLint i;
-
-      for (i = 0; i <= ctx->Debug->GroupStackDepth; i++) {
-         free_errors_data(ctx, i);
-      }
-      free(ctx->Debug);
+      debug_destroy(ctx->Debug);
       /* set to NULL just in case it is used before context is completely gone. */
       ctx->Debug = NULL;
    }
-- 
1.8.5.3



More information about the mesa-dev mailing list