display.c (honggfuzz-2.4) | : | display.c (honggfuzz-2.5) | ||
---|---|---|---|---|
skipping to change at line 37 | skipping to change at line 37 | |||
#include <inttypes.h> | #include <inttypes.h> | |||
#include <stdarg.h> | #include <stdarg.h> | |||
#include <stdbool.h> | #include <stdbool.h> | |||
#include <stdint.h> | #include <stdint.h> | |||
#include <stdio.h> | #include <stdio.h> | |||
#include <stdlib.h> | #include <stdlib.h> | |||
#include <string.h> | #include <string.h> | |||
#include <time.h> | #include <time.h> | |||
#include <unistd.h> | #include <unistd.h> | |||
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defin | ||||
ed(__DragonFly__) | ||||
#include <sys/resource.h> | ||||
#include <sys/sysctl.h> | ||||
#if defined(__OpenBSD__) | ||||
#include <sys/sched.h> | ||||
#endif | ||||
#endif | ||||
#if defined(__sun) | ||||
#include <kstat.h> | ||||
#endif | ||||
#if defined(__APPLE__) | ||||
#include <mach/mach.h> | ||||
#include <mach/task_info.h> | ||||
#endif | ||||
#include "libhfcommon/common.h" | #include "libhfcommon/common.h" | |||
#include "libhfcommon/log.h" | #include "libhfcommon/log.h" | |||
#include "libhfcommon/util.h" | #include "libhfcommon/util.h" | |||
#define ESC_CLEAR_ALL "\033[2J" | #define ESC_CLEAR_ALL "\033[2J" | |||
#define ESC_CLEAR_LINE "\033[2K" | #define ESC_CLEAR_LINE "\033[2K" | |||
#define ESC_CLEAR_ABOVE "\033[1J" | #define ESC_CLEAR_ABOVE "\033[1J" | |||
#define ESC_TERM_RESET "\033c" | #define ESC_TERM_RESET "\033c" | |||
#define ESC_NAV(x, y) "\033[" #x ";" #y "H" | #define ESC_NAV(x, y) "\033[" #x ";" #y "H" | |||
#define ESC_BOLD "\033[1m" | #define ESC_BOLD "\033[1m" | |||
skipping to change at line 93 | skipping to change at line 110 | |||
} else if (val >= 1000UL) { | } else if (val >= 1000UL) { | |||
display_put(" [%.02Lfk]", (long double)val / 1000.0L); | display_put(" [%.02Lfk]", (long double)val / 1000.0L); | |||
} | } | |||
} | } | |||
static unsigned getCpuUse(int numCpus) { | static unsigned getCpuUse(int numCpus) { | |||
static uint64_t prevUserT = 0UL; | static uint64_t prevUserT = 0UL; | |||
static uint64_t prevNiceT = 0UL; | static uint64_t prevNiceT = 0UL; | |||
static uint64_t prevSystemT = 0UL; | static uint64_t prevSystemT = 0UL; | |||
static uint64_t prevIdleT = 0UL; | static uint64_t prevIdleT = 0UL; | |||
uint64_t userT = 0UL; | ||||
uint64_t niceT = 0UL; | ||||
uint64_t systemT = 0UL; | ||||
uint64_t idleT = 0UL; | ||||
#if defined(__linux__) || defined(__CYGWIN__) | ||||
FILE* f = fopen("/proc/stat", "re"); | FILE* f = fopen("/proc/stat", "re"); | |||
if (f == NULL) { | if (f == NULL) { | |||
return 0; | return 0; | |||
} | } | |||
defer { | defer { | |||
fclose(f); | fclose(f); | |||
}; | }; | |||
uint64_t userT, niceT, systemT, idleT; | ||||
if (fscanf(f, "cpu %" PRIu64 "%" PRIu64 "%" PRIu64 "%" PRIu64, &userT, &nic eT, &systemT, | if (fscanf(f, "cpu %" PRIu64 "%" PRIu64 "%" PRIu64 "%" PRIu64, &userT, &nic eT, &systemT, | |||
&idleT) != 4) { | &idleT) != 4) { | |||
LOG_W("fscanf('/proc/stat') != 4"); | LOG_W("fscanf('/proc/stat') != 4"); | |||
return 0; | return 0; | |||
} | } | |||
#elif defined(__FreeBSD__) || defined(__DragonFly__) | ||||
long ticks = (1000 / sysconf(_SC_CLK_TCK)); | ||||
long off = 0; | ||||
size_t cpuDataLen = sizeof(long) * CPUSTATES * numCpus; | ||||
long* cpuData = malloc(cpuDataLen); | ||||
if (cpuData == NULL) { | ||||
return 0; | ||||
} | ||||
if (sysctlbyname("kern.cp_times", cpuData, &cpuDataLen, NULL, 0) != 0) { | ||||
LOG_W("sysctlbyname('kern.cp_times') != 0"); | ||||
free(cpuData); | ||||
return 0; | ||||
} | ||||
userT = niceT = systemT = idleT = 0; | ||||
for (int i = 0; i < numCpus; i++) { | ||||
userT += cpuData[CP_USER + off] * ticks; | ||||
niceT += cpuData[CP_NICE + off] * ticks; | ||||
systemT += cpuData[CP_SYS + off] * ticks; | ||||
idleT += cpuData[CP_IDLE + off] * ticks; | ||||
off += CPUSTATES; | ||||
} | ||||
free(cpuData); | ||||
#elif defined(__NetBSD__) | ||||
long ticks = (1000 / sysconf(_SC_CLK_TCK)); | ||||
userT = niceT = systemT = idleT = 0; | ||||
for (int i = 0; i < numCpus; i++) { | ||||
uint64_t cpuData[CPUSTATES]; | ||||
size_t cpuDataLen = sizeof(cpuData); | ||||
char mib[24] = {0}; | ||||
snprintf(mib, sizeof(mib), "kern.cp_time.%d", i); | ||||
if (sysctlbyname(mib, &cpuData, &cpuDataLen, NULL, 0) != 0) { | ||||
LOG_W("sysctlbyname('kern.cp_time') != 0"); | ||||
return 0; | ||||
} | ||||
userT += cpuData[CP_USER] * ticks; | ||||
niceT += cpuData[CP_NICE] * ticks; | ||||
systemT += cpuData[CP_SYS] * ticks; | ||||
idleT += cpuData[CP_IDLE] * ticks; | ||||
} | ||||
#elif defined(__OpenBSD__) | ||||
long ticks = (1000 / sysconf(_SC_CLK_TCK)); | ||||
userT = niceT = systemT = idleT = 0; | ||||
for (int i = 0; i < numCpus; i++) { | ||||
uint64_t cpuData[CPUSTATES]; | ||||
size_t cpuDataLen = sizeof(cpuData); | ||||
int mib[3] = {CTL_KERN, KERN_CPTIME2, i}; | ||||
if (sysctl(mib, 3, &cpuData, &cpuDataLen, NULL, 0) != 0) { | ||||
LOG_W("sysctl('KERN_CPTIME2') != 0"); | ||||
return 0; | ||||
} | ||||
userT += cpuData[CP_USER] * ticks; | ||||
niceT += cpuData[CP_NICE] * ticks; | ||||
systemT += cpuData[CP_SYS] * ticks; | ||||
idleT += cpuData[CP_IDLE] * ticks; | ||||
} | ||||
#elif defined(__sun) | ||||
kstat_ctl_t* kctl = kstat_open(); | ||||
for (int i = 0; i < numCpus; i++) { | ||||
kstat_named_t* data; | ||||
kstat_t* cpu = kstat_lookup(kctl, "cpu", i, NULL); | ||||
if (!cpu) { | ||||
LOG_W("kstat_lookup('cpu_info') != 0"); | ||||
continue; | ||||
} | ||||
kstat_read(kctl, cpu, NULL); | ||||
data = kstat_data_lookup(cpu, "cpu_ticks_user"); | ||||
userT += data->value.ui64; | ||||
data = kstat_data_lookup(cpu, "cpu_ticks_kernel"); | ||||
systemT += data->value.ui64; | ||||
data = kstat_data_lookup(cpu, "cpu_ticks_idle"); | ||||
idleT += data->value.ui64; | ||||
} | ||||
kstat_close(kctl); | ||||
#else | ||||
host_cpu_load_info_data_t avg; | ||||
mach_msg_type_number_t num = HOST_CPU_LOAD_INFO_COUNT; | ||||
userT = niceT = systemT = idleT = 0; | ||||
if (host_statistics(mach_host_self(), HOST_CPU_LOAD_INFO, (host_info_t)&avg, | ||||
&num) == | ||||
KERN_SUCCESS) { | ||||
userT = avg.cpu_ticks[CPU_STATE_USER]; | ||||
niceT = avg.cpu_ticks[CPU_STATE_NICE]; | ||||
systemT = avg.cpu_ticks[CPU_STATE_SYSTEM]; | ||||
idleT = avg.cpu_ticks[CPU_STATE_IDLE]; | ||||
} | ||||
#endif | ||||
uint64_t userCycles = (userT - prevUserT); | uint64_t userCycles = (userT - prevUserT); | |||
uint64_t niceCycles = (niceT - prevNiceT); | uint64_t niceCycles = (niceT - prevNiceT); | |||
uint64_t systemCycles = (systemT - prevSystemT); | uint64_t systemCycles = (systemT - prevSystemT); | |||
uint64_t idleCycles = (idleT - prevIdleT); | uint64_t idleCycles = (idleT - prevIdleT); | |||
prevUserT = userT; | prevUserT = userT; | |||
prevNiceT = niceT; | prevNiceT = niceT; | |||
prevSystemT = systemT; | prevSystemT = systemT; | |||
prevIdleT = idleT; | prevIdleT = idleT; | |||
End of changes. 5 change blocks. | ||||
1 lines changed or deleted | 120 lines changed or added |