Add stats for the size of the scanned native stacks.
authorZoltan Varga <vargaz@gmail.com>
Mon, 27 Sep 2010 04:22:55 +0000 (06:22 +0200)
committerZoltan Varga <vargaz@gmail.com>
Mon, 3 Jan 2011 14:42:38 +0000 (15:42 +0100)
mono/mini/mini-gc.c

index 28bf4249c67b34e4b7b433268dfc49da4e9e7099..b46ca4ae91bfa7d5168e84b924e7ee5dfc7efb58 100644 (file)
@@ -227,7 +227,9 @@ typedef struct {
        int scanned_precisely;
        int scanned_conservatively;
        int scanned_registers;
-
+       int scanned_native;
+       int scanned_other;
+       
        int all_slots;
        int noref_slots;
        int ref_slots;
@@ -803,6 +805,7 @@ conservative_pass (TlsData *tls, guint8 *stack_start, guint8 *stack_end)
                        /* This scans the previously skipped frames as well */
                        DEBUG (printf ("\tscan area %p-%p (%d).\n", stack_limit, real_frame_start, (int)(real_frame_start - stack_limit)));
                        mono_gc_conservatively_scan_area (stack_limit, real_frame_start);
+                       stats.scanned_other += real_frame_start - stack_limit;
                }
 
                /* Mark stack slots */
@@ -928,6 +931,7 @@ conservative_pass (TlsData *tls, guint8 *stack_start, guint8 *stack_end)
        if (stack_limit < stack_end) {
                DEBUG (printf ("\tscan remaining stack %p-%p (%d).\n", stack_limit, stack_end, (int)(stack_end - stack_limit)));
                mono_gc_conservatively_scan_area (stack_limit, stack_end);
+               stats.scanned_native += stack_end - stack_limit;
        }
 
        DEBUG (printf ("Marked %d bytes, p=%d,c=%d out of %d.\n", scanned, scanned_precisely, scanned_conservatively, (int)(stack_end - stack_start)));
@@ -2261,6 +2265,10 @@ mini_gc_init (void)
 
        mono_counters_register ("Stack space scanned (all)",
                                                        MONO_COUNTER_GC | MONO_COUNTER_INT, &stats.scanned_stacks);
+       mono_counters_register ("Stack space scanned (native)",
+                                                       MONO_COUNTER_GC | MONO_COUNTER_INT, &stats.scanned_native);
+       mono_counters_register ("Stack space scanned (other)",
+                                                       MONO_COUNTER_GC | MONO_COUNTER_INT, &stats.scanned_other);
        mono_counters_register ("Stack space scanned (using GC Maps)",
                                                        MONO_COUNTER_GC | MONO_COUNTER_INT, &stats.scanned);
        mono_counters_register ("Stack space scanned (precise)",