mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 10:22:12 +02:00
Top: supports sorting by start-time
This commit is contained in:
@@ -4441,16 +4441,17 @@
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "top",
|
||||
"description": "Print processes with the highest CPU or memory usage"
|
||||
"description": "Print processes with the highest CPU, memory, disk I/O usage or latest start time"
|
||||
},
|
||||
"sort": {
|
||||
"type": "string",
|
||||
"description": "Sort processes by CPU, memory or disk IO usage",
|
||||
"description": "Sort processes by CPU, memory, disk IO usage or start time",
|
||||
"enum": [
|
||||
"cpu",
|
||||
"memory",
|
||||
"disk-read",
|
||||
"disk-write"
|
||||
"disk-write",
|
||||
"start-time"
|
||||
],
|
||||
"default": "cpu"
|
||||
},
|
||||
|
||||
@@ -53,6 +53,12 @@ static int compareDiskWriteResults(const FFTopProcessResult* a, const FFTopProce
|
||||
if (a->bytesWritten > b->bytesWritten) return -1;
|
||||
return (int) (a->pid - b->pid);
|
||||
}
|
||||
|
||||
static int compareStartTimeResults(const FFTopProcessResult* a, const FFTopProcessResult* b) {
|
||||
if (a->startTime < b->startTime) return 1;
|
||||
if (a->startTime > b->startTime) return -1;
|
||||
return (int) (a->pid - b->pid);
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
const char* ffDetectTopProcesses(FFTopOptions* options, FFlist* result) {
|
||||
@@ -147,6 +153,7 @@ const char* ffDetectTopProcesses(FFTopOptions* options, FFlist* result) {
|
||||
const void* compare = options->sort == FF_TOP_TYPE_DISK_WRITE ? (void*) compareDiskWriteResults
|
||||
: options->sort == FF_TOP_TYPE_DISK_READ ? (void*) compareDiskReadResults
|
||||
: options->sort == FF_TOP_TYPE_MEMORY ? (void*) compareMemoryResults
|
||||
: options->sort == FF_TOP_TYPE_START_TIME ? (void*) compareStartTimeResults
|
||||
: (void*) compareCpuResults;
|
||||
ffListSort(result, sizeof(FFTopProcessResult), (void*) compare);
|
||||
if (result->length > options->nProcesses) {
|
||||
|
||||
@@ -8,6 +8,7 @@ typedef enum FFTopTypes: uint8_t {
|
||||
FF_TOP_TYPE_MEMORY = 1 << 1,
|
||||
FF_TOP_TYPE_DISK_READ = 1 << 2,
|
||||
FF_TOP_TYPE_DISK_WRITE = 1 << 3,
|
||||
FF_TOP_TYPE_START_TIME = 1 << 4,
|
||||
|
||||
FF_TOP_TYPE_DISK = FF_TOP_TYPE_DISK_READ | FF_TOP_TYPE_DISK_WRITE,
|
||||
} FFTopTypes;
|
||||
|
||||
@@ -101,6 +101,7 @@ void ffParseTopJsonObject(FFTopOptions* options, yyjson_val* module) {
|
||||
{ "memory", FF_TOP_TYPE_MEMORY },
|
||||
{ "disk-read", FF_TOP_TYPE_DISK_READ },
|
||||
{ "disk-write", FF_TOP_TYPE_DISK_WRITE },
|
||||
{ "start-time", FF_TOP_TYPE_START_TIME },
|
||||
{},
|
||||
});
|
||||
if (error) {
|
||||
@@ -183,6 +184,8 @@ void ffGenerateTopJsonConfig(FFTopOptions* options, yyjson_mut_doc* doc, yyjson_
|
||||
yyjson_mut_obj_add_str(doc, module, "sort", "disk-read");
|
||||
} else if (options->sort == FF_TOP_TYPE_DISK_WRITE) {
|
||||
yyjson_mut_obj_add_str(doc, module, "sort", "disk-write");
|
||||
} else if (options->sort == FF_TOP_TYPE_START_TIME) {
|
||||
yyjson_mut_obj_add_str(doc, module, "sort", "start-time");
|
||||
}
|
||||
yyjson_mut_obj_add_uint(doc, module, "processes", options->nProcesses);
|
||||
yyjson_mut_obj_add_uint(doc, module, "waitTime", options->waitTime);
|
||||
|
||||
Reference in New Issue
Block a user