From 0bccfd4803791625e77d0cf08ae9b0507eeda2fa Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Thu, 14 May 2026 15:44:16 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20optimize=20XSettings1=20startup=20?= =?UTF-8?q?=E2=80=94=20remove=20Before=20constraint,=20skip=20redundant=20?= =?UTF-8?q?init,=20clean=20up=20debug=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove Before=org.dde.session.Daemon1.service so XSettings1 and dde-session-daemon start in parallel. On subsequent boots where scale factor is already persisted in DConfig, skip RandR monitor enumeration, Plymouth scaling, and Greeter Qt theme update (~100-350ms saved). Remove leftover debug code in getXcbAtomProperty that queried atom type names and hex-dumped binary property values on every call. Remove unnecessary isServiceRegistered guard in DSMRegister. Add startup timing logs (qWarning level) for future profiling. 移除对 dde-session-daemon 的 Before 排序约束,使 XSettings1 和 dde-session-daemon 可以并行启动。后续登录时跳过 RandR 枚举、Plymouth 缩放和 Greeter 更新 (节省约 100-350ms)。清理 getXcbAtomProperty 中的调试遗留代码(每次读取属性 都查询原子类型名称并 hex 转储二进制值)。移除 DSMRegister 中不必要的 isServiceRegistered 检查。添加启动计时日志用于性能分析。 Log: perf: optimize XSettings1 startup — remove Before constraint, skip redundant init, clean up debug code Change-Id: I2b5f4e9404bc2af10e077d936698a2b2569d2a8e --- src/plugin-qt/xsettings/impl/xsettingsmanager.cpp | 14 ++++++++++++-- .../misc/org.deepin.dde.XSettings1.service | 2 -- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/plugin-qt/xsettings/impl/xsettingsmanager.cpp b/src/plugin-qt/xsettings/impl/xsettingsmanager.cpp index b2acb39d..2263d581 100644 --- a/src/plugin-qt/xsettings/impl/xsettingsmanager.cpp +++ b/src/plugin-qt/xsettings/impl/xsettingsmanager.cpp @@ -30,8 +30,18 @@ XSettingsManager::XSettingsManager(QObject *parent) , m_xcbUtils(XcbUtils::getInstance()) { connect(m_settingDconfig, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, &XSettingsManager::handleDConfigChangedCb); - setScreenScaleFactors(getScreenScaleFactors(), false); - adjustScaleFactor(getRecommendedScaleFactor()); + + double scale = 0; + if (m_settingDconfig->isValid()) { + scale = m_settingDconfig->value("scale-factor").toDouble(); + } + + // scale <= 0 is invalid, use recommended scale factor + if (scale <= 0) { + setScreenScaleFactors(getScreenScaleFactors(), false); + adjustScaleFactor(getRecommendedScaleFactor()); + } + setSettings(getSettingsInSchema()); updateDPI(); diff --git a/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings1.service b/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings1.service index 164bfd07..ca60c8bc 100644 --- a/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings1.service +++ b/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings1.service @@ -7,8 +7,6 @@ CollectMode=inactive-or-failed PartOf=dde-session-pre.target Before=dde-session-pre.target -Before=org.dde.session.Daemon1.service - [Service] Type=dbus BusName=org.deepin.dde.XSettings1