5 #ifndef __MONO_COUNTERS_H__
6 #define __MONO_COUNTERS_H__
9 #include <mono/utils/mono-publib.h>
12 /* Counter type, bits 0-7. */
13 MONO_COUNTER_INT
, /* 32 bit int */
14 MONO_COUNTER_UINT
, /* 32 bit uint */
15 MONO_COUNTER_WORD
, /* pointer-sized int */
16 MONO_COUNTER_LONG
, /* 64 bit int */
17 MONO_COUNTER_ULONG
, /* 64 bit uint */
19 MONO_COUNTER_STRING
, /* char* */
20 MONO_COUNTER_TIME_INTERVAL
, /* 64 bits signed int holding usecs. */
21 MONO_COUNTER_TYPE_MASK
= 0xf,
22 MONO_COUNTER_CALLBACK
= 128, /* ORed with the other values */
23 MONO_COUNTER_SECTION_MASK
= 0x00ffff00,
24 /* Sections, bits 8-23 (16 bits) */
25 MONO_COUNTER_JIT
= 1 << 8,
26 MONO_COUNTER_GC
= 1 << 9,
27 MONO_COUNTER_METADATA
= 1 << 10,
28 MONO_COUNTER_GENERICS
= 1 << 11,
29 MONO_COUNTER_SECURITY
= 1 << 12,
30 MONO_COUNTER_RUNTIME
= 1 << 13,
31 MONO_COUNTER_SYSTEM
= 1 << 14,
32 MONO_COUNTER_PERFCOUNTERS
= 1 << 15,
33 MONO_COUNTER_PROFILER
= 1 << 16,
34 MONO_COUNTER_INTERP
= 1 << 17,
35 MONO_COUNTER_LAST_SECTION
,
37 /* Unit, bits 24-27 (4 bits) */
38 MONO_COUNTER_UNIT_SHIFT
= 24,
39 MONO_COUNTER_UNIT_MASK
= 0xFu
<< MONO_COUNTER_UNIT_SHIFT
,
40 MONO_COUNTER_RAW
= 0 << 24, /* Raw value */
41 MONO_COUNTER_BYTES
= 1 << 24, /* Quantity of bytes. RSS, active heap, etc */
42 MONO_COUNTER_TIME
= 2 << 24, /* Time interval in 100ns units. Minor pause, JIT compilation*/
43 MONO_COUNTER_COUNT
= 3 << 24, /* Number of things (threads, queued jobs) or Number of events triggered (Major collections, Compiled methods).*/
44 MONO_COUNTER_PERCENTAGE
= 4 << 24, /* [0-1] Fraction Percentage of something. Load average. */
46 /* Monotonicity, bits 28-31 (4 bits) */
47 MONO_COUNTER_VARIANCE_SHIFT
= 28,
48 MONO_COUNTER_VARIANCE_MASK
= 0xFu
<< MONO_COUNTER_VARIANCE_SHIFT
,
49 MONO_COUNTER_MONOTONIC
= 1 << 28, /* This counter value always increase/decreases over time. Reported by --stat. */
50 MONO_COUNTER_CONSTANT
= 1 << 29, /* Fixed value. Used by configuration data. */
51 MONO_COUNTER_VARIABLE
= 1 << 30, /* This counter value can be anything on each sampling. Only interesting when sampling. */
54 typedef struct _MonoCounter MonoCounter
;
56 MONO_API
void mono_counters_enable (int section_mask
);
57 MONO_API
void mono_counters_init (void);
60 * register addr as the address of a counter of type type.
61 * It may be a function pointer if MONO_COUNTER_CALLBACK is specified:
62 * the function should return the value and take no arguments.
64 MONO_API
void mono_counters_register (const char* descr
, int type
, void *addr
);
65 MONO_API
void mono_counters_register_with_size (const char *name
, int type
, void *addr
, int size
);
67 typedef void (*MonoCounterRegisterCallback
) (MonoCounter
*);
68 MONO_API
void mono_counters_on_register (MonoCounterRegisterCallback callback
);
71 * Create a readable dump of the counters for section_mask sections (ORed section values)
73 MONO_API
void mono_counters_dump (int section_mask
, FILE *outfile
);
75 MONO_API
void mono_counters_cleanup (void);
77 typedef mono_bool (*CountersEnumCallback
) (MonoCounter
*counter
, void *user_data
);
79 MONO_API
void mono_counters_foreach (CountersEnumCallback cb
, void *user_data
);
81 MONO_API
int mono_counters_sample (MonoCounter
*counter
, void *buffer
, int buffer_size
);
83 MONO_API
const char* mono_counter_get_name (MonoCounter
*name
);
84 MONO_API
int mono_counter_get_type (MonoCounter
*counter
);
85 MONO_API
int mono_counter_get_section (MonoCounter
*counter
);
86 MONO_API
int mono_counter_get_unit (MonoCounter
*counter
);
87 MONO_API
int mono_counter_get_variance (MonoCounter
*counter
);
88 MONO_API
size_t mono_counter_get_size (MonoCounter
*counter
);
91 MONO_RESOURCE_JIT_CODE
, /* bytes */
92 MONO_RESOURCE_METADATA
, /* bytes */
93 MONO_RESOURCE_GC_HEAP
, /* bytes */
94 MONO_RESOURCE_COUNT
/* non-ABI value */
97 typedef void (*MonoResourceCallback
) (int resource_type
, uintptr_t value
, int is_soft
);
99 MONO_API
int mono_runtime_resource_limit (int resource_type
, uintptr_t soft_limit
, uintptr_t hard_limit
);
100 MONO_API
void mono_runtime_resource_set_callback (MonoResourceCallback callback
);
101 MONO_API
void mono_runtime_resource_check_limit (int resource_type
, uintptr_t value
);
103 #endif /* __MONO_COUNTERS_H__ */