shift-shell/kcms/info/hardwareinfo.cpp
Devin Lin e147f98aea kcms: Move KCMs from plasma-settings
Having the KCMs that are mobile specific here makes more sense than in the settings application. Historically plasma-settings had a faster release cycle than Plasma, but the application is now moving to the Plasma release schedule and so it makes sense do this now.
2023-03-13 18:45:47 -07:00

89 lines
2.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
SPDX-FileCopyrightText: 2019 Jonah Brüchert <jbb@kaidan.im>
SPDX-FileCopyrightText: 2012-2019 Harald Sitter <sitter@kde.org>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "hardwareinfo.h"
#include <KCoreAddons>
#include <KFormat>
#include <solid/device.h>
#include <solid/processor.h>
#include <KLocalizedString>
#ifdef Q_OS_LINUX
#include <sys/sysinfo.h>
#elif defined(Q_OS_FREEBSD)
#include <sys/sysctl.h>
#include <sys/types.h>
#endif
HardwareInfo::HardwareInfo(QObject *parent)
: QObject(parent)
{
}
int HardwareInfo::processorCount() const
{
return Solid::Device::listFromType(Solid::DeviceInterface::Processor).count();
}
QString HardwareInfo::processors() const
{
const auto list = Solid::Device::listFromType(Solid::DeviceInterface::Processor);
// Format processor string
// Group by processor name
QMap<QString, int> processorMap;
for (const auto &device : list) {
const QString name = device.product();
auto it = processorMap.find(name);
if (it == processorMap.end()) {
processorMap.insert(name, 1);
} else {
++it.value();
}
}
// Create a formatted list of grouped processors
QStringList names;
names.reserve(processorMap.count());
for (auto it = processorMap.constBegin(); it != processorMap.constEnd(); ++it) {
const int count = it.value();
QString name = it.key();
name.replace(QStringLiteral("(TM)"), QChar(8482));
name.replace(QStringLiteral("(R)"), QChar(174));
name = name.simplified();
names.append(QStringLiteral("%1 × %2").arg(count).arg(name));
}
const QString processorLabel = names.join(QLatin1String(", "));
return processorLabel;
}
QString HardwareInfo::memory() const
{
qlonglong totalRam = -1;
#ifdef Q_OS_LINUX
struct sysinfo info {
};
if (sysinfo(&info) == 0)
// manpage "sizes are given as multiples of mem_unit bytes"
totalRam = qlonglong(info.totalram) * info.mem_unit;
#elif defined(Q_OS_FREEBSD)
/* Stuff for sysctl */
size_t len;
unsigned long memory;
len = sizeof(memory);
sysctlbyname("hw.physmem", &memory, &len, NULL, 0);
totalRam = memory;
#endif
return KFormat().formatByteSize(totalRam);
}