From b192af006f67369881bfc92c963f3d594e71fe0c Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 27 Nov 2014 18:38:52 -0200 Subject: [PATCH 1/2] Decouple Header from Meter classes. (Yes, that's dynamic typing!) --- Header.c | 26 -------------------------- Header.h | 2 -- Settings.c | 21 +++++++++++++++++++-- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/Header.c b/Header.c index 55586843..68249909 100644 --- a/Header.c +++ b/Header.c @@ -8,15 +8,6 @@ in the source distribution for its full text. #include "Header.h" #include "CRT.h" -#include "CPUMeter.h" -#include "MemoryMeter.h" -#include "SwapMeter.h" -#include "TasksMeter.h" -#include "LoadAverageMeter.h" -#include "UptimeMeter.h" -#include "BatteryMeter.h" -#include "ClockMeter.h" -#include "HostnameMeter.h" #include "String.h" #include @@ -138,23 +129,6 @@ MeterModeId Header_readMeterMode(Header* this, int i, HeaderSide side) { return meter->mode; } -void Header_defaultMeters(Header* this, int cpuCount) { - if (cpuCount > 8) { - Vector_add(this->leftMeters, Meter_new(this->pl, 0, (MeterClass*) Class(LeftCPUs2Meter))); - Vector_add(this->rightMeters, Meter_new(this->pl, 0, (MeterClass*) Class(RightCPUs2Meter))); - } else if (cpuCount > 4) { - Vector_add(this->leftMeters, Meter_new(this->pl, 0, (MeterClass*) Class(LeftCPUsMeter))); - Vector_add(this->rightMeters, Meter_new(this->pl, 0, (MeterClass*) Class(RightCPUsMeter))); - } else { - Vector_add(this->leftMeters, Meter_new(this->pl, 0, (MeterClass*) Class(AllCPUsMeter))); - } - Vector_add(this->leftMeters, Meter_new(this->pl, 0, (MeterClass*) Class(MemoryMeter))); - Vector_add(this->leftMeters, Meter_new(this->pl, 0, (MeterClass*) Class(SwapMeter))); - Vector_add(this->rightMeters, Meter_new(this->pl, 0, (MeterClass*) Class(TasksMeter))); - Vector_add(this->rightMeters, Meter_new(this->pl, 0, (MeterClass*) Class(LoadAverageMeter))); - Vector_add(this->rightMeters, Meter_new(this->pl, 0, (MeterClass*) Class(UptimeMeter))); -} - void Header_reinit(Header* this) { for (int i = 0; i < Vector_size(this->leftMeters); i++) { Meter* meter = (Meter*) Vector_get(this->leftMeters, i); diff --git a/Header.h b/Header.h index e7784598..84774391 100644 --- a/Header.h +++ b/Header.h @@ -47,8 +47,6 @@ char* Header_readMeterName(Header* this, int i, HeaderSide side); MeterModeId Header_readMeterMode(Header* this, int i, HeaderSide side); -void Header_defaultMeters(Header* this, int cpuCount); - void Header_reinit(Header* this); void Header_draw(const Header* this); diff --git a/Settings.c b/Settings.c index cd9e6c13..1dc8b1b2 100644 --- a/Settings.c +++ b/Settings.c @@ -61,6 +61,23 @@ static void Settings_readMeterModes(Settings* this, char* line, HeaderSide side) String_freeArray(ids); } +static void Settings_defaultMeters(Header* header, int cpuCount) { + if (cpuCount > 8) { + Header_createMeter(header, "LeftCPUs2", LEFT_HEADER); + Header_createMeter(header, "RightCPUs2", RIGHT_HEADER); + } else if (cpuCount > 4) { + Header_createMeter(header, "LeftCPUs", LEFT_HEADER); + Header_createMeter(header, "RightCPUs", RIGHT_HEADER); + } else { + Header_createMeter(header, "AllCPUs", LEFT_HEADER); + } + Header_createMeter(header, "Memory", LEFT_HEADER); + Header_createMeter(header, "Swap", LEFT_HEADER); + Header_createMeter(header, "Tasks", RIGHT_HEADER); + Header_createMeter(header, "LoadAverage", RIGHT_HEADER); + Header_createMeter(header, "Uptime", RIGHT_HEADER); +} + static bool Settings_read(Settings* this, const char* fileName, int cpuCount) { FILE* fd = fopen(fileName, "r"); if (!fd) @@ -153,7 +170,7 @@ static bool Settings_read(Settings* this, const char* fileName, int cpuCount) { } fclose(fd); if (!readMeters) { - Header_defaultMeters(this->header, cpuCount); + Settings_defaultMeters(this->header, cpuCount); } return true; } @@ -273,7 +290,7 @@ Settings* Settings_new(ProcessList* pl, Header* header, int cpuCount) { ok = Settings_read(this, systemSettings, cpuCount); free(systemSettings); if (!ok) { - Header_defaultMeters(this->header, cpuCount); + Settings_defaultMeters(this->header, cpuCount); pl->hideKernelThreads = true; pl->highlightMegabytes = true; pl->highlightThreads = false; From 357e7a3243a0e6fbc937354a03639f0cc34b966c Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 27 Nov 2014 19:18:14 -0200 Subject: [PATCH 2/2] Move UptimeMeter into platform-dependent area. Set up environment to move other meters. --- AvailableMetersPanel.c | 9 ++++---- Header.c | 3 ++- Makefile.am | 10 +++++---- Meter.c | 30 -------------------------- Meter.h | 2 -- linux/Platform.c | 32 ++++++++++++++++++++++++++++ UptimeMeter.c => linux/UptimeMeter.c | 0 UptimeMeter.h => linux/UptimeMeter.h | 0 unsupported/Platform.c | 28 ++++++++++++++++++++++++ unsupported/Platform.h | 2 ++ 10 files changed, 75 insertions(+), 41 deletions(-) rename UptimeMeter.c => linux/UptimeMeter.c (100%) rename UptimeMeter.h => linux/UptimeMeter.h (100%) diff --git a/AvailableMetersPanel.c b/AvailableMetersPanel.c index f5828516..80b2ebee 100644 --- a/AvailableMetersPanel.c +++ b/AvailableMetersPanel.c @@ -10,6 +10,7 @@ in the source distribution for its full text. #include "CPUMeter.h" #include "Header.h" #include "ListItem.h" +#include "Platform.h" #include #include @@ -56,7 +57,7 @@ static HandlerResult AvailableMetersPanel_eventHandler(Panel* super, int ch) { case 'l': case 'L': { - AvailableMetersPanel_addHeader(header, this->leftPanel, Meter_types[type], param, LEFT_HEADER); + AvailableMetersPanel_addHeader(header, this->leftPanel, Platform_meterTypes[type], param, LEFT_HEADER); result = HANDLED; break; } @@ -64,7 +65,7 @@ static HandlerResult AvailableMetersPanel_eventHandler(Panel* super, int ch) { case 'r': case 'R': { - AvailableMetersPanel_addHeader(header, this->rightPanel, Meter_types[type], param, RIGHT_HEADER); + AvailableMetersPanel_addHeader(header, this->rightPanel, Platform_meterTypes[type], param, RIGHT_HEADER); result = HANDLED; break; } @@ -97,8 +98,8 @@ AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Panel* leftMe this->scr = scr; Panel_setHeader(super, "Available meters"); - for (int i = 1; Meter_types[i]; i++) { - MeterClass* type = Meter_types[i]; + for (int i = 1; Platform_meterTypes[i]; i++) { + MeterClass* type = Platform_meterTypes[i]; if (type != &CPUMeter_class) { Panel_add(super, (Object*) ListItem_new(type->uiName, i << 16)); } diff --git a/Header.c b/Header.c index 68249909..e3ab7f29 100644 --- a/Header.c +++ b/Header.c @@ -9,6 +9,7 @@ in the source distribution for its full text. #include "CRT.h" #include "String.h" +#include "Platform.h" #include #include @@ -66,7 +67,7 @@ void Header_createMeter(Header* this, char* name, HeaderSide side) { if (!ok) param = 0; *paren = '\0'; } - for (MeterClass** type = Meter_types; *type; type++) { + for (MeterClass** type = Platform_meterTypes; *type; type++) { if (String_eq(name, (*type)->name)) { Vector_add(meters, Meter_new(this->pl, param, *type)); break; diff --git a/Makefile.am b/Makefile.am index d3b68662..6374fafa 100644 --- a/Makefile.am +++ b/Makefile.am @@ -21,7 +21,7 @@ DisplayOptionsPanel.c FunctionBar.c Hashtable.c Header.c htop.c ListItem.c \ LoadAverageMeter.c MemoryMeter.c Meter.c MetersPanel.c Object.c Panel.c \ BatteryMeter.c Process.c ProcessList.c RichString.c ScreenManager.c Settings.c \ SignalsPanel.c String.c SwapMeter.c TasksMeter.c TraceScreen.c \ -UptimeMeter.c UsersTable.c Vector.c AvailableColumnsPanel.c AffinityPanel.c \ +UsersTable.c Vector.c AvailableColumnsPanel.c AffinityPanel.c \ HostnameMeter.c OpenFilesScreen.c Affinity.c IncSet.c Action.c myhtopheaders = AvailableColumnsPanel.h AvailableMetersPanel.h \ @@ -30,15 +30,17 @@ CPUMeter.h CRT.h DisplayOptionsPanel.h FunctionBar.h \ Hashtable.h Header.h htop.h ListItem.h LoadAverageMeter.h MemoryMeter.h \ BatteryMeter.h Meter.h MetersPanel.h Object.h Panel.h ProcessList.h RichString.h \ ScreenManager.h Settings.h SignalsPanel.h String.h SwapMeter.h TasksMeter.h \ -TraceScreen.h UptimeMeter.h UsersTable.h Vector.h Process.h AffinityPanel.h \ +TraceScreen.h UsersTable.h Vector.h Process.h AffinityPanel.h \ HostnameMeter.h OpenFilesScreen.h Affinity.h IncSet.h Action.h if HTOP_LINUX myhtopplatsources = linux/Platform.c linux/IOPriorityPanel.c linux/IOPriority.c \ -linux/LinuxProcess.c linux/LinuxProcessList.c linux/LinuxCRT.c +linux/LinuxProcess.c linux/LinuxProcessList.c linux/LinuxCRT.c \ +linux/UptimeMeter.c myhtopplatheaders = linux/Platform.h linux/IOPriorityPanel.h linux/IOPriority.h \ -linux/LinuxProcess.h linux/LinuxProcessList.h linux/LinuxCRT.h +linux/LinuxProcess.h linux/LinuxProcessList.h linux/LinuxCRT.h \ +linux/UptimeMeter.h endif if HTOP_UNSUPPORTED diff --git a/Meter.c b/Meter.c index 3abd7083..77458949 100644 --- a/Meter.c +++ b/Meter.c @@ -7,15 +7,6 @@ in the source distribution for its full text. #include "Meter.h" -#include "CPUMeter.h" -#include "MemoryMeter.h" -#include "SwapMeter.h" -#include "TasksMeter.h" -#include "LoadAverageMeter.h" -#include "UptimeMeter.h" -#include "BatteryMeter.h" -#include "ClockMeter.h" -#include "HostnameMeter.h" #include "RichString.h" #include "Object.h" #include "CRT.h" @@ -126,27 +117,6 @@ MeterClass Meter_class = { } }; -MeterClass* Meter_types[] = { - &CPUMeter_class, - &ClockMeter_class, - &LoadAverageMeter_class, - &LoadMeter_class, - &MemoryMeter_class, - &SwapMeter_class, - &TasksMeter_class, - &UptimeMeter_class, - &BatteryMeter_class, - &HostnameMeter_class, - &AllCPUsMeter_class, - &AllCPUs2Meter_class, - &LeftCPUsMeter_class, - &RightCPUsMeter_class, - &LeftCPUs2Meter_class, - &RightCPUs2Meter_class, - &BlankMeter_class, - NULL -}; - Meter* Meter_new(ProcessList* pl, int param, MeterClass* type) { Meter* this = calloc(1, sizeof(Meter)); Object_setClass(this, type); diff --git a/Meter.h b/Meter.h index 2f58b8fc..bfd6ebbb 100644 --- a/Meter.h +++ b/Meter.h @@ -99,8 +99,6 @@ typedef struct GraphData_ { extern MeterClass Meter_class; -extern MeterClass* Meter_types[]; - Meter* Meter_new(ProcessList* pl, int param, MeterClass* type); void Meter_delete(Object* cast); diff --git a/linux/Platform.c b/linux/Platform.c index 5e62dc05..d39e2e96 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -9,6 +9,16 @@ in the source distribution for its full text. #include "IOPriority.h" #include "IOPriorityPanel.h" #include "LinuxProcess.h" +#include "Meter.h" +#include "CPUMeter.h" +#include "MemoryMeter.h" +#include "SwapMeter.h" +#include "TasksMeter.h" +#include "LoadAverageMeter.h" +#include "UptimeMeter.h" +#include "BatteryMeter.h" +#include "ClockMeter.h" +#include "HostnameMeter.h" /*{ #include "Action.h" @@ -35,3 +45,25 @@ static Htop_Reaction Platform_actionSetIOPriority(Panel* panel, ProcessList* pl, void Platform_setBindings(Htop_Action* keys) { keys['i'] = Platform_actionSetIOPriority; } + +MeterClass* Platform_meterTypes[] = { + &CPUMeter_class, + &ClockMeter_class, + &LoadAverageMeter_class, + &LoadMeter_class, + &MemoryMeter_class, + &SwapMeter_class, + &TasksMeter_class, + &UptimeMeter_class, + &BatteryMeter_class, + &HostnameMeter_class, + &AllCPUsMeter_class, + &AllCPUs2Meter_class, + &LeftCPUsMeter_class, + &RightCPUsMeter_class, + &LeftCPUs2Meter_class, + &RightCPUs2Meter_class, + &BlankMeter_class, + NULL +}; + diff --git a/UptimeMeter.c b/linux/UptimeMeter.c similarity index 100% rename from UptimeMeter.c rename to linux/UptimeMeter.c diff --git a/UptimeMeter.h b/linux/UptimeMeter.h similarity index 100% rename from UptimeMeter.h rename to linux/UptimeMeter.h diff --git a/unsupported/Platform.c b/unsupported/Platform.c index b65fec40..5e568025 100644 --- a/unsupported/Platform.c +++ b/unsupported/Platform.c @@ -6,6 +6,14 @@ in the source distribution for its full text. */ #include "Platform.h" +#include "CPUMeter.h" +#include "MemoryMeter.h" +#include "SwapMeter.h" +#include "TasksMeter.h" +#include "LoadAverageMeter.h" +#include "BatteryMeter.h" +#include "ClockMeter.h" +#include "HostnameMeter.h" /*{ #include "Action.h" @@ -15,3 +23,23 @@ void Platform_setBindings(Htop_Action* keys) { (void) keys; } +MeterClass* Platform_meterTypes[] = { + &CPUMeter_class, + &ClockMeter_class, + &LoadAverageMeter_class, + &LoadMeter_class, + &MemoryMeter_class, + &SwapMeter_class, + &TasksMeter_class, + &BatteryMeter_class, + &HostnameMeter_class, + &AllCPUsMeter_class, + &AllCPUs2Meter_class, + &LeftCPUsMeter_class, + &RightCPUsMeter_class, + &LeftCPUs2Meter_class, + &RightCPUs2Meter_class, + &BlankMeter_class, + NULL +}; + diff --git a/unsupported/Platform.h b/unsupported/Platform.h index 65a31993..1a2b81f0 100644 --- a/unsupported/Platform.h +++ b/unsupported/Platform.h @@ -13,5 +13,7 @@ in the source distribution for its full text. void Platform_setBindings(Htop_Action* keys); +extern MeterClass* Platform_meterTypes[]; + #endif