From 986d0cfef133d92b5b8dd2110bbcd849a9e83e79 Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Wed, 20 Jul 2022 11:29:41 +0200
Subject: [PATCH] [CPUMeter] Added stack and heap statistics

---
 src/shared/diagnostic/CpuMeter/CpuMeter.cpp   |  6 +++++-
 src/shared/diagnostic/CpuMeter/CpuMeterData.h | 12 ++++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/shared/diagnostic/CpuMeter/CpuMeter.cpp b/src/shared/diagnostic/CpuMeter/CpuMeter.cpp
index 20da1e5af..57990c49f 100644
--- a/src/shared/diagnostic/CpuMeter/CpuMeter.cpp
+++ b/src/shared/diagnostic/CpuMeter/CpuMeter.cpp
@@ -45,7 +45,11 @@ static volatile unsigned int update = 0;
 CpuMeterData getCpuStats()
 {
     Lock<FastMutex> l(utilizationMutex);
-    return CpuMeterData(TimestampTimer::getTimestamp(), utilization.getStats());
+    return CpuMeterData(TimestampTimer::getTimestamp(), utilization.getStats(),
+                        MemoryProfiling::getAbsoluteFreeHeap(),
+                        MemoryProfiling::getCurrentFreeHeap(),
+                        MemoryProfiling::getAbsoluteFreeStack(),
+                        MemoryProfiling::getCurrentFreeStack());
 }
 
 void resetCpuStats() { utilization.reset(); }
diff --git a/src/shared/diagnostic/CpuMeter/CpuMeterData.h b/src/shared/diagnostic/CpuMeter/CpuMeterData.h
index f091425f9..a28b62a3a 100644
--- a/src/shared/diagnostic/CpuMeter/CpuMeterData.h
+++ b/src/shared/diagnostic/CpuMeter/CpuMeterData.h
@@ -36,12 +36,20 @@ struct CpuMeterData
     float stdDev       = 0;  ///< Standard deviation of dataset.
     uint32_t nSamples  = 0;  ///< Number of samples.
 
+    uint32_t minFreeHeap  = 0;
+    uint32_t freeHeap     = 0;
+    uint32_t minFreeStack = 0;
+    uint32_t freeStack    = 0;
+
     CpuMeterData() {}
 
-    explicit CpuMeterData(uint64_t timestamp, StatsResult stats)
+    explicit CpuMeterData(uint64_t timestamp, StatsResult stats,
+                          uint32_t freeHeap, uint32_t minFreeHeap,
+                          uint32_t minFreeStack, uint32_t freeStack)
         : timestamp(timestamp), minValue(stats.minValue),
           maxValue(stats.maxValue), mean(stats.mean), stdDev(stats.stdDev),
-          nSamples(stats.nSamples)
+          nSamples(stats.nSamples), minFreeHeap(minFreeHeap),
+          freeHeap(freeHeap), minFreeStack(minFreeStack), freeStack(freeStack)
     {
     }
 
-- 
GitLab