diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2011-11-18 06:08:56 +0000 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2011-11-18 06:08:56 +0000 |
commit | 7ca10817122d3b7b30fabb1cadb75e5ee14b364e (patch) | |
tree | 14fa282dcad8eac9401fa463484b0b1693f43e1f /ProcessList.c | |
parent | 38856488815711138aa9d0ba32cca66694717171 (diff) |
Mega-commit with features and tweaks for 1.0:
* Performance improvements
* Support for splitting CPU meters into two or four columns
(thanks to Wim Heirman)
* Switch from PLPA, which is now deprecated, to HWLOC.
* Bring back support for native Linux sched_setaffinity,
so we don't have to use HWLOC where we don't need to.
* Support for typing in user names and column fields in selection panels.
Diffstat (limited to 'ProcessList.c')
-rw-r--r-- | ProcessList.c | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/ProcessList.c b/ProcessList.c index b681fede..0ba17980 100644 --- a/ProcessList.c +++ b/ProcessList.c @@ -178,8 +178,7 @@ ProcessList* ProcessList_new(UsersTable* usersTable) { ProcessList* this; this = calloc(sizeof(ProcessList), 1); this->processes = Vector_new(PROCESS_CLASS, true, DEFAULT_SIZE, Process_compare); - this->processTable = Hashtable_new(70, false); - assert(Hashtable_count(this->processTable) == Vector_count(this->processes)); + this->processTable = Hashtable_new(140, false); this->usersTable = usersTable; /* tree-view auxiliary buffers */ @@ -329,7 +328,7 @@ static void ProcessList_buildTree(ProcessList* this, pid_t pid, int level, int i void ProcessList_sort(ProcessList* this) { if (!this->treeView) { - Vector_sort(this->processes); + Vector_insertionSort(this->processes); } else { // Save settings int direction = this->direction; @@ -337,7 +336,7 @@ void ProcessList_sort(ProcessList* this) { // Sort by PID this->sortKey = PID; this->direction = 1; - Vector_sort(this->processes); + Vector_quickSort(this->processes); // Restore settings this->sortKey = sortKey; this->direction = direction; @@ -448,23 +447,34 @@ static void ProcessList_readIoFile(Process* process, const char* dirname, char* unsigned long long last_read = process->io_read_bytes; unsigned long long last_write = process->io_write_bytes; while (fgets(buffer, 255, file)) { - if (sscanf(buffer, "rchar: %llu", &process->io_rchar)) continue; - if (sscanf(buffer, "wchar: %llu", &process->io_wchar)) continue; - if (sscanf(buffer, "syscr: %llu", &process->io_syscr)) continue; - if (sscanf(buffer, "syscw: %llu", &process->io_syscw)) continue; - if (sscanf(buffer, "read_bytes: %llu", &process->io_read_bytes)) { - process->io_rate_read_bps = - ((double)(process->io_read_bytes - last_read))/(((double)(now - process->io_rate_read_time))/1000); - process->io_rate_read_time = now; - continue; - } - if (sscanf(buffer, "write_bytes: %llu", &process->io_write_bytes)) { - process->io_rate_write_bps = - ((double)(process->io_write_bytes - last_write))/(((double)(now - process->io_rate_write_time))/1000); - process->io_rate_write_time = now; - continue; + switch (buffer[0]) { + case 'r': + if (buffer[1] == 'c') + sscanf(buffer, "rchar: %llu", &process->io_rchar); + else if (sscanf(buffer, "read_bytes: %llu", &process->io_read_bytes)) { + process->io_rate_read_bps = + ((double)(process->io_read_bytes - last_read))/(((double)(now - process->io_rate_read_time))/1000); + process->io_rate_read_time = now; + } + break; + case 'w': + if (buffer[1] == 'c') + sscanf(buffer, "wchar: %llu", &process->io_wchar); + else if (sscanf(buffer, "write_bytes: %llu", &process->io_write_bytes)) { + process->io_rate_write_bps = + ((double)(process->io_write_bytes - last_write))/(((double)(now - process->io_rate_write_time))/1000); + process->io_rate_write_time = now; + } + break; + case 's': + if (buffer[5] == 'r') + sscanf(buffer, "syscr: %llu", &process->io_syscr); + else + sscanf(buffer, "syscw: %llu", &process->io_syscw); + break; + case 'c': + sscanf(buffer, "cancelled_write_bytes: %llu", &process->io_cancelled_write_bytes); } - sscanf(buffer, "cancelled_write_bytes: %llu", &process->io_cancelled_write_bytes); } fclose(file); } |