[counters] Fix --stat to not dump counters for all sections.
authorRodrigo Kumpera <kumpera@gmail.com>
Tue, 6 May 2014 21:26:33 +0000 (17:26 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Tue, 6 May 2014 21:26:39 +0000 (17:26 -0400)
mono/utils/mono-counters.c

index 730d8ea4063da3aad7964827d1efa1145fd45042..992368c2b6944f3ce658fa783b4933341d646cd1 100644 (file)
@@ -282,11 +282,11 @@ section_names [][10] = {
 };
 
 static void
-mono_counters_dump_section (int section, FILE *outfile)
+mono_counters_dump_section (int section, int variance, FILE *outfile)
 {
        MonoCounter *counter = counters;
        while (counter) {
-               if ((counter->type & section) && (mono_counter_get_variance (counter) & section))
+               if ((counter->type & section) && (mono_counter_get_variance (counter) & variance))
                        dump_counter (counter, outfile);
                counter = counter->next;
        }
@@ -305,18 +305,22 @@ void
 mono_counters_dump (int section_mask, FILE *outfile)
 {
        int i, j;
+       int variance;
        section_mask &= valid_mask;
        if (!counters)
                return;
 
+       variance = section_mask & MONO_COUNTER_VARIANCE_MASK;
+
        /* If no variance mask is supplied, we default to all kinds. */
-       if (!(section_mask & MONO_COUNTER_VARIANCE_MASK))
-               section_mask |= MONO_COUNTER_VARIANCE_MASK;
+       if (!variance)
+               variance = MONO_COUNTER_VARIANCE_MASK;
+       section_mask &= ~MONO_COUNTER_VARIANCE_MASK;
 
        for (j = 0, i = MONO_COUNTER_JIT; i < MONO_COUNTER_LAST_SECTION; j++, i <<= 1) {
                if ((section_mask & i) && (set_mask & i)) {
                        fprintf (outfile, "\n%s statistics\n", section_names [j]);
-                       mono_counters_dump_section (i | (section_mask & MONO_COUNTER_VARIANCE_MASK), outfile);
+                       mono_counters_dump_section (i, variance, outfile);
                }
        }