## Counters

Counters is a Mono API for flexible statistics collection and is used to track different events inside the JIT.

You would typically register an address with the `mono_counters_register` routine and increment the counters from your application as you go. At the end of the program you would call mono_counters_dump which will display all the registered counters.

If you need more complicated counter computation, a function can be provided instead of an address. In that case the `MONO_COUNTER_CALLBACK` flag must be ored in the type request.

The types that can be rendered are:

           MONO_COUNTER_INT
           MONO_COUNTER_UINT
           MONO_COUNTER_WORD
           MONO_COUNTER_LONG
           MONO_COUNTER_ULONG
           MONO_COUNTER_DOUBLE
           MONO_COUNTER_STRING

To organize the output, you register also a section where the counter will be displayed, or one of the following values when you register your counter:

           MONO_COUNTER_JIT
           MONO_COUNTER_GC
           MONO_COUNTER_METADATA
           MONO_COUNTER_GENERICS
           MONO_COUNTER_SECURITY

`mono_counters_dump`
Syntax
void mono_counters_dump (int section_mask, FILE *outfile)

Parameters

section_mask | The sections to dump counters for
outfile | a FILE to dump the results to

Description

Displays the counts of all the enabled counters registered. To filter by variance, you can OR one or more variance with the specific section you want. Use MONO_COUNTER_SECTION_MASK to dump all categories of a specific variance.
`mono_counters_enable`
Syntax
void mono_counters_enable (int section_mask)

Parameters

section_mask | a mask listing the sections that will be displayed

Description

This is used to track which counters will be displayed.