2
2
* Copyright (c) 2003 Riccardo Persichetti <riccardo.persichetti@tin.it>
3
* Copyright (c) 2010 Florian Rivoal <frivoal@xfce.org>
4
5
* Redistribution and use in source and binary forms, with or without
5
6
* modification, are permitted provided that the following conditions
37
38
#include <libxfcegui4/dialogs.h>
40
#if defined(__linux__)
41
#if defined(__linux__) || defined(__FreeBSD_kernel__)
41
45
#define PROC_STAT "/proc/stat"
43
47
/* user, nice, system, interrupt(BSD specific), idle */
48
struct cpu_load_struct fresh = {{0, 0, 0, 0, 0}};
49
52
gulong cpu_used, oldtotal, oldused;
51
54
gulong read_cpuload()
57
uint64_t user, nice, system, idle, iowait, irq, softirq, guest;
54
58
gulong used, total;
56
61
fd = fopen(PROC_STAT, "r");
58
63
g_warning(_("File /proc/stat not found!"));
61
fscanf(fd, "%*s %ld %ld %ld %ld", &fresh.load[0], &fresh.load[1],
62
&fresh.load[2], &fresh.load[3]);
67
/* Don't count steal time. It is neither busy nor free tiime. */
68
nb_read = fscanf (fd, "%*s " "%llu %llu %llu %llu %llu %llu %llu %*llu %llu",
69
&user, &nice, &system, &idle, &iowait, &irq, &softirq, &guest);
65
used = fresh.load[0] + fresh.load[1] + fresh.load[2];
66
total = fresh.load[0] + fresh.load[1] + fresh.load[2] + fresh.load[3];
71
switch (nb_read) /* fall through intentional */
83
used = user + nice + system + irq + softirq + guest;
84
total = used + idle + iowait;
67
86
if ((total - oldtotal) != 0)
69
88
cpu_used = (100 * (double)(used - oldused)) / (double)(total - oldtotal);
100
struct cpu_load_struct fresh = {{0, 0, 0, 0, 0}};
101
119
gulong cpu_used, oldtotal, oldused;
103
121
gulong read_cpuload()
114
fresh.load[0] = cp_time[CP_USER];
115
fresh.load[1] = cp_time[CP_NICE];
116
fresh.load[2] = cp_time[CP_SYS];
117
fresh.load[3] = cp_time[CP_IDLE];
118
fresh.load[4] = cp_time[CP_IDLE];
132
used = cp_time[CP_USER] + cp_time[CP_NICE] + cp_time[CP_SYS] + cp_time[CP_INTR];
133
total = used + cp_time[CP_IDLE];
120
used = fresh.load[0] + fresh.load[1] + fresh.load[2];
121
total = fresh.load[0] + fresh.load[1] + fresh.load[2] + fresh.load[3];
122
135
if ((total - oldtotal) != 0)
124
137
cpu_used = (100 * (double)(used - oldused)) / (double)(total - oldtotal);
158
struct cpu_load_struct fresh = {{0, 0, 0, 0, 0}};
159
171
gulong cpu_used, oldtotal, oldused;
161
173
gulong read_cpuload()
173
fresh.load[0] = cp_time[CP_USER];
174
fresh.load[1] = cp_time[CP_NICE];
175
fresh.load[2] = cp_time[CP_SYS];
176
fresh.load[3] = cp_time[CP_IDLE];
177
fresh.load[4] = cp_time[CP_IDLE];
185
used = cp_time[CP_USER] + cp_time[CP_NICE] + cp_time[CP_SYS] + cp_time[CP_INTR];
186
total = used + cp_time[CP_IDLE];
179
used = fresh.load[0] + fresh.load[1] + fresh.load[2];
180
total = fresh.load[0] + fresh.load[1] + fresh.load[2] + fresh.load[3];
181
188
if ((total - oldtotal) != 0)
183
190
cpu_used = (100 * (double)(used - oldused)) / (double)(total - oldtotal);
218
struct cpu_load_struct fresh = {{0, 0, 0, 0, 0}};
219
225
gulong cpu_used, oldtotal, oldused;
221
227
gulong read_cpuload()
233
fresh.load[0] = cp_time[CP_USER];
234
fresh.load[1] = cp_time[CP_NICE];
235
fresh.load[2] = cp_time[CP_SYS];
236
fresh.load[3] = cp_time[CP_INTR];
237
fresh.load[4] = cp_time[CP_IDLE];
239
used = cp_time[CP_USER] + cp_time[CP_NICE] + cp_time[CP_SYS] + cp_time[CP_INTR];
240
total = used + cp_time[CP_IDLE];
239
used = fresh.load[0] + fresh.load[1] + fresh.load[2] + fresh.load[3];
240
total = fresh.load[0] + fresh.load[1] + fresh.load[2] + fresh.load[3] +
242
242
if ((total - oldtotal) != 0)
244
244
cpu_used = (100 * (double)(used - oldused)) / (double)(total - oldtotal);