File indexing completed on 2024-04-14 05:46:47

0001 /*
0002     SPDX-FileCopyrightText: 2006 Bram Schoenmakers <bramschoenmakers@kde.nl>
0003     SPDX-FileCopyrightText: 2006 Tom Albers <toma@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "rsistatitem.h"
0009 
0010 #include <QLabel>
0011 
0012 const int totalarraysize = 60 * 60 * 24;
0013 
0014 RSIStatItem::RSIStatItem(const QString &description, const QVariant &init)
0015 {
0016     m_description = new QLabel(description, nullptr);
0017     m_value = init;
0018     m_init = init;
0019 }
0020 
0021 RSIStatItem::~RSIStatItem()
0022 {
0023 }
0024 
0025 void RSIStatItem::addDerivedItem(RSIStat stat)
0026 {
0027     m_derived += stat;
0028 }
0029 
0030 void RSIStatItem::reset()
0031 {
0032     m_value = m_init;
0033 }
0034 
0035 RSIStatBitArrayItem::RSIStatBitArrayItem(const QString &description, const QVariant &init, int size)
0036     : RSIStatItem(description, init)
0037     , m_size(size)
0038     , m_counter(0)
0039 {
0040     Q_ASSERT(size <= totalarraysize);
0041 
0042     m_end = 0;
0043     m_begin = totalarraysize - size;
0044 }
0045 
0046 RSIStatBitArrayItem::~RSIStatBitArrayItem()
0047 {
0048 }
0049 
0050 void RSIStatBitArrayItem::reset()
0051 {
0052     RSIStatItem::reset();
0053     RSIGlobals::instance()->resetUsage();
0054 
0055     m_end = 0;
0056     m_begin = totalarraysize - m_size;
0057     m_counter = 0;
0058 }
0059 
0060 void RSIStatBitArrayItem::setActivity()
0061 {
0062     QBitArray *array = RSIGlobals::instance()->usageArray();
0063 
0064     if (!array->testBit(m_begin))
0065         ++m_counter;
0066 
0067     array->setBit(m_end);
0068 
0069     Q_ASSERT(m_counter <= m_size);
0070 
0071     m_value = QVariant(100.0 * (double)(m_counter) / (double)(m_size));
0072     m_begin = (m_begin + 1) % totalarraysize;
0073     m_end = (m_end + 1) % totalarraysize;
0074 }
0075 
0076 void RSIStatBitArrayItem::setIdle()
0077 {
0078     QBitArray *array = RSIGlobals::instance()->usageArray();
0079 
0080     if (array->testBit(m_begin))
0081         m_counter > 0 ? --m_counter : m_counter;
0082 
0083     array->clearBit(m_end);
0084 
0085     Q_ASSERT(m_counter <= m_size);
0086 
0087     m_value = QVariant(100.0 * (double)(m_counter) / (double)(m_size));
0088     m_begin = (m_begin + 1) % totalarraysize;
0089     m_end = (m_end + 1) % totalarraysize;
0090 }