Measure uasync CPU load and display it in desktop and Android GUIs
Sample thread CPU usage without waking idle loops, expose a one-second moving average, and refresh compact GUI indicators at 3 Hz while visible on Android. Add load and bridge regression coverage, streaming notes, and task list cleanup.
This commit is contained in:
1 parent
8bd6e4fb2d
commit
5a9e61164b
25 files changed
+692
-587
No files matched your search
@@ -171,6 +171,18 @@ MainWindow::MainWindow(QWidget *parent, DbManager* db, const QString& cfgPath,
|
||||
setupConnects();
|
||||
}
|
||||
connect(m_autoPlayTimer, &QTimer::timeout, this, &MainWindow::autoPlayTimerTick);
|
||||
m_cpuLoadTimer = new QTimer(this);
|
||||
m_cpuLoadTimer->setTimerType(Qt::PreciseTimer);
|
||||
connect(m_cpuLoadTimer, &QTimer::timeout, this, [this] {
|
||||
auto* inst = gui_bridge_get_inst();
|
||||
if (!m_node || !m_node->isRunning() || !inst || !gui_bridge_is_uasync_ready()) {
|
||||
m_cpuLoadPending = false; m_channelList->setCpuLoad(0); return;
|
||||
}
|
||||
if (m_cpuLoadPending) return;
|
||||
m_cpuLoadPending = gui_bridge_request_cpu_load() != 0;
|
||||
});
|
||||
m_cpuLoadTimer->start(333);
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_SYS, "desktop CPU indicator polling started: period=333ms");
|
||||
|
||||
#ifndef _WIN32
|
||||
std::signal(SIGINT, unixSignalHandler);
|
||||
@@ -183,6 +195,9 @@ MainWindow::MainWindow(QWidget *parent, DbManager* db, const QString& cfgPath,
|
||||
|
||||
MainWindow::~MainWindow() {
|
||||
s_mainWindow = nullptr;
|
||||
m_cpuLoadTimer->stop();
|
||||
gui_bridge_set_cpu_load_cb(nullptr);
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_SYS, "desktop CPU indicator polling stopped");
|
||||
if (m_messageNotification) m_messageNotification->dismiss("shutdown");
|
||||
m_messageNotification.reset();
|
||||
delete AvatarManager::instance();
|
||||
@@ -407,6 +422,11 @@ void MainWindow::setupSoundFromConfig() {
|
||||
|
||||
void MainWindow::setupBridgeCallbacks() {
|
||||
s_mainWindow = this;
|
||||
gui_bridge_set_cpu_load_cb([](int percent) {
|
||||
if (!s_mainWindow) return;
|
||||
s_mainWindow->m_cpuLoadPending = false;
|
||||
s_mainWindow->m_channelList->setCpuLoad(percent);
|
||||
});
|
||||
gui_bridge_set_member_files_response_cb([](const uint8_t* data, int length) {
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "member_files: GUI response route bytes=%d browser=%d",
|
||||
length, (int)(s_mainWindow && s_mainWindow->m_fileBrowser));
|
||||
@@ -554,6 +574,8 @@ void MainWindow::setupBridgeCallbacks() {
|
||||
gui_bridge_set_network_changed_cb([](int type) {
|
||||
if (!s_mainWindow) return;
|
||||
if (type == 13) {
|
||||
s_mainWindow->m_cpuLoadPending = false;
|
||||
s_mainWindow->m_channelList->setCpuLoad(0);
|
||||
s_mainWindow->m_accountList->model()->setRadioState(0, false, false);
|
||||
s_mainWindow->m_messageList->clearDmCallRoute();
|
||||
s_mainWindow->m_channelList->clearDmPresence();
|
||||
|
||||
Reference in new issue
Block a user