possible fix #75

I've added 'optimize' option (by default true). If it options is set
then sources will be checked if they are required (with dependencies if
any). And if they are not required they will be dropped by using common
mechanism.

Please note that if this option enabled the following features (at the
    moment) will be unavailable:

* key request from context menu (from configuration interface it still works)
* notifications event if sources on which notification is not connected

I suppose this commit will increase performance in about 4-5 times.
This commit is contained in:
2016-02-05 11:08:09 +03:00
parent 54e1545bb1
commit d856fa8e97
23 changed files with 522 additions and 374 deletions

View File

@ -21,14 +21,10 @@
#include "awkeys.h"
AWDataEngineAggregator::AWDataEngineAggregator(QObject *parent,
const int interval)
AWDataEngineAggregator::AWDataEngineAggregator(QObject *parent)
: QObject(parent)
{
qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
setInterval(interval);
initDataEngines();
}
@ -36,10 +32,17 @@ AWDataEngineAggregator::~AWDataEngineAggregator()
{
qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
clear();
}
void AWDataEngineAggregator::clear()
{
// disconnect sources first
disconnectSources();
m_dataEngines.clear();
delete m_consumer;
m_consumer = nullptr;
}
@ -51,11 +54,27 @@ void AWDataEngineAggregator::disconnectSources()
}
void AWDataEngineAggregator::setInterval(const int _interval)
void AWDataEngineAggregator::initDataEngines(const int interval)
{
qCDebug(LOG_AW) << "Interval" << _interval;
qCDebug(LOG_AW) << "Init dataengines with interval" << interval;
m_interval = _interval;
m_consumer = new Plasma::DataEngineConsumer();
m_dataEngines[QString("systemmonitor")]
= m_consumer->dataEngine(QString("systemmonitor"));
m_dataEngines[QString("extsysmon")]
= m_consumer->dataEngine(QString("extsysmon"));
m_dataEngines[QString("time")] = m_consumer->dataEngine(QString("time"));
// additional method required by systemmonitor structure
connect(m_dataEngines[QString("systemmonitor")],
&Plasma::DataEngine::sourceAdded,
[this, interval](const QString source) {
emit(deviceAdded(source));
m_dataEngines[QString("systemmonitor")]->connectSource(
source, parent(), interval);
});
return reconnectSources(interval);
}
@ -70,31 +89,13 @@ void AWDataEngineAggregator::dropSource(const QString source)
}
void AWDataEngineAggregator::reconnectSources()
void AWDataEngineAggregator::reconnectSources(const int interval)
{
qCDebug(LOG_AW) << "Reconnect sources with interval" << interval;
m_dataEngines[QString("systemmonitor")]->connectAllSources(parent(),
m_interval);
m_dataEngines[QString("extsysmon")]->connectAllSources(parent(),
m_interval);
interval);
m_dataEngines[QString("extsysmon")]->connectAllSources(parent(), interval);
m_dataEngines[QString("time")]->connectSource(QString("Local"), parent(),
1000);
}
void AWDataEngineAggregator::initDataEngines()
{
m_consumer = new Plasma::DataEngineConsumer();
m_dataEngines[QString("systemmonitor")]
= m_consumer->dataEngine(QString("systemmonitor"));
m_dataEngines[QString("extsysmon")]
= m_consumer->dataEngine(QString("extsysmon"));
m_dataEngines[QString("time")] = m_consumer->dataEngine(QString("time"));
// additional method required by systemmonitor structure
connect(m_dataEngines[QString("systemmonitor")],
&Plasma::DataEngine::sourceAdded, [this](const QString source) {
emit(deviceAdded(source));
m_dataEngines[QString("systemmonitor")]->connectSource(
source, parent(), m_interval);
});
}