summaryrefslogtreecommitdiff
path: root/cogl/cogl-matrix-stack.c
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2012-11-20 17:47:21 +0000
committerRobert Bragg <robert@linux.intel.com>2013-01-21 14:20:34 +0000
commitfe2aaef8003524c9276b7b3bc93b0c8606d55a2d (patch)
tree6b99acb0d75bb45abb1c82c1924d008f83df5deb /cogl/cogl-matrix-stack.c
parenta88f0d108b514c1087937288b596d9a4c889b276 (diff)
downloadcogl-fe2aaef8003524c9276b7b3bc93b0c8606d55a2d.tar.gz
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)
Diffstat (limited to 'cogl/cogl-matrix-stack.c')
-rw-r--r--cogl/cogl-matrix-stack.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/cogl/cogl-matrix-stack.c b/cogl/cogl-matrix-stack.c
index 8ec41005..36b1dfd8 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++)
{