[Cogl] [PATCH] matrix-stack: only maintain composite_gets in debug builds
Robert Bragg
robert at sixbynine.org
Wed Nov 28 12:49:23 PST 2012
From: Robert Bragg <robert at linux.intel.com>
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.
---
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 4d5b9eb..bd4bd61 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
@@ -506,9 +510,9 @@ initialized:
g_warning ("Inconsistent matrix stack");
return NULL;
}
-#endif
entry->composite_gets++;
+#endif
children = g_alloca (sizeof (CoglMatrixEntry) * depth);
@@ -523,12 +527,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
--
1.7.7.6
More information about the Cogl
mailing list