Do not keep reparsing plasmarc configuration
KConfig->reparseConfiguration is expensive. It throws away our cached values. The Units constructor was calling this every single time. Units is created a _lot_; once per applet and once per FrameSVGItem. This meant we were reloading the same config ~100 times on startup for no reason. Perf showed this as being ~5% of the total startup time. - 7.47% 0.00% plasmashell libKF5ConfigCore.so.5.5.0 [.] KConfig::reparseConfiguration() - KConfig::reparseConfiguration() + 66.51% Units::settingsFileChanged(QString const&) + 25.95% KConfig::KConfig(QString const&, QFlags<KConfig::OpenFlag>, QStandardPaths::StandardLocation) + 3.93% KDesktopFile::KDesktopFile(QString const&) + 3.61% Units::settingsFileChanged(QString const&) Change-Id: Ia70b7001ba473c8063e6c999b8e4233ea5b206f5
This commit is contained in:
parent
aac89104bd
commit
901cc3e159
@ -1,6 +1,7 @@
|
||||
/***************************************************************************
|
||||
* Copyright 2013 Marco Martin <mart@kde.org> *
|
||||
* Copyright 2014 Sebastian Kügler <sebas@kde.org> *
|
||||
* Copyright 2014 David Edmundson <davidedmunsdon@kde.org> *
|
||||
* *
|
||||
* 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 *
|
||||
@ -59,8 +60,8 @@ Units::Units(QObject *parent)
|
||||
connect(KDirWatch::self(), &KDirWatch::dirty, this, &Units::settingsFileChanged);
|
||||
// ... but also remove/recreate cycles, like KConfig does it
|
||||
connect(KDirWatch::self(), &KDirWatch::created, this, &Units::settingsFileChanged);
|
||||
// Trigger configuration read
|
||||
settingsFileChanged(plasmarc);
|
||||
// read configuration
|
||||
updatePlasmaRCSettings();
|
||||
}
|
||||
|
||||
Units::~Units()
|
||||
@ -70,18 +71,24 @@ Units::~Units()
|
||||
void Units::settingsFileChanged(const QString &file)
|
||||
{
|
||||
if (file.endsWith(plasmarc)) {
|
||||
|
||||
KConfigGroup cfg = KConfigGroup(KSharedConfig::openConfig(plasmarc), groupName);
|
||||
cfg.config()->reparseConfiguration();
|
||||
const int longDuration = cfg.readEntry("longDuration", defaultLongDuration);
|
||||
|
||||
if (longDuration != m_longDuration) {
|
||||
m_longDuration = longDuration;
|
||||
emit durationChanged();
|
||||
}
|
||||
KSharedConfigPtr cfg = KSharedConfig::openConfig(plasmarc);
|
||||
cfg->reparseConfiguration();
|
||||
updatePlasmaRCSettings();
|
||||
}
|
||||
}
|
||||
|
||||
void Units::updatePlasmaRCSettings()
|
||||
{
|
||||
KConfigGroup cfg = KConfigGroup(KSharedConfig::openConfig(plasmarc), groupName);
|
||||
const int longDuration = cfg.readEntry("longDuration", defaultLongDuration);
|
||||
|
||||
if (longDuration != m_longDuration) {
|
||||
m_longDuration = longDuration;
|
||||
emit durationChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Units::iconLoaderSettingsChanged()
|
||||
{
|
||||
// These are not scaled, we respect the user's setting over dpi scaling
|
||||
|
@ -164,11 +164,12 @@ Q_SIGNALS:
|
||||
|
||||
private Q_SLOTS:
|
||||
void iconLoaderSettingsChanged();
|
||||
void settingsFileChanged(const QString &settings);
|
||||
void settingsFileChanged(const QString &file);
|
||||
|
||||
private:
|
||||
void updateDevicePixelRatio();
|
||||
void updateSpacing();
|
||||
void updatePlasmaRCSettings();
|
||||
/**
|
||||
* @return The dpi-adjusted size for a given icon size
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user