Add powerman module

pull/9/head
reionwong 4 years ago
parent ea6365982e
commit df45bdb571

@ -0,0 +1,27 @@
name: Build
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Source
uses: actions/checkout@v2
- name: Update repository
run: sudo apt-get update -y
- name: Install the basic dev packages
run: sudo apt-get install -y equivs curl git devscripts lintian build-essential automake autotools-dev cmake g++
- name: Install build dependencies
run: sudo mk-build-deps -i -t "apt-get --yes" -r
- name: Build
run: mkdir build; cd build; cmake .. ; make -j$(nproc);

@ -24,3 +24,4 @@ add_subdirectory(session)
add_subdirectory(settings-daemon) add_subdirectory(settings-daemon)
add_subdirectory(shutdown-ui) add_subdirectory(shutdown-ui)
add_subdirectory(xembed-sni-proxy) add_subdirectory(xembed-sni-proxy)
add_subdirectory(powerman)

@ -0,0 +1,26 @@
project(cutefish-powerman)
set(TARGET cutefish-powerman)
set(SOURCES
main.cpp
application.cpp
cpu/cpuitem.cpp
cpu/cpumanagement.cpp
)
qt5_add_dbus_adaptor(DBUS_SOURCES
cpu/org.cutefish.CPUManagement.xml
cpu/cpumanagement.h CPUManagement)
set_source_files_properties(${DBUS_SOURCES} PROPERTIES SKIP_AUTOGEN ON)
add_executable(${TARGET} ${SOURCES} ${DBUS_SOURCES})
target_link_libraries(${TARGET}
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::Quick
Qt5::DBus
Qt5::X11Extras
)
install(TARGETS ${TARGET} DESTINATION /usr/bin)

