mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Measure: Tweaked Max/Min value logging.
This commit is contained in:
parent
93c1cf0411
commit
940b4ff55e
@ -61,7 +61,7 @@ static const double g_TblScale[2][4] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const int MEDIAN_SIZE = 7;
|
const int MEDIAN_SIZE = 3;
|
||||||
|
|
||||||
extern CRainmeter* Rainmeter;
|
extern CRainmeter* Rainmeter;
|
||||||
|
|
||||||
@ -440,32 +440,6 @@ bool CMeasure::Update()
|
|||||||
if (m_UpdateCounter < m_UpdateDivider) return false;
|
if (m_UpdateCounter < m_UpdateDivider) return false;
|
||||||
m_UpdateCounter = 0;
|
m_UpdateCounter = 0;
|
||||||
|
|
||||||
// If we're logging the maximum value of the measure, check if
|
|
||||||
// the new value is greater than the old one, and update if necessary.
|
|
||||||
if (m_LogMaxValue)
|
|
||||||
{
|
|
||||||
if (m_MedianMaxValues.empty())
|
|
||||||
{
|
|
||||||
m_MedianMaxValues.resize(MEDIAN_SIZE, 0);
|
|
||||||
m_MedianMinValues.resize(MEDIAN_SIZE, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_MedianMaxValues[m_MedianPos] = m_Value;
|
|
||||||
m_MedianMinValues[m_MedianPos] = m_Value;
|
|
||||||
++m_MedianPos;
|
|
||||||
m_MedianPos %= MEDIAN_SIZE;
|
|
||||||
|
|
||||||
std::vector<double> medianArray;
|
|
||||||
|
|
||||||
medianArray = m_MedianMaxValues;
|
|
||||||
std::sort(medianArray.begin(), medianArray.end());
|
|
||||||
m_MaxValue = max(m_MaxValue, medianArray[MEDIAN_SIZE / 2]);
|
|
||||||
|
|
||||||
medianArray = m_MedianMinValues;
|
|
||||||
std::sort(medianArray.begin(), medianArray.end());
|
|
||||||
m_MinValue = min(m_MinValue, medianArray[MEDIAN_SIZE / 2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call derived method to update value
|
// Call derived method to update value
|
||||||
UpdateValue();
|
UpdateValue();
|
||||||
|
|
||||||
@ -485,12 +459,33 @@ bool CMeasure::Update()
|
|||||||
m_AveragePos %= averageValuesSize;
|
m_AveragePos %= averageValuesSize;
|
||||||
|
|
||||||
// Calculate the average value
|
// Calculate the average value
|
||||||
m_Value = 0;
|
double value = 0;
|
||||||
for (size_t i = 0; i < averageValuesSize; ++i)
|
for (size_t i = 0; i < averageValuesSize; ++i)
|
||||||
{
|
{
|
||||||
m_Value += m_AverageValues[i];
|
value += m_AverageValues[i];
|
||||||
}
|
}
|
||||||
m_Value /= (double)averageValuesSize;
|
m_Value = value / (double)averageValuesSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're logging the maximum value of the measure, check if
|
||||||
|
// the new value is greater than the old one, and update if necessary.
|
||||||
|
if (m_LogMaxValue)
|
||||||
|
{
|
||||||
|
if (m_MedianValues.empty())
|
||||||
|
{
|
||||||
|
m_MedianValues.resize(MEDIAN_SIZE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_MedianValues[m_MedianPos] = m_Value;
|
||||||
|
++m_MedianPos;
|
||||||
|
m_MedianPos %= MEDIAN_SIZE;
|
||||||
|
|
||||||
|
auto medianArray = m_MedianValues;
|
||||||
|
std::sort(&medianArray[0], &medianArray[MEDIAN_SIZE]);
|
||||||
|
|
||||||
|
double medianValue = medianArray[MEDIAN_SIZE / 2];
|
||||||
|
m_MaxValue = max(m_MaxValue, medianValue);
|
||||||
|
m_MinValue = min(m_MinValue, medianValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_MeterWindow)
|
if (m_MeterWindow)
|
||||||
|
@ -91,8 +91,7 @@ protected:
|
|||||||
std::vector<std::wstring> m_Substitute; // Vec of substitute strings
|
std::vector<std::wstring> m_Substitute; // Vec of substitute strings
|
||||||
bool m_RegExpSubstitute;
|
bool m_RegExpSubstitute;
|
||||||
|
|
||||||
std::vector<double> m_MedianMaxValues; // The values for the median filtering
|
std::vector<double> m_MedianValues; // The values for the median filtering
|
||||||
std::vector<double> m_MedianMinValues; // The values for the median filtering
|
|
||||||
UINT m_MedianPos; // Position in the median array, where the new value is placed
|
UINT m_MedianPos; // Position in the median array, where the new value is placed
|
||||||
|
|
||||||
std::vector<double> m_AverageValues;
|
std::vector<double> m_AverageValues;
|
||||||
|
@ -450,14 +450,19 @@ void CMeasureNet::ReadOptions(CConfigParser& parser, const WCHAR* section, NET n
|
|||||||
Rainmeter->SetNetworkStatisticsTimer();
|
Rainmeter->SetNetworkStatisticsTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxValue == 0)
|
if (maxValue == 0.0)
|
||||||
{
|
{
|
||||||
m_MaxValue = 1;
|
if (!m_LogMaxValue)
|
||||||
|
{
|
||||||
|
m_MaxValue = 1.0;
|
||||||
m_LogMaxValue = true;
|
m_LogMaxValue = true;
|
||||||
|
m_MedianValues.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_MaxValue = maxValue / 8;
|
m_MaxValue = maxValue / 8;
|
||||||
|
m_LogMaxValue = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,14 +193,12 @@ void CMeasurePlugin::ReadOptions(CConfigParser& parser, const WCHAR* section)
|
|||||||
{
|
{
|
||||||
m_MaxValue = 1.0;
|
m_MaxValue = 1.0;
|
||||||
m_LogMaxValue = true;
|
m_LogMaxValue = true;
|
||||||
|
m_MedianValues.clear();
|
||||||
// Plugin options changed, so reset
|
|
||||||
m_MedianMaxValues.clear();
|
|
||||||
m_MedianMinValues.clear();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_MaxValue = maxValue;
|
m_MaxValue = maxValue;
|
||||||
|
m_LogMaxValue = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user