From 46cfaa8dc83081bf5dc6475ee352a7055188e940 Mon Sep 17 00:00:00 2001 From: NicJA Date: Thu, 23 Feb 2017 20:42:45 +0000 Subject: [PATCH] Allow building with the old (Gauge) behaviour by defining PROCDISPLAY_USEGAUGE. Start fleshing out the use of the graph class. Allow defining PROCDISPLAY_SINGLEGRAPH to test with a single graph instead of one per core. git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@53872 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- workbench/system/SysMon/main.c | 27 ++++++++++++++++++++++++++- workbench/system/SysMon/processor.c | 32 ++++++++++++++++++++++++++++++++ workbench/system/SysMon/sysmon_intern.h | 17 +++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/workbench/system/SysMon/main.c b/workbench/system/SysMon/main.c index 91868a7fe4..b911b84a89 100644 --- a/workbench/system/SysMon/main.c +++ b/workbench/system/SysMon/main.c @@ -240,21 +240,46 @@ BOOL CreateApplication(struct SysMonData * smdata) /* Adding cpu usage gauges */ cpucolgroup = ColGroup(processorcount + 2), End; +#if !defined(PROCDISPLAY_USEGAUGE) + smdata->cpureadhooks = AllocVec(sizeof(struct Hook) * processorcount, MEMF_ANY | MEMF_CLEAR); +#endif +#if !defined(PROCDISPLAY_SINGLEGRAPH) smdata->cpuusagegauges = AllocVec(sizeof(Object *) * processorcount, MEMF_ANY | MEMF_CLEAR); +#endif DoMethod(cpucolgroup, OM_ADDMEMBER, (IPTR)HVSpace); +#if defined(PROCDISPLAY_SINGLEGRAPH) + smdata->cpuusagegauge = GraphObject, MUIA_Graph_InfoText, (IPTR) "CPU --\n--.- %", + End; +#endif + for (i = 0; i < processorcount; i++) { -#if (0) +#if defined(PROCDISPLAY_USEGAUGE) smdata->cpuusagegauges[i] = GaugeObject, GaugeFrame, MUIA_Gauge_InfoText, (IPTR) "CPU --\n--.- %", MUIA_Gauge_Horiz, FALSE, MUIA_Gauge_Current, 0, MUIA_Gauge_Max, 1000, End; #else + Object *procGuage; + APTR procDataSource; +#if !defined(PROCDISPLAY_SINGLEGRAPH) smdata->cpuusagegauges[i] = GraphObject, MUIA_Graph_InfoText, (IPTR) "CPU --\n--.- %", End; + procGuage = smdata->cpuusagegauges[i]; + procDataSource = (APTR)DoMethod(procGuage, MUIM_Graph_GetSourceHandle, 0); +#else + procGuage = smdata->cpuusagegauge; + procDataSource = (APTR)DoMethod(procGuage, MUIM_Graph_GetSourceHandle, i); +#endif + smdata->cpureadhooks[i].h_Entry = (APTR)GraphReadProcessorValueFunc; + smdata->cpureadhooks[i].h_Data = 0; + + DoMethod(procGuage, MUIM_Graph_SetSourceAttrib, procDataSource, MUIV_Graph_Source_ReadHook, &smdata->cpureadhooks[i]); #endif +#if !defined(PROCDISPLAY_SINGLEGRAPH) DoMethod(cpucolgroup, OM_ADDMEMBER, smdata->cpuusagegauges[i]); +#endif } DoMethod(cpucolgroup, OM_ADDMEMBER, (IPTR)HVSpace); diff --git a/workbench/system/SysMon/processor.c b/workbench/system/SysMon/processor.c index 509d22b586..df4f27f8dc 100644 --- a/workbench/system/SysMon/processor.c +++ b/workbench/system/SysMon/processor.c @@ -20,6 +20,20 @@ static IPTR processorcount; APTR ProcessorBase; #define SIMULATE_USAGE_FREQ 0 +#if !defined(PROCDISPLAY_USEGAUGE) +AROS_UFH3(IPTR, GraphReadProcessorValueFunc, + AROS_UFHA(struct Hook *, procHook, A0), + AROS_UFHA(IPTR *, storage, A2), + AROS_UFHA(void *, unused, A1)) +{ + AROS_USERFUNC_INIT + + return TRUE; + + AROS_USERFUNC_EXIT +} +#endif + /* Processor functions */ static BOOL InitProcessor(struct SysMonData *smdata) { @@ -60,6 +74,9 @@ VOID UpdateProcessorInformation(struct SysMonData * smdata) { ULONG i; TEXT buffer[128]; +#if defined(PROCDISPLAY_SINGLEGRAPH) + ULONG totaluse; +#endif for (i = 0; i < processorcount; i++) { @@ -84,12 +101,27 @@ VOID UpdateProcessorInformation(struct SysMonData * smdata) frequency /= 1000000; #endif +#if !defined(PROCDISPLAY_SINGLEGRAPH) __sprintf(buffer, "CPU %d\n%d.%d %% ", i, usage / 10, usage % 10); +#endif +#if (PROCDISPLAY_USEGAUGE) set(smdata->cpuusagegauges[i], MUIA_Gauge_Current, usage); + set(smdata->cpuusagegauges[i], MUIA_Gauge_InfoText, (IPTR)buffer); +#else +#if !defined(PROCDISPLAY_SINGLEGRAPH) set(smdata->cpuusagegauges[i], MUIA_Graph_InfoText, (IPTR)buffer); +#else + totaluse += usage; +#endif +#endif __sprintf(buffer, "%d MHz", (ULONG)frequency); set(smdata->cpufreqvalues[i], MUIA_Text_Contents, (IPTR)buffer); } +#if defined(PROCDISPLAY_SINGLEGRAPH) + totaluse /= processorcount; + __sprintf(buffer, "CPU %d\n%d.%d %% ", i, totaluse / 10, totaluse % 10); + set(smdata->cpuusagegauge, MUIA_Graph_InfoText, (IPTR)buffer); +#endif } VOID UpdateProcessorStaticInformation(struct SysMonData * smdata) diff --git a/workbench/system/SysMon/sysmon_intern.h b/workbench/system/SysMon/sysmon_intern.h index 80c2372130..f32de4fb7a 100644 --- a/workbench/system/SysMon/sysmon_intern.h +++ b/workbench/system/SysMon/sysmon_intern.h @@ -12,6 +12,9 @@ #include "tasks.h" +//#define PROCDISPLAY_USEGAUGE +//#define PROCDISPLAY_SINGLEGRAPH + #define MEMORY_RAM 0 #define MEMORY_CHIP 1 #define MEMORY_FAST 2 @@ -20,6 +23,13 @@ #define SYSMON_TABCOUNT 3 +#if !defined(PROCDISPLAY_USEGAUGE) +AROS_UFP3(IPTR, GraphReadProcessorValueFunc, + AROS_UFPA(struct Hook *, procHook, A0), + AROS_UFPA(IPTR *, storage, A2), + AROS_UFPA(void *, unused, A1)); +#endif + struct SysMonData { struct Task *sm_Task; @@ -36,7 +46,14 @@ struct SysMonData Object *tasklist; Object *tasklistinfo; +#if defined (PROCDISPLAY_SINGLEGRAPH) + Object *cpuusagegauge; +#else Object **cpuusagegauges; +#endif +#if !defined(PROCDISPLAY_USEGAUGE) + struct Hook *cpureadhooks; +#endif Object **cpufreqlabels; Object **cpufreqvalues; -- 2.11.4.GIT