diff options
Diffstat (limited to 'TasksMeter.c')
-rw-r--r-- | TasksMeter.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/TasksMeter.c b/TasksMeter.c new file mode 100644 index 0000000..9f17795 --- /dev/null +++ b/TasksMeter.c @@ -0,0 +1,68 @@ +/* +htop +(C) 2004-2010 Hisham H. Muhammad +Released under the GNU GPL, see the COPYING file +in the source distribution for its full text. +*/ + +#include "TasksMeter.h" +#include "Meter.h" + +#include "ProcessList.h" + +#include "CRT.h" + +#include "debug.h" + +int TasksMeter_attributes[] = { + TASKS_RUNNING +}; + +static void TasksMeter_setValues(Meter* this, char* buffer, int len) { + ProcessList* pl = this->pl; + this->total = pl->totalTasks; + this->values[0] = pl->runningTasks; + snprintf(buffer, len, "%d/%d", (int) this->values[0], (int) this->total); +} + +static void TasksMeter_display(Object* cast, RichString* out) { + Meter* this = (Meter*)cast; + ProcessList* pl = this->pl; + char buffer[20]; + sprintf(buffer, "%d", (int)(this->total - pl->userlandThreads - pl->kernelThreads)); + RichString_write(out, CRT_colors[METER_VALUE], buffer); + int threadValueColor = CRT_colors[METER_VALUE]; + int threadCaptionColor = CRT_colors[METER_TEXT]; + if (pl->highlightThreads) { + threadValueColor = CRT_colors[PROCESS_THREAD_BASENAME]; + threadCaptionColor = CRT_colors[PROCESS_THREAD]; + } + if (!pl->hideUserlandThreads) { + RichString_append(out, CRT_colors[METER_TEXT], ", "); + sprintf(buffer, "%d", (int)pl->userlandThreads); + RichString_append(out, threadValueColor, buffer); + RichString_append(out, threadCaptionColor, " thr"); + } + if (!pl->hideKernelThreads) { + RichString_append(out, CRT_colors[METER_TEXT], ", "); + sprintf(buffer, "%d", (int)pl->kernelThreads); + RichString_append(out, threadValueColor, buffer); + RichString_append(out, threadCaptionColor, " kthr"); + } + RichString_append(out, CRT_colors[METER_TEXT], "; "); + sprintf(buffer, "%d", (int)this->values[0]); + RichString_append(out, CRT_colors[TASKS_RUNNING], buffer); + RichString_append(out, CRT_colors[METER_TEXT], " running"); +} + +MeterType TasksMeter = { + .setValues = TasksMeter_setValues, + .display = TasksMeter_display, + .mode = TEXT_METERMODE, + .items = 1, + .total = 100.0, + .attributes = TasksMeter_attributes, + .name = "Tasks", + .uiName = "Task counter", + .caption = "Tasks: " +}; |