[cogl/wip/cogl-1.14: 108/177] matrix-stack: only maintain composite_gets in debug builds



commit fe2aaef8003524c9276b7b3bc93b0c8606d55a2d
Author: Robert Bragg <robert linux intel com>
Date:   Tue Nov 20 17:47:21 2012 +0000

    matrix-stack: only maintain composite_gets in debug builds
    
    At times there can be huge numbers of CoglMatrixEntry structures
    allocated if they are being used to track the transform of many drawing
    commands or objects in a scenegraph. Therefore the size of a
    CoglMatrixEntry should be kept as small as possible both to help reduce
    the memory usage of applications but also to improve cache usage since
    matrix stack manipulations are performance critical at times.
    
    This reduces the size of CoglMatrixEntry structures for non-debug builds
    by removing the composite_gets counter used to sanity check how often
    the transform for an entry is resolved.
    
    (cherry picked from commit c400b86681a328b1e12b7e120e9c3f4f12c356e0)

 cogl/cogl-matrix-stack.c |    8 +++++++-
 cogl/cogl-matrix-stack.h |    2 ++
 2 files changed, 9 insertions(+), 1 deletions(-)
---
diff --git a/cogl/cogl-matrix-stack.c b/cogl/cogl-matrix-stack.c
index 8ec4100..36b1dfd 100644
--- a/cogl/cogl-matrix-stack.c
+++ b/cogl/cogl-matrix-stack.c
@@ -59,7 +59,9 @@ _cogl_matrix_stack_push_entry (CoglMatrixStack *stack,
   entry->op = operation;
   entry->parent = stack->last_entry;
 
+#ifdef COGL_DEBUG_ENABLED
   entry->composite_gets = 0;
+#endif
 
   stack->last_entry = entry;
 
@@ -103,7 +105,9 @@ _cogl_matrix_entry_identity_init (CoglMatrixEntry *entry)
   entry->ref_count = 1;
   entry->op = COGL_MATRIX_OP_LOAD_IDENTITY;
   entry->parent = NULL;
+#ifdef COGL_DEBUG_ENABLED
   entry->composite_gets = 0;
+#endif
 }
 
 void
@@ -507,9 +511,9 @@ initialized:
       g_warning ("Inconsistent matrix stack");
       return NULL;
     }
-#endif
 
   entry->composite_gets++;
+#endif
 
   children = g_alloca (sizeof (CoglMatrixEntry) * depth);
 
@@ -524,12 +528,14 @@ initialized:
       children[i] = current;
     }
 
+#ifdef COGL_ENABLE_DEBUG
   if (COGL_DEBUG_ENABLED (COGL_DEBUG_PERFORMANCE) &&
       entry->composite_gets >= 2)
     {
       COGL_NOTE (PERFORMANCE,
                  "Re-composing a matrix stack entry multiple times");
     }
+#endif
 
   for (i = 0; i < depth; i++)
     {
diff --git a/cogl/cogl-matrix-stack.h b/cogl/cogl-matrix-stack.h
index dcc3868..52e80de 100644
--- a/cogl/cogl-matrix-stack.h
+++ b/cogl/cogl-matrix-stack.h
@@ -55,8 +55,10 @@ struct _CoglMatrixEntry
   CoglMatrixOp op;
   unsigned int ref_count;
 
+#ifdef COGL_ENABLE_DEBUG
   /* used for performance tracing */
   int composite_gets;
+#endif
 };
 
 typedef struct _CoglMatrixEntryTranslate



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