diff --git a/src/system.c b/src/system.c index 261d82d..42ff2d3 100644 --- a/src/system.c +++ b/src/system.c @@ -206,6 +206,26 @@ cpu_count(void) return cores; } +int +system_cpu_online_count_get(void) +{ +#if defined(__linux__) + return cpu_count(); +#endif + static int cores = 0; + + if (cores != 0) return cores; + + size_t len; + int mib[2] = { CTL_HW, HW_NCPUONLINE }; + + len = sizeof(cores); + if (sysctl(mib, 2, &cores, &len, NULL, 0) < 0) + return cpu_count(); + + return cores; +} + static void _cpu_state_get(cpu_core_t **cores, int ncpu) { diff --git a/src/system.h b/src/system.h index 3f98a70..e7d2527 100644 --- a/src/system.h +++ b/src/system.h @@ -74,4 +74,7 @@ int void system_power_state_get(power_t *power); +int + system_cpu_online_count_get(); + #endif diff --git a/src/ui.c b/src/ui.c index 83bc79f..5fdac0b 100644 --- a/src/ui.c +++ b/src/ui.c @@ -434,7 +434,7 @@ _system_stats_feedback_cb(void *data, Ecore_Thread *thread, void *msg) free(results->cores[i]); } - cpu_usage = cpu_usage / results->cpu_count; + cpu_usage = cpu_usage / system_cpu_online_count_get(); _progressbar_value_force_set(ui->progress_cpu, (double)cpu_usage / 100);