@ -0,0 +1,28 @@
/*
* Copyright (C) 2021 CutefishOS Team.
*
* Author: Reion Wong <reionwong@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "application.h"
#include <QDBusConnection>
Application::Application(QObject *parent)
: QObject(parent)
, m_cpuManagement(new CPUManagement)
{
QDBusConnection::sessionBus().registerService(QStringLiteral("org.cutefish.PowerManager"));
}

@ -0,0 +1,37 @@
/*
* Copyright (C) 2021 CutefishOS Team.
*
* Author: Reion Wong <reionwong@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef APPLICATION_H
#define APPLICATION_H
#include <QObject>
#include "cpu/cpumanagement.h"
class Application : public QObject
{
Q_OBJECT
public:
explicit Application(QObject *parent = nullptr);
private:
CPUManagement *m_cpuManagement;
};
#endif // APPLICATION_H

@ -0,0 +1,57 @@
/*
* Copyright (C) 2021 CutefishOS Team.
*
* Author: Reion Wong <reionwong@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "cpuitem.h"
#include <QFile>
#include <QDebug>
CpuItem::CpuItem(const QString &name, QObject *parent)
: QObject(parent)
, m_name(name)
{
}
bool CpuItem::setPolicy(const QString &value)
{
bool result = false;
QFile file(QString("/sys/devices/system/cpu/%1/cpufreq/scaling_governor").arg(m_name));
if (file.open(QIODevice::WriteOnly)) {
if (file.write(value.toLatin1()) != -1)
result = true;
file.close();
}
qDebug() << m_name << "set policy: " << value << result;
return result;
}
QString CpuItem::policy()
{
QString result;
QFile file(QString("/sys/devices/system/cpu/%1/cpufreq/scaling_governor").arg(m_name));
if (file.open(QIODevice::ReadOnly)) {
result = file.readAll().simplified();
file.close();
}
return result;
}

@ -0,0 +1,41 @@
/*
* Copyright (C) 2021 CutefishOS Team.
*
* Author: Reion Wong <reionwong@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CPUITEM_H
#define CPUITEM_H
#include <QObject>
class CpuItem : public QObject
{
Q_OBJECT
public:
explicit CpuItem(const QString &name, QObject *parent = nullptr);
QString name();
bool setPolicy(const QString &value);
QString policy();
private:
QString m_name;
};
#endif // CPUITEM_H

@ -0,0 +1,93 @@
/*
* Copyright (C) 2021 CutefishOS Team.
*
* Author: Reion Wong <reionwong@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "cpumanagement.h"
#include "cpumanagementadaptor.h"
#include <QDebug>
#include <QDir>
#include <QFile>
CPUManagement::CPUManagement(QObject *parent)
: QObject(parent)
, m_currentMode(PowerSave)
{
new CPUManagementAdaptor(this);
QDBusConnection::sessionBus().registerObject(QStringLiteral("/CPUManagement"), this);
// Init cpu items.
QDir dir("/sys/devices/system/cpu");
QStringList dirList = dir.entryList(QDir::Dirs | QDir::NoDot | QDir::NoDotAndDotDot);
for (const QString &dirName : dirList) {
if (dirName.startsWith("cpu") && dirName[3].isNumber()) {
m_items.append(new CpuItem(dirName));
}
}
// Init mode
bool performance = true;
for (CpuItem *item : m_items) {
if (item->policy() == "powersave")
performance = false;
}
if (performance)
m_currentMode = CPUManagement::Performance;
setMode(PowerSave);
}
void CPUManagement::setMode(int value)
{
CPUManagement::Mode mode = static_cast<CPUManagement::Mode>(value);
QString modeString = modeConvertToString(mode);
if (modeString.isEmpty() || mode == m_currentMode)
return;
for (CpuItem *item : m_items) {
item->setPolicy(modeString);
}
m_currentMode = mode;
emit modeChanged();
}
int CPUManagement::mode()
{
return m_currentMode;
}
QString CPUManagement::modeConvertToString(CPUManagement::Mode mode)
{
QString result;
switch (mode) {
case CPUManagement::PowerSave:
result = "powersave";
break;
case CPUManagement::Performance:
result = "performance";
break;
default:
break;
}
return result;
}

@ -0,0 +1,53 @@
/*
* Copyright (C) 2021 CutefishOS Team.
*
* Author: Reion Wong <reionwong@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CPUMANAGEMENT_H
#define CPUMANAGEMENT_H
#include <QObject>
#include "cpuitem.h"
class CPUManagement : public QObject
{
Q_OBJECT
Q_PROPERTY(int mode READ mode WRITE setMode NOTIFY modeChanged)
public:
enum Mode {
PowerSave = 0,
Performance,
Normal,
};
explicit CPUManagement(QObject *parent = nullptr);
void setMode(int i);
int mode();
QString modeConvertToString(Mode mode);
signals:
void modeChanged();
private:
Mode m_currentMode;
QList<CpuItem *> m_items;
};
#endif // CPUMANAGEMENT_H

@ -0,0 +1,10 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.cutefish.CPUManagement">
<property name="mode" type="i" access="read"/>
<method name="setMode">
<arg name="value" type="i" direction="in"/>
</method>
</interface>
</node>

@ -0,0 +1,29 @@
/*
* Copyright (C) 2021 CutefishOS Team.
*
* Author: Reion Wong <reionwong@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QCoreApplication>
#include "application.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Application app;
// a.setQuitOnLastWindowClosed(false);
return a.exec();
}

@ -132,6 +132,7 @@ void ProcessManager::startDaemonProcess()
{ {
QList<QPair<QString, QStringList>> list; QList<QPair<QString, QStringList>> list;
list << qMakePair(QString("cutefish-settings-daemon"), QStringList()); list << qMakePair(QString("cutefish-settings-daemon"), QStringList());
list << qMakePair(QString("cutefish-powerman"), QStringList());
list << qMakePair(QString("cutefish-xembedsniproxy"), QStringList()); list << qMakePair(QString("cutefish-xembedsniproxy"), QStringList());
for (QPair<QString, QStringList> pair : list) { for (QPair<QString, QStringList> pair : list) {

Loading…
Cancel
Save