| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 1 | /* |
| Hisham Muhammad | 84281bd | 2011-12-26 21:35:57 +0000 | [diff] [blame] | 2 | htop - TasksMeter.c |
| Hisham Muhammad | 300caa0 | 2011-05-26 16:35:07 +0000 | [diff] [blame] | 3 | (C) 2004-2011 Hisham H. Muhammad |
| Daniel Lange | 94ad111 | 2021-09-22 11:33:00 +0200 | [diff] [blame] | 4 | Released under the GNU GPLv2+, see the COPYING file |
| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 5 | in the source distribution for its full text. |
| 6 | */ |
| 7 | |
| Daniel Lange | 179aeb0 | 2023-11-29 17:44:20 +0100 | [diff] [blame] | 8 | #include "config.h" // IWYU pragma: keep |
| 9 | |
| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 10 | #include "TasksMeter.h" |
| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 11 | |
| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 12 | #include "CRT.h" |
| Benny Baumann | e56089e | 2023-11-28 15:15:03 +0100 | [diff] [blame] | 13 | #include "Machine.h" |
| Benny Baumann | 0f52629 | 2020-09-19 13:55:23 +0200 | [diff] [blame] | 14 | #include "Macros.h" |
| 15 | #include "Object.h" |
| Nathan Scott | b74673f | 2023-08-31 11:56:43 +1000 | [diff] [blame] | 16 | #include "ProcessTable.h" |
| Benny Baumann | 0f52629 | 2020-09-19 13:55:23 +0200 | [diff] [blame] | 17 | #include "RichString.h" |
| 18 | #include "Settings.h" |
| Benny Baumann | 872e542 | 2020-10-14 20:21:09 +0200 | [diff] [blame] | 19 | #include "XUtils.h" |
| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 20 | |
| Hisham Muhammad | 84281bd | 2011-12-26 21:35:57 +0000 | [diff] [blame] | 21 | |
| Christian Göttsche | 6db2d52 | 2020-09-28 12:23:07 +0200 | [diff] [blame] | 22 | static const int TasksMeter_attributes[] = { |
| 23 | CPU_SYSTEM, |
| 24 | PROCESS_THREAD, |
| 25 | PROCESS, |
| 26 | TASKS_RUNNING |
| Hisham Muhammad | 2f1f82e | 2006-06-06 20:41:01 +0000 | [diff] [blame] | 27 | }; |
| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 28 | |
| Christian Göttsche | 2d1042a | 2020-10-06 13:13:16 +0200 | [diff] [blame] | 29 | static void TasksMeter_updateValues(Meter* this) { |
| Nathan Scott | 0bdade1 | 2023-05-02 09:02:22 +1000 | [diff] [blame] | 30 | const Machine* host = this->host; |
| Nathan Scott | b74673f | 2023-08-31 11:56:43 +1000 | [diff] [blame] | 31 | const ProcessTable* pt = (const ProcessTable*) host->processTable; |
| Nathan Scott | 0f751e9 | 2023-08-22 16:11:05 +1000 | [diff] [blame] | 32 | |
| Nathan Scott | b74673f | 2023-08-31 11:56:43 +1000 | [diff] [blame] | 33 | this->values[0] = pt->kernelThreads; |
| 34 | this->values[1] = pt->userlandThreads; |
| 35 | this->values[2] = pt->totalTasks - pt->kernelThreads - pt->userlandThreads; |
| 36 | this->values[3] = MINIMUM(pt->runningTasks, host->activeCPUs); |
| 37 | this->total = pt->totalTasks; |
| Christian Göttsche | 8163b81 | 2021-03-28 18:18:56 +0200 | [diff] [blame] | 38 | |
| Nathan Scott | b74673f | 2023-08-31 11:56:43 +1000 | [diff] [blame] | 39 | xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%u/%u", MINIMUM(pt->runningTasks, host->activeCPUs), pt->totalTasks); |
| Hisham Muhammad | da23c8c | 2008-03-09 08:58:38 +0000 | [diff] [blame] | 40 | } |
| 41 | |
| Christian Göttsche | 79ad39c | 2020-10-06 12:28:11 +0200 | [diff] [blame] | 42 | static void TasksMeter_display(const Object* cast, RichString* out) { |
| 43 | const Meter* this = (const Meter*)cast; |
| Nathan Scott | 0bdade1 | 2023-05-02 09:02:22 +1000 | [diff] [blame] | 44 | const Settings* settings = this->host->settings; |
| Hisham Muhammad | da23c8c | 2008-03-09 08:58:38 +0000 | [diff] [blame] | 45 | char buffer[20]; |
| Christian Göttsche | 436808f | 2021-04-14 20:47:42 +0200 | [diff] [blame] | 46 | int len; |
| Daniel Flanagan | dd33444 | 2019-10-31 11:39:12 -0500 | [diff] [blame] | 47 | |
| Christian Göttsche | 436808f | 2021-04-14 20:47:42 +0200 | [diff] [blame] | 48 | len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[2]); |
| 49 | RichString_appendnAscii(out, CRT_colors[METER_VALUE], buffer, len); |
| Christian Göttsche | 8163b81 | 2021-03-28 18:18:56 +0200 | [diff] [blame] | 50 | |
| 51 | RichString_appendAscii(out, settings->hideUserlandThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], ", "); |
| Christian Göttsche | 436808f | 2021-04-14 20:47:42 +0200 | [diff] [blame] | 52 | len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[1]); |
| 53 | RichString_appendnAscii(out, settings->hideUserlandThreads ? CRT_colors[METER_SHADOW] : CRT_colors[TASKS_RUNNING], buffer, len); |
| Christian Göttsche | 8163b81 | 2021-03-28 18:18:56 +0200 | [diff] [blame] | 54 | RichString_appendAscii(out, settings->hideUserlandThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], " thr"); |
| 55 | |
| 56 | RichString_appendAscii(out, settings->hideKernelThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], ", "); |
| Christian Göttsche | 436808f | 2021-04-14 20:47:42 +0200 | [diff] [blame] | 57 | len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[0]); |
| 58 | RichString_appendnAscii(out, settings->hideKernelThreads ? CRT_colors[METER_SHADOW] : CRT_colors[TASKS_RUNNING], buffer, len); |
| Christian Göttsche | 8163b81 | 2021-03-28 18:18:56 +0200 | [diff] [blame] | 59 | RichString_appendAscii(out, settings->hideKernelThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], " kthr"); |
| 60 | |
| Christian Göttsche | 157086e | 2020-12-04 14:44:57 +0100 | [diff] [blame] | 61 | RichString_appendAscii(out, CRT_colors[METER_TEXT], "; "); |
| Christian Göttsche | 436808f | 2021-04-14 20:47:42 +0200 | [diff] [blame] | 62 | len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[3]); |
| 63 | RichString_appendnAscii(out, CRT_colors[TASKS_RUNNING], buffer, len); |
| Christian Göttsche | 157086e | 2020-12-04 14:44:57 +0100 | [diff] [blame] | 64 | RichString_appendAscii(out, CRT_colors[METER_TEXT], " running"); |
| Hisham Muhammad | da23c8c | 2008-03-09 08:58:38 +0000 | [diff] [blame] | 65 | } |
| 66 | |
| Christian Göttsche | ba282cf | 2020-10-05 13:19:50 +0200 | [diff] [blame] | 67 | const MeterClass TasksMeter_class = { |
| Hisham Muhammad | 00b324b | 2012-12-05 15:12:20 +0000 | [diff] [blame] | 68 | .super = { |
| 69 | .extends = Class(Meter), |
| 70 | .delete = Meter_delete, |
| 71 | .display = TasksMeter_display, |
| 72 | }, |
| Explorer09 | 9dea20e | 2016-05-04 13:39:26 +0800 | [diff] [blame] | 73 | .updateValues = TasksMeter_updateValues, |
| Hisham Muhammad | 00b324b | 2012-12-05 15:12:20 +0000 | [diff] [blame] | 74 | .defaultMode = TEXT_METERMODE, |
| Explorer09 | 36626ce | 2024-05-03 03:52:57 +0800 | [diff] [blame] | 75 | .supportedModes = METERMODE_DEFAULT_SUPPORTED, |
| Hisham Muhammad | 3383d8e | 2015-01-21 23:27:31 -0200 | [diff] [blame] | 76 | .maxItems = 4, |
| Explorer09 | 99fb307 | 2016-03-11 10:54:34 +0800 | [diff] [blame] | 77 | .total = 100.0, |
| Daniel Flanagan | dd33444 | 2019-10-31 11:39:12 -0500 | [diff] [blame] | 78 | .attributes = TasksMeter_attributes, |
| Hisham Muhammad | 33113fe | 2006-04-10 20:40:38 +0000 | [diff] [blame] | 79 | .name = "Tasks", |
| 80 | .uiName = "Task counter", |
| 81 | .caption = "Tasks: " |
| Hisham Muhammad | d6231ba | 2006-03-04 18:16:49 +0000 | [diff] [blame] | 82 | }; |