12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /*
- htop - TasksMeter.c
- (C) 2004-2011 Hisham H. Muhammad
- Released under the GNU GPLv2+, see the COPYING file
- in the source distribution for its full text.
- */
- #include "config.h" // IWYU pragma: keep
- #include "TasksMeter.h"
- #include "CRT.h"
- #include "Machine.h"
- #include "Macros.h"
- #include "Object.h"
- #include "ProcessTable.h"
- #include "RichString.h"
- #include "Settings.h"
- #include "XUtils.h"
- static const int TasksMeter_attributes[] = {
- CPU_SYSTEM,
- PROCESS_THREAD,
- PROCESS,
- TASKS_RUNNING
- };
- static void TasksMeter_updateValues(Meter* this) {
- const Machine* host = this->host;
- const ProcessTable* pt = (const ProcessTable*) host->processTable;
- this->values[0] = pt->kernelThreads;
- this->values[1] = pt->userlandThreads;
- this->values[2] = pt->totalTasks - pt->kernelThreads - pt->userlandThreads;
- this->values[3] = MINIMUM(pt->runningTasks, host->activeCPUs);
- this->total = pt->totalTasks;
- xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%u/%u", MINIMUM(pt->runningTasks, host->activeCPUs), pt->totalTasks);
- }
- static void TasksMeter_display(const Object* cast, RichString* out) {
- const Meter* this = (const Meter*)cast;
- const Settings* settings = this->host->settings;
- char buffer[20];
- int len;
- len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[2]);
- RichString_appendnAscii(out, CRT_colors[METER_VALUE], buffer, len);
- RichString_appendAscii(out, settings->hideUserlandThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], ", ");
- len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[1]);
- RichString_appendnAscii(out, settings->hideUserlandThreads ? CRT_colors[METER_SHADOW] : CRT_colors[TASKS_RUNNING], buffer, len);
- RichString_appendAscii(out, settings->hideUserlandThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], " thr");
- RichString_appendAscii(out, settings->hideKernelThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], ", ");
- len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[0]);
- RichString_appendnAscii(out, settings->hideKernelThreads ? CRT_colors[METER_SHADOW] : CRT_colors[TASKS_RUNNING], buffer, len);
- RichString_appendAscii(out, settings->hideKernelThreads ? CRT_colors[METER_SHADOW] : CRT_colors[METER_TEXT], " kthr");
- RichString_appendAscii(out, CRT_colors[METER_TEXT], "; ");
- len = xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[3]);
- RichString_appendnAscii(out, CRT_colors[TASKS_RUNNING], buffer, len);
- RichString_appendAscii(out, CRT_colors[METER_TEXT], " running");
- }
- const MeterClass TasksMeter_class = {
- .super = {
- .extends = Class(Meter),
- .delete = Meter_delete,
- .display = TasksMeter_display,
- },
- .updateValues = TasksMeter_updateValues,
- .defaultMode = TEXT_METERMODE,
- .supportedModes = METERMODE_DEFAULT_SUPPORTED,
- .maxItems = 4,
- .total = 100.0,
- .attributes = TasksMeter_attributes,
- .name = "Tasks",
- .uiName = "Task counter",
- .caption = "Tasks: "
- };
|