From 5a699af6100f556a91b0a218ea4df767c0e87b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 1 Nov 2023 15:23:59 +0800 Subject: [PATCH 1/5] OS (macOS): improve performance --- src/detection/os/os_apple.m | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/detection/os/os_apple.m b/src/detection/os/os_apple.m index 98e639bad..1ce516e25 100644 --- a/src/detection/os/os_apple.m +++ b/src/detection/os/os_apple.m @@ -35,10 +35,10 @@ static bool detectOSCodeName(FFOSResult* os) switch (num) { - case 14: ffStrbufAppendS(&os->codename, "Sonoma"); return true; - case 13: ffStrbufAppendS(&os->codename, "Ventura"); return true; - case 12: ffStrbufAppendS(&os->codename, "Monterey"); return true; - case 11: ffStrbufAppendS(&os->codename, "Big Sur"); return true; + case 14: ffStrbufSetStatic(&os->codename, "Sonoma"); return true; + case 13: ffStrbufSetStatic(&os->codename, "Ventura"); return true; + case 12: ffStrbufSetStatic(&os->codename, "Monterey"); return true; + case 11: ffStrbufSetStatic(&os->codename, "Big Sur"); return true; case 10: { version = str_end + 1; num = strtoul(version, &str_end, 10); @@ -46,23 +46,23 @@ static bool detectOSCodeName(FFOSResult* os) switch (num) { - case 16: ffStrbufAppendS(&os->codename, "Big Sur"); return true; - case 15: ffStrbufAppendS(&os->codename, "Catalina"); return true; - case 14: ffStrbufAppendS(&os->codename, "Mojave"); return true; - case 13: ffStrbufAppendS(&os->codename, "High Sierra"); return true; - case 12: ffStrbufAppendS(&os->codename, "Sierra"); return true; - case 11: ffStrbufAppendS(&os->codename, "El Capitan"); return true; - case 10: ffStrbufAppendS(&os->codename, "Yosemite"); return true; - case 9: ffStrbufAppendS(&os->codename, "Mavericks"); return true; - case 8: ffStrbufAppendS(&os->codename, "Mountain Lion"); return true; - case 7: ffStrbufAppendS(&os->codename, "Lion"); return true; - case 6: ffStrbufAppendS(&os->codename, "Snow Leopard"); return true; - case 5: ffStrbufAppendS(&os->codename, "Leopard"); return true; - case 4: ffStrbufAppendS(&os->codename, "Tiger"); return true; - case 3: ffStrbufAppendS(&os->codename, "Panther"); return true; - case 2: ffStrbufAppendS(&os->codename, "Jaguar"); return true; - case 1: ffStrbufAppendS(&os->codename, "Puma"); return true; - case 0: ffStrbufAppendS(&os->codename, "Cheetah"); return true; + case 16: ffStrbufSetStatic(&os->codename, "Big Sur"); return true; + case 15: ffStrbufSetStatic(&os->codename, "Catalina"); return true; + case 14: ffStrbufSetStatic(&os->codename, "Mojave"); return true; + case 13: ffStrbufSetStatic(&os->codename, "High Sierra"); return true; + case 12: ffStrbufSetStatic(&os->codename, "Sierra"); return true; + case 11: ffStrbufSetStatic(&os->codename, "El Capitan"); return true; + case 10: ffStrbufSetStatic(&os->codename, "Yosemite"); return true; + case 9: ffStrbufSetStatic(&os->codename, "Mavericks"); return true; + case 8: ffStrbufSetStatic(&os->codename, "Mountain Lion"); return true; + case 7: ffStrbufSetStatic(&os->codename, "Lion"); return true; + case 6: ffStrbufSetStatic(&os->codename, "Snow Leopard"); return true; + case 5: ffStrbufSetStatic(&os->codename, "Leopard"); return true; + case 4: ffStrbufSetStatic(&os->codename, "Tiger"); return true; + case 3: ffStrbufSetStatic(&os->codename, "Panther"); return true; + case 2: ffStrbufSetStatic(&os->codename, "Jaguar"); return true; + case 1: ffStrbufSetStatic(&os->codename, "Puma"); return true; + case 0: ffStrbufSetStatic(&os->codename, "Cheetah"); return true; } } } @@ -113,7 +113,7 @@ void ffDetectOSImpl(FFOSResult* os) parseSystemVersion(os); if(ffStrbufStartsWithIgnCaseS(&os->name, "MacOS")) - ffStrbufAppendS(&os->id, "macos"); + ffStrbufSetStatic(&os->id, "macos"); if(os->version.length == 0) ffSysctlGetString("kern.osproductversion", &os->version); From 6e816fca6eba36c669697e25d8154509d5a8f47c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 1 Nov 2023 15:26:24 +0800 Subject: [PATCH 2/5] CPUUsage: don't hang on weird host Try fixing CI of FreeBSD --- src/detection/cpuusage/cpuusage.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/detection/cpuusage/cpuusage.c b/src/detection/cpuusage/cpuusage.c index 040d68780..255ee0fed 100644 --- a/src/detection/cpuusage/cpuusage.c +++ b/src/detection/cpuusage/cpuusage.c @@ -27,6 +27,7 @@ const char* ffGetCpuUsageResult(FFlist* result) if(cpuTimes1.length == 0) return "No CPU cores found"; FF_LIST_AUTO_DESTROY cpuTimes2 = ffListCreate(sizeof(FFCpuUsageInfo)); + uint32_t retryCount = 0; retry: error = ffGetCpuUsageInfo(&cpuTimes2); @@ -41,6 +42,8 @@ retry: { ffListClear(&cpuTimes2); ffTimeSleep(200); + if (++retryCount >= 10) + return "Retry count exceeded"; goto retry; } } From 1b3d713e5049d0cd1156840d625eba275a4e0b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 1 Nov 2023 15:36:13 +0800 Subject: [PATCH 3/5] CPUUsage: always print something --- src/common/bar.c | 4 +++- src/detection/cpuusage/cpuusage.c | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/common/bar.c b/src/common/bar.c index 4bd6e76ba..558f5d542 100644 --- a/src/common/bar.c +++ b/src/common/bar.c @@ -78,7 +78,9 @@ void ffAppendPercentNum(FFstrbuf* buffer, double percent, uint8_t green, uint8_t if (colored && !options->pipe) { - if(green < yellow) + if(percent != percent) + ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); + else if(green < yellow) { if (percent <= green) ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_GREEN "m"); diff --git a/src/detection/cpuusage/cpuusage.c b/src/detection/cpuusage/cpuusage.c index 255ee0fed..292a91a28 100644 --- a/src/detection/cpuusage/cpuusage.c +++ b/src/detection/cpuusage/cpuusage.c @@ -40,11 +40,12 @@ retry: FFCpuUsageInfo* cpuTime2 = ffListGet(&cpuTimes2, i); if (cpuTime2->totalAll <= cpuTime1->totalAll) { - ffListClear(&cpuTimes2); - ffTimeSleep(200); - if (++retryCount >= 10) - return "Retry count exceeded"; - goto retry; + if (++retryCount <= 3) + { + ffListClear(&cpuTimes2); + ffTimeSleep(200); + goto retry; + } } } From 256c9be19b873bc5c4a99b25baf9438a1427c10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 1 Nov 2023 15:49:51 +0800 Subject: [PATCH 4/5] CPUUsage: skip NaN when summarizing values --- src/modules/cpuusage/cpuusage.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/modules/cpuusage/cpuusage.c b/src/modules/cpuusage/cpuusage.c index 7a059b1d5..02246833b 100644 --- a/src/modules/cpuusage/cpuusage.c +++ b/src/modules/cpuusage/cpuusage.c @@ -25,16 +25,19 @@ void ffPrintCPUUsage(FFCPUUsageOptions* options) uint32_t index = 0; FF_LIST_FOR_EACH(double, percent, percentages) { - sumValue += *percent; - if (*percent > maxValue) + if (*percent == *percent) { - maxValue = *percent; - maxIndex = index; - } - if (*percent < minValue) - { - minValue = *percent; - minIndex = index; + sumValue += *percent; + if (*percent > maxValue) + { + maxValue = *percent; + maxIndex = index; + } + if (*percent < minValue) + { + minValue = *percent; + minIndex = index; + } } ++index; } From 4cabc5684b19527aff1603d3c2fc57006806d6b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 1 Nov 2023 15:55:13 +0800 Subject: [PATCH 5/5] CPUUsage: don't count NaN values --- src/modules/cpuusage/cpuusage.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/modules/cpuusage/cpuusage.c b/src/modules/cpuusage/cpuusage.c index 02246833b..14bbf7afc 100644 --- a/src/modules/cpuusage/cpuusage.c +++ b/src/modules/cpuusage/cpuusage.c @@ -22,7 +22,7 @@ void ffPrintCPUUsage(FFCPUUsageOptions* options) double maxValue = -999, minValue = 999, sumValue = 0; uint32_t maxIndex = 999, minIndex = 999; - uint32_t index = 0; + uint32_t index = 0, valueCount = 0; FF_LIST_FOR_EACH(double, percent, percentages) { if (*percent == *percent) @@ -38,10 +38,11 @@ void ffPrintCPUUsage(FFCPUUsageOptions* options) minValue = *percent; minIndex = index; } + ++valueCount; } ++index; } - double avgValue = sumValue / (double) percentages.length; + double avgValue = sumValue / (double) valueCount; if(options->moduleArgs.outputFormat.length == 0) {