Introduction
Introduction Statistics Contact Development Disclaimer Help
cpu.c - slstatus - status monitor
git clone git://git.suckless.org/slstatus
Log
Files
Refs
README
LICENSE
---
cpu.c (3434B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <stdint.h>
3 #include <stdio.h>
4 #include <string.h>
5
6 #include "../slstatus.h"
7 #include "../util.h"
8
9 #if defined(__linux__)
10 #define CPU_FREQ "/sys/devices/system/cpu/cpu0/cpufreq/scaling_c…
11
12 const char *
13 cpu_freq(const char *unused)
14 {
15 uintmax_t freq;
16
17 /* in kHz */
18 if (pscanf(CPU_FREQ, "%ju", &freq) != 1)
19 return NULL;
20
21 return fmt_human(freq * 1000, 1000);
22 }
23
24 const char *
25 cpu_perc(const char *unused)
26 {
27 static long double a[7];
28 long double b[7], sum;
29
30 memcpy(b, a, sizeof(b));
31 /* cpu user nice system idle iowait irq softirq */
32 if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf %Lf %Lf %L…
33 &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[…
34 != 7)
35 return NULL;
36
37 if (b[0] == 0)
38 return NULL;
39
40 sum = (b[0] + b[1] + b[2] + b[3] + b[4] + b[5] + b[6]) -
41 (a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6]);
42
43 if (sum == 0)
44 return NULL;
45
46 return bprintf("%d", (int)(100 *
47 ((b[0] + b[1] + b[2] + b[5] + b[6]) -
48 (a[0] + a[1] + a[2] + a[5] + a[6])) / su…
49 }
50 #elif defined(__OpenBSD__)
51 #include <sys/param.h>
52 #include <sys/sched.h>
53 #include <sys/sysctl.h>
54
55 const char *
56 cpu_freq(const char *unused)
57 {
58 int freq, mib[2];
59 size_t size;
60
61 mib[0] = CTL_HW;
62 mib[1] = HW_CPUSPEED;
63
64 size = sizeof(freq);
65
66 /* in MHz */
67 if (sysctl(mib, 2, &freq, &size, NULL, 0) < 0) {
68 warn("sysctl 'HW_CPUSPEED':");
69 return NULL;
70 }
71
72 return fmt_human(freq * 1E6, 1000);
73 }
74
75 const char *
76 cpu_perc(const char *unused)
77 {
78 int mib[2];
79 static uintmax_t a[CPUSTATES];
80 uintmax_t b[CPUSTATES], sum;
81 size_t size;
82
83 mib[0] = CTL_KERN;
84 mib[1] = KERN_CPTIME;
85
86 size = sizeof(a);
87
88 memcpy(b, a, sizeof(b));
89 if (sysctl(mib, 2, &a, &size, NULL, 0) < 0) {
90 warn("sysctl 'KERN_CPTIME':");
91 return NULL;
92 }
93 if (b[0] == 0)
94 return NULL;
95
96 sum = (a[CP_USER] + a[CP_NICE] + a[CP_SYS] + a[CP_INTR] …
97 (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + b[CP_INTR] …
98
99 if (sum == 0)
100 return NULL;
101
102 return bprintf("%d", 100 *
103 ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] +
104 a[CP_INTR]) -
105 (b[CP_USER] + b[CP_NICE] + b[CP_SYS] +
106 b[CP_INTR])) / sum);
107 }
108 #elif defined(__FreeBSD__)
109 #include <devstat.h>
110 #include <sys/param.h>
111 #include <sys/sysctl.h>
112
113 const char *
114 cpu_freq(const char *unused)
115 {
116 int freq;
117 size_t size;
118
119 size = sizeof(freq);
120 /* in MHz */
121 if (sysctlbyname("hw.clockrate", &freq, &size, NULL, 0) …
122 warn("sysctlbyname 'hw.clockrate':");
123 return NULL;
124 }
125
126 return fmt_human(freq * 1E6, 1000);
127 }
128
129 const char *
130 cpu_perc(const char *unused)
131 {
132 size_t size;
133 static long a[CPUSTATES];
134 long b[CPUSTATES], sum;
135
136 size = sizeof(a);
137 memcpy(b, a, sizeof(b));
138 if (sysctlbyname("kern.cp_time", &a, &size, NULL, 0) < 0…
139 warn("sysctlbyname 'kern.cp_time':");
140 return NULL;
141 }
142 if (b[0] == 0)
143 return NULL;
144
145 sum = (a[CP_USER] + a[CP_NICE] + a[CP_SYS] + a[CP_INTR] …
146 (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + b[CP_INTR] …
147
148 if (sum == 0)
149 return NULL;
150
151 return bprintf("%d", 100 *
152 ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] +
153 a[CP_INTR]) -
154 (b[CP_USER] + b[CP_NICE] + b[CP_SYS] +
155 b[CP_INTR])) / sum);
156 }
157 #endif
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.