Merge pull request #1624 from esdrubal/getprocesstimes
[mono.git] / mono / utils / mono-proclib.h
1 #ifndef __MONO_PROC_LIB_H__
2 #define __MONO_PROC_LIB_H__
3 /*
4  * Utility functions to access processes information and other info about the system.
5  */
6
7 #include <glib.h>
8 #include <mono/utils/mono-compiler.h>
9
10 /* never remove or reorder these enums values: they are used in corlib/System */
11
12 typedef enum {
13         MONO_PROCESS_NUM_THREADS,
14         MONO_PROCESS_USER_TIME, /* milliseconds */
15         MONO_PROCESS_SYSTEM_TIME, /* milliseconds */
16         MONO_PROCESS_TOTAL_TIME, /* milliseconds */
17         MONO_PROCESS_WORKING_SET,
18         MONO_PROCESS_WORKING_SET_PEAK, /* 5 */
19         MONO_PROCESS_PRIVATE_BYTES,
20         MONO_PROCESS_VIRTUAL_BYTES,
21         MONO_PROCESS_VIRTUAL_BYTES_PEAK,
22         MONO_PROCESS_FAULTS,
23         MONO_PROCESS_ELAPSED, /* 10 */
24         MONO_PROCESS_PPID,
25         MONO_PROCESS_PAGED_BYTES,
26         MONO_PROCESS_END
27 } MonoProcessData;
28
29 typedef enum {
30         MONO_CPU_USER_TIME,
31         MONO_CPU_PRIV_TIME,
32         MONO_CPU_INTR_TIME,
33         MONO_CPU_DCP_TIME,
34         MONO_CPU_IDLE_TIME,
35         MONO_CPU_END
36 } MonoCpuData;
37
38 typedef enum {
39         MONO_PROCESS_ERROR_NONE, /* no error happened */
40         MONO_PROCESS_ERROR_NOT_FOUND, /* process not found */
41         MONO_PROCESS_ERROR_OTHER
42 } MonoProcessError;
43
44 typedef struct _MonoCpuUsageState MonoCpuUsageState;
45 #ifndef HOST_WIN32
46 struct _MonoCpuUsageState {
47         gint64 kernel_time;
48         gint64 user_time;
49         gint64 current_time;
50 };
51 #else
52 struct _MonoCpuUsageState {
53         guint64 kernel_time;
54         guint64 user_time;
55         guint64 idle_time;
56 };
57 #endif
58
59 gpointer* mono_process_list     (int *size);
60
61 void      mono_process_get_times (gpointer pid, gint64 *start_time, gint64 *user_time, gint64 *kernel_time);
62
63 char*     mono_process_get_name (gpointer pid, char *buf, int len);
64
65 gint64    mono_process_get_data (gpointer pid, MonoProcessData data);
66 gint64    mono_process_get_data_with_error (gpointer pid, MonoProcessData data, MonoProcessError *error);
67
68 int       mono_process_current_pid (void);
69
70 int       mono_cpu_count    (void);
71 gint64    mono_cpu_get_data (int cpu_id, MonoCpuData data, MonoProcessError *error);
72 gint32    mono_cpu_usage (MonoCpuUsageState *prev);
73
74 int       mono_atexit (void (*func)(void));
75
76 #endif /* __MONO_PROC_LIB_H__ */
77