Adjust the output of MemoryContextStats() so that the stats for a
authorNeil Conway <neilc@samurai.com>
Tue, 7 Aug 2007 06:25:14 +0000 (06:25 +0000)
committerNeil Conway <neilc@samurai.com>
Tue, 7 Aug 2007 06:25:14 +0000 (06:25 +0000)
child memory contexts is indented two spaces to the right of its
parent context.  This should make it easier to deduce the memory
context hierarchy from the output of MemoryContextStats().

src/backend/utils/mmgr/aset.c
src/backend/utils/mmgr/mcxt.c
src/include/nodes/memnodes.h

index 71b6da1e493f0318244317871d57ce74c166539a..f517e05bc9c2104ccce8b6a9ee3b3053c4cb4c98 100644 (file)
@@ -11,7 +11,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mmgr/aset.c,v 1.72 2007/04/30 00:12:08 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mmgr/aset.c,v 1.73 2007/08/07 06:25:14 neilc Exp $
  *
  * NOTE:
  *     This is a new (Feb. 05, 1999) implementation of the allocation set
@@ -214,7 +214,7 @@ static void AllocSetReset(MemoryContext context);
 static void AllocSetDelete(MemoryContext context);
 static Size AllocSetGetChunkSpace(MemoryContext context, void *pointer);
 static bool AllocSetIsEmpty(MemoryContext context);
-static void AllocSetStats(MemoryContext context);
+static void AllocSetStats(MemoryContext context, int level);
 
 #ifdef MEMORY_CONTEXT_CHECKING
 static void AllocSetCheck(MemoryContext context);
@@ -1034,7 +1034,7 @@ AllocSetIsEmpty(MemoryContext context)
  *             Displays stats about memory consumption of an allocset.
  */
 static void
-AllocSetStats(MemoryContext context)
+AllocSetStats(MemoryContext context, int level)
 {
        AllocSet        set = (AllocSet) context;
        long            nblocks = 0;
@@ -1044,6 +1044,7 @@ AllocSetStats(MemoryContext context)
        AllocBlock      block;
        AllocChunk      chunk;
        int                     fidx;
+       int                     i;
 
        for (block = set->blocks; block != NULL; block = block->next)
        {
@@ -1060,6 +1061,10 @@ AllocSetStats(MemoryContext context)
                        freespace += chunk->size + ALLOC_CHUNKHDRSZ;
                }
        }
+
+       for (i = 0; i < level; i++)
+               fprintf(stderr, "  ");
+
        fprintf(stderr,
                        "%s: %lu total in %ld blocks; %lu free (%ld chunks); %lu used\n",
                        set->header.name, totalspace, nblocks, freespace, nchunks,
index 88a91c4748cefbe3e7734a3ed57a26ef18c0c9ae..dfc0245620a00785fd788fde44d3bad7077c7a4a 100644 (file)
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/mmgr/mcxt.c,v 1.61 2007/07/25 12:22:52 mha Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/mmgr/mcxt.c,v 1.62 2007/08/07 06:25:14 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -49,6 +49,8 @@ MemoryContext CurTransactionContext = NULL;
 /* This is a transient link to the active portal's memory context: */
 MemoryContext PortalContext = NULL;
 
+static void MemoryContextStatsInternal(MemoryContext context, int level);
+
 
 /*****************************************************************************
  *       EXPORTED ROUTINES                                                                                                              *
@@ -320,17 +322,22 @@ MemoryContextIsEmpty(MemoryContext context)
  */
 void
 MemoryContextStats(MemoryContext context)
+{
+       MemoryContextStatsInternal(context, 0);
+}
+
+static void
+MemoryContextStatsInternal(MemoryContext context, int level)
 {
        MemoryContext child;
 
        AssertArg(MemoryContextIsValid(context));
 
-       (*context->methods->stats) (context);
+       (*context->methods->stats) (context, level);
        for (child = context->firstchild; child != NULL; child = child->nextchild)
-               MemoryContextStats(child);
+               MemoryContextStatsInternal(child, level + 1);
 }
 
-
 /*
  * MemoryContextCheck
  *             Check all chunks in the named context.
index 2bbe9a8ab8ad6f871e2d50fd253adabf58c57ead..5f746479e13a115bd75238b2d7b641496f5b8d73 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/nodes/memnodes.h,v 1.32 2007/01/05 22:19:55 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/nodes/memnodes.h,v 1.33 2007/08/07 06:25:14 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -44,7 +44,7 @@ typedef struct MemoryContextMethods
        void            (*delete) (MemoryContext context);
        Size            (*get_chunk_space) (MemoryContext context, void *pointer);
        bool            (*is_empty) (MemoryContext context);
-       void            (*stats) (MemoryContext context);
+       void            (*stats) (MemoryContext context, int level);
 #ifdef MEMORY_CONTEXT_CHECKING
        void            (*check) (MemoryContext context);
 #endif