blob: fc1e4b0ed2bc908286ea05afa92549cc3a794d0d [file] [log] [blame]
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00001/*
Hisham Muhammad84281bd2011-12-26 21:35:57 +00002htop - TasksMeter.c
Hisham Muhammad300caa02011-05-26 16:35:07 +00003(C) 2004-2011 Hisham H. Muhammad
Daniel Lange94ad1112021-09-22 11:33:00 +02004Released under the GNU GPLv2+, see the COPYING file
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00005in the source distribution for its full text.
6*/
7
Daniel Lange179aeb02023-11-29 17:44:20 +01008#include "config.h" // IWYU pragma: keep
9
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000010#include "TasksMeter.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000011
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000012#include "CRT.h"
Benny Baumanne56089e2023-11-28 15:15:03 +010013#include "Machine.h"
Benny Baumann0f526292020-09-19 13:55:23 +020014#include "Macros.h"
15#include "Object.h"
Nathan Scottb74673f2023-08-31 11:56:43 +100016#include "ProcessTable.h"
Benny Baumann0f526292020-09-19 13:55:23 +020017#include "RichString.h"
18#include "Settings.h"
Benny Baumann872e5422020-10-14 20:21:09 +020019#include "XUtils.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000020
Hisham Muhammad84281bd2011-12-26 21:35:57 +000021
Christian Göttsche6db2d522020-09-28 12:23:07 +020022static const int TasksMeter_attributes[] = {
23 CPU_SYSTEM,
24 PROCESS_THREAD,
25 PROCESS,
26 TASKS_RUNNING
Hisham Muhammad2f1f82e2006-06-06 20:41:01 +000027};
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000028
Christian Göttsche2d1042a2020-10-06 13:13:16 +020029static void TasksMeter_updateValues(Meter* this) {
Nathan Scott0bdade12023-05-02 09:02:22 +100030 const Machine* host = this->host;
Nathan Scottb74673f2023-08-31 11:56:43 +100031 const ProcessTable* pt = (const ProcessTable*) host->processTable;
Nathan Scott0f751e92023-08-22 16:11:05 +100032
Nathan Scottb74673f2023-08-31 11:56:43 +100033 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öttsche8163b812021-03-28 18:18:56 +020038
Nathan Scottb74673f2023-08-31 11:56:43 +100039 xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%u/%u", MINIMUM(pt->runningTasks, host->activeCPUs), pt->totalTasks);
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000040}
41
Christian Göttsche79ad39c2020-10-06 12:28:11 +020042static void TasksMeter_display(const Object* cast, RichString* out) {
43 const Meter* this = (const Meter*)cast;
Nathan Scott0bdade12023-05-02 09:02:22 +100044 const Settings* settings = this->host->settings;
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000045 char buffer[20];
Christian Göttsche436808f2021-04-14 20:47:42 +020046 int len;
Daniel Flanagandd334442019-10-31 11:39:12 -050047
Christian Göttsche436808f2021-04-14 20:47:42 +020048 len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[2]);
49 RichString_appendnAscii(out, CRT_colors[METER_VALUE], buffer, len);
Christian Göttsche8163b812021-03-28 18:18:56 +020050
51 RichString_appendAscii(out, settings->hideUserlandThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], ", ");
Christian Göttsche436808f2021-04-14 20:47:42 +020052 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öttsche8163b812021-03-28 18:18:56 +020054 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öttsche436808f2021-04-14 20:47:42 +020057 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öttsche8163b812021-03-28 18:18:56 +020059 RichString_appendAscii(out, settings->hideKernelThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], " kthr");
60
Christian Göttsche157086e2020-12-04 14:44:57 +010061 RichString_appendAscii(out, CRT_colors[METER_TEXT], "; ");
Christian Göttsche436808f2021-04-14 20:47:42 +020062 len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[3]);
63 RichString_appendnAscii(out, CRT_colors[TASKS_RUNNING], buffer, len);
Christian Göttsche157086e2020-12-04 14:44:57 +010064 RichString_appendAscii(out, CRT_colors[METER_TEXT], " running");
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000065}
66
Christian Göttscheba282cf2020-10-05 13:19:50 +020067const MeterClass TasksMeter_class = {
Hisham Muhammad00b324b2012-12-05 15:12:20 +000068 .super = {
69 .extends = Class(Meter),
70 .delete = Meter_delete,
71 .display = TasksMeter_display,
72 },
Explorer099dea20e2016-05-04 13:39:26 +080073 .updateValues = TasksMeter_updateValues,
Hisham Muhammad00b324b2012-12-05 15:12:20 +000074 .defaultMode = TEXT_METERMODE,
Explorer0936626ce2024-05-03 03:52:57 +080075 .supportedModes = METERMODE_DEFAULT_SUPPORTED,
Hisham Muhammad3383d8e2015-01-21 23:27:31 -020076 .maxItems = 4,
Explorer0999fb3072016-03-11 10:54:34 +080077 .total = 100.0,
Daniel Flanagandd334442019-10-31 11:39:12 -050078 .attributes = TasksMeter_attributes,
Hisham Muhammad33113fe2006-04-10 20:40:38 +000079 .name = "Tasks",
80 .uiName = "Task counter",
81 .caption = "Tasks: "
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000082};