From a8ddc4b93759ad2b88c604ea50b5dec853f02a74 Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Wed, 13 May 2026 17:20:29 +0800 Subject: [PATCH] perf: optimize startup time by reading scale factor from config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Read the scale factor from DConfig instead of using a blocking D-Bus call to XSettings1. This avoids a synchronous wait (around 600ms) during session initialization on X11. 通过读取 DConfig 配置获取缩放比例,代替原本阻塞的 D-Bus 调用。 这避免了 X11 环境下 session 初始化过程中约 600ms 的同步等待时间。 Log: optimize startup time by reading scale factor from config Change-Id: I29dcb24d8cf1f2d5f63d5c70907c399ce0bff328 --- src/dde-session/environmentsmanager.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/dde-session/environmentsmanager.cpp b/src/dde-session/environmentsmanager.cpp index 61a2957..4a99128 100644 --- a/src/dde-session/environmentsmanager.cpp +++ b/src/dde-session/environmentsmanager.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2021 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -11,6 +11,8 @@ #include #include +#include + EnvironmentsManager::EnvironmentsManager() { createGeneralEnvironments(); @@ -77,13 +79,20 @@ void EnvironmentsManager::createGeneralEnvironments() double scaleFactor = 1.0; if (sessionType == "x11") { - QDBusInterface dbusInterface("org.deepin.dde.XSettings1", "/org/deepin/dde/XSettings1", - "org.deepin.dde.XSettings1", QDBusConnection::sessionBus()); - if (dbusInterface.isValid()) { - QDBusReply scaleFactorReply = dbusInterface.call("GetScaleFactor"); - if (scaleFactorReply.isValid()) { - scaleFactor = scaleFactorReply.value(); - } + // FIXME: 首次启动桌面时 Xsettings可能尚未计算出推荐缩放比例(由 xsettings 服务计算), + // 此时获取的值可能为默认值 1.0。但为了避免 D-Bus 同步调用阻塞启动流程(阻塞时间600ms左右),此处优先使用配置中的持久化值。 + auto config = DTK_CORE_NAMESPACE::DConfig::create("org.deepin.dde.daemon", "org.deepin.XSettings"); + if (config && config->isValid()) { + scaleFactor = config->value("scale-factor", 1.0).toDouble(); + qInfo() << "scale factor: " << scaleFactor; + } + + if (config) { + config->deleteLater(); + } + + if (scaleFactor < 1.0) { + scaleFactor = 1.0; } } else { // TODO: wayland环境下在这里通过xsettings获取是不合理的,此时xsettings服务还没有启动,并且也无法启动(没有DISPLAY,xwayland此时没有启动)