1 /** 2 * \file 3 */ 4 5 #ifndef __MONO_COUNTERS_H__ 6 #define __MONO_COUNTERS_H__ 7 8 #include <stdio.h> 9 #include <mono/utils/mono-publib.h> 10 11 enum { 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 */ 18 MONO_COUNTER_DOUBLE, 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_LAST_SECTION, 35 36 /* Unit, bits 24-27 (4 bits) */ 37 MONO_COUNTER_UNIT_SHIFT = 24, 38 MONO_COUNTER_UNIT_MASK = 0xFu << MONO_COUNTER_UNIT_SHIFT, 39 MONO_COUNTER_RAW = 0 << 24, /* Raw value */ 40 MONO_COUNTER_BYTES = 1 << 24, /* Quantity of bytes. RSS, active heap, etc */ 41 MONO_COUNTER_TIME = 2 << 24, /* Time interval in 100ns units. Minor pause, JIT compilation*/ 42 MONO_COUNTER_COUNT = 3 << 24, /* Number of things (threads, queued jobs) or Number of events triggered (Major collections, Compiled methods).*/ 43 MONO_COUNTER_PERCENTAGE = 4 << 24, /* [0-1] Fraction Percentage of something. Load average. */ 44 45 /* Monotonicity, bits 28-31 (4 bits) */ 46 MONO_COUNTER_VARIANCE_SHIFT = 28, 47 MONO_COUNTER_VARIANCE_MASK = 0xFu << MONO_COUNTER_VARIANCE_SHIFT, 48 MONO_COUNTER_MONOTONIC = 1 << 28, /* This counter value always increase/decreases over time. Reported by --stat. */ 49 MONO_COUNTER_CONSTANT = 1 << 29, /* Fixed value. Used by configuration data. */ 50 MONO_COUNTER_VARIABLE = 1 << 30, /* This counter value can be anything on each sampling. Only interesting when sampling. */ 51 }; 52 53 typedef struct _MonoCounter MonoCounter; 54 55 MONO_API void mono_counters_enable (int section_mask); 56 MONO_API void mono_counters_init (void); 57 58 /* 59 * register addr as the address of a counter of type type. 60 * It may be a function pointer if MONO_COUNTER_CALLBACK is specified: 61 * the function should return the value and take no arguments. 62 */ 63 MONO_API void mono_counters_register (const char* descr, int type, void *addr); 64 MONO_API void mono_counters_register_with_size (const char *name, int type, void *addr, int size); 65 66 typedef void (*MonoCounterRegisterCallback) (MonoCounter*); 67 MONO_API void mono_counters_on_register (MonoCounterRegisterCallback callback); 68 69 /* 70 * Create a readable dump of the counters for section_mask sections (ORed section values) 71 */ 72 MONO_API void mono_counters_dump (int section_mask, FILE *outfile); 73 74 MONO_API void mono_counters_cleanup (void); 75 76 typedef mono_bool (*CountersEnumCallback) (MonoCounter *counter, void *user_data); 77 78 MONO_API void mono_counters_foreach (CountersEnumCallback cb, void *user_data); 79 80 MONO_API int mono_counters_sample (MonoCounter *counter, void *buffer, int buffer_size); 81 82 MONO_API const char* mono_counter_get_name (MonoCounter *name); 83 MONO_API int mono_counter_get_type (MonoCounter *counter); 84 MONO_API int mono_counter_get_section (MonoCounter *counter); 85 MONO_API int mono_counter_get_unit (MonoCounter *counter); 86 MONO_API int mono_counter_get_variance (MonoCounter *counter); 87 MONO_API size_t mono_counter_get_size (MonoCounter *counter); 88 89 typedef enum { 90 MONO_RESOURCE_JIT_CODE, /* bytes */ 91 MONO_RESOURCE_METADATA, /* bytes */ 92 MONO_RESOURCE_GC_HEAP, /* bytes */ 93 MONO_RESOURCE_COUNT /* non-ABI value */ 94 } MonoResourceType; 95 96 typedef void (*MonoResourceCallback) (int resource_type, uintptr_t value, int is_soft); 97 98 MONO_API int mono_runtime_resource_limit (int resource_type, uintptr_t soft_limit, uintptr_t hard_limit); 99 MONO_API void mono_runtime_resource_set_callback (MonoResourceCallback callback); 100 MONO_API void mono_runtime_resource_check_limit (int resource_type, uintptr_t value); 101 102 #endif /* __MONO_COUNTERS_H__ */ 103 104