Introduce a callback API to have notifications when runtime resources exceed preset...
[mono.git] / mono / utils / mono-counters.h
1 #ifndef __MONO_COUNTERS_H__
2 #define __MONO_COUNTERS_H__
3
4 #include <stdio.h>
5 #include <mono/utils/mono-publib.h>
6
7 enum {
8         MONO_COUNTER_INT,    /* 32 bit int */
9         MONO_COUNTER_UINT,    /* 32 bit uint */
10         MONO_COUNTER_WORD,   /* pointer-sized int */
11         MONO_COUNTER_LONG,   /* 64 bit int */
12         MONO_COUNTER_ULONG,   /* 64 bit uint */
13         MONO_COUNTER_DOUBLE,
14         MONO_COUNTER_STRING, /* char* */
15         MONO_COUNTER_TYPE_MASK = 0xf,
16         MONO_COUNTER_CALLBACK = 128, /* ORed with the other values */
17         MONO_COUNTER_SECTION_MASK = 0xffffff00,
18         /* sections */
19         MONO_COUNTER_JIT      = 1 << 8,
20         MONO_COUNTER_GC       = 1 << 9,
21         MONO_COUNTER_METADATA = 1 << 10,
22         MONO_COUNTER_GENERICS = 1 << 11,
23         MONO_COUNTER_SECURITY = 1 << 12,
24         MONO_COUNTER_LAST_SECTION
25 };
26
27 void mono_counters_enable (int section_mask);
28
29 /* 
30  * register addr as the address of a counter of type type.
31  * It may be a function pointer if MONO_COUNTER_CALLBACK is specified:
32  * the function should return the value and take no arguments.
33  */
34 void mono_counters_register (const char* descr, int type, void *addr);
35
36 /* 
37  * Create a readable dump of the counters for section_mask sections (ORed section values)
38  */
39 void mono_counters_dump (int section_mask, FILE *outfile);
40
41 void mono_counters_cleanup (void);
42
43 typedef enum {
44         MONO_RESOURCE_JIT_CODE, /* bytes */
45         MONO_RESOURCE_METADATA, /* bytes */
46         MONO_RESOURCE_GC_HEAP,  /* bytes */
47         MONO_RESOURCE_COUNT /* non-ABI value */
48 } MonoResourceType;
49
50 typedef void (*MonoResourceCallback) (int resource_type, uintptr_t value, int is_soft);
51
52 int  mono_runtime_resource_limit        (int resource_type, uintptr_t soft_limit, uintptr_t hard_limit);
53 void mono_runtime_resource_set_callback (MonoResourceCallback callback);
54 void mono_runtime_resource_check_limit  (int resource_type, uintptr_t value);
55
56 #endif /* __MONO_COUNTERS_H__ */
57