summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-07-29 00:57:11 +0800
committerruki <[email protected]>2022-07-29 00:57:11 +0800
commit91c60d63adf90538ac9520cb0b83b979a5f534c5 (patch)
tree82142929f486e78280d4a2d8c4a0d9df714cd6e6
parent078fc4c57cbfe1141d3683e31f4f9b615ea34c3c (diff)
improve cpu usagerate
-rw-r--r--core/src/xmake/os/cpuinfo.c26
1 files changed, 7 insertions, 19 deletions
diff --git a/core/src/xmake/os/cpuinfo.c b/core/src/xmake/os/cpuinfo.c
index fce4495d1..143c3b3af 100644
--- a/core/src/xmake/os/cpuinfo.c
+++ b/core/src/xmake/os/cpuinfo.c
@@ -38,25 +38,18 @@
#endif
/* //////////////////////////////////////////////////////////////////////////////////////
- * macros
- */
-#define XM_CPU_MAX (1024)
-
-/* //////////////////////////////////////////////////////////////////////////////////////
* private implementation
*/
-static tb_int_t xm_os_cpuinfo_stats(tb_float_t usages[XM_CPU_MAX])
+static tb_float_t xm_os_cpuinfo_usagerate()
{
#if defined(TB_CONFIG_OS_MACOSX)
+ tb_float_t usagerate = 0;
natural_t cpu_count = 0;
processor_info_array_t cpuinfo;
mach_msg_type_number_t cpuinfo_count;
static tb_hong_t s_time = 0;
if (tb_mclock() - s_time > 1000 && host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &cpu_count, &cpuinfo, &cpuinfo_count) == KERN_SUCCESS)
{
- if (cpuinfo_count > XM_CPU_MAX)
- cpuinfo_count = XM_CPU_MAX;
-
static processor_info_array_t s_cpuinfo_prev = tb_null;
static mach_msg_type_number_t s_cpuinfo_count_prev = 0;
for (tb_int_t i = 0; i < cpu_count; ++i)
@@ -74,7 +67,7 @@ static tb_int_t xm_os_cpuinfo_stats(tb_float_t usages[XM_CPU_MAX])
use = cpuinfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + cpuinfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + cpuinfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
total = use + cpuinfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
}
- usages[i] = total > 0? ((tb_float_t)use / (tb_float_t)total) : 0;
+ usagerate += total > 0? ((tb_float_t)use / (tb_float_t)total) : 0;
}
if (s_cpuinfo_prev)
vm_deallocate(mach_task_self(), (vm_address_t)s_cpuinfo_prev, sizeof(integer_t) * s_cpuinfo_count_prev);
@@ -82,7 +75,7 @@ static tb_int_t xm_os_cpuinfo_stats(tb_float_t usages[XM_CPU_MAX])
s_cpuinfo_prev = cpuinfo;
s_cpuinfo_count_prev = cpuinfo_count;
}
- return cpu_count;
+ return cpu_count > 0? usagerate / cpu_count : 0;
#else
return 0;
#endif
@@ -112,15 +105,10 @@ tb_int_t xm_os_cpuinfo(lua_State* lua)
lua_pushinteger(lua, ncpu > 0? ncpu : 1);
lua_settable(lua, -3);
- // get cpu usages
- tb_float_t usages[XM_CPU_MAX];
- tb_int_t count = xm_os_cpuinfo_stats(usages);
- if (count > 0)
+ // get cpu usage rate
+ tb_float_t usagerate = xm_os_cpuinfo_usagerate();
+ if (usagerate > 0)
{
- tb_float_t usagerate = 0;
- for (tb_int_t i = 0; i < count; i++)
- usagerate += usages[i];
- usagerate /= count;
lua_pushstring(lua, "usagerate");
lua_pushnumber(lua, usagerate);
lua_settable(lua, -3);