summaryrefslogtreecommitdiffstats
path: root/src/shared-main-lib/cpustatus.cpp
blob: 5ad63a3218db3da672ef2ce71cc9644928bfccf1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Copyright (C) 2021 The Qt Company Ltd.
// Copyright (C) 2019 Luxoft Sweden AB
// Copyright (C) 2018 Pelagicore AG
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#include "cpustatus.h"

#include <QThread>

using namespace Qt::StringLiterals;

/*!
    \qmltype CpuStatus
    \inqmlmodule QtApplicationManager
    \ingroup common-instantiatable
    \brief Provides information on the CPU status.

    As the name implies, CpuStatus provides information on the status of the CPU. Its property
    values are updated whenever the method update() is called.

    You can use this component as a MonitorModel data source if you want to plot its previous
    values over time.

    \qml
    import QtQuick
    import QtApplicationManager
    ...
    MonitorModel {
        CpuStatus {}
    }
    \endqml

    You can also use it alongside a Timer for instance, when you're only interested in its current
    value.

    \qml
    import QtQuick
    import QtApplicationManager
    ...
    CpuStatus { id: cpuStatus }
    Timer {
        interval: 500
        running: true
        repeat: true
        onTriggered: cpuStatus.update()
    }
    Text {
        property string loadPercent: Number(cpuStatus.cpuLoad * 100).toLocaleString(Qt.locale("en_US"), 'f', 1)
        text: "cpuLoad: " + loadPercent + "%"
    }
    \endqml
*/

QT_USE_NAMESPACE_AM

CpuStatus::CpuStatus(QObject *parent)
    : QObject(parent)
    , m_cpuReader(new CpuReader)
    , m_cpuLoad(0)
{
}

/*!
    \qmlproperty real CpuStatus::cpuLoad
    \readonly

    Holds the overall system's CPU utilization at the point when update() was last called, as a
    value ranging from \c 0 (inclusive, completely idle) to \c 1 (inclusive, fully busy).

    \sa update
*/
qreal CpuStatus::cpuLoad() const
{
    return m_cpuLoad;
}

/*!
    \qmlproperty int CpuStatus::cpuCores
    \readonly

    The number of physical CPU cores that are installed on the system.
*/
int CpuStatus::cpuCores() const
{
    return QThread::idealThreadCount();
}

/*!
    \qmlmethod CpuStatus::update

    Updates the cpuLoad property.

    \sa cpuLoad
*/
void CpuStatus::update()
{
    qreal newLoad = m_cpuReader->readLoadValue();
    if (!qFuzzyCompare(newLoad, m_cpuLoad)) {
        m_cpuLoad = newLoad;
        emit cpuLoadChanged();
    }
}

/*!
    \qmlproperty list<string> CpuStatus::roleNames
    \readonly

    Names of the roles provided by CpuStatus when used as a MonitorModel data source.

    \sa MonitorModel
*/
QStringList CpuStatus::roleNames() const
{
    return { u"cpuLoad"_s };
}

#include "moc_cpustatus.cpp"