From f75816a33a322f519b05dd4146bfe5f7a593efe0 Mon Sep 17 00:00:00 2001 From: Eike Hein Date: Sun, 3 Dec 2017 07:12:46 +0900 Subject: [PATCH] Initialize scale factor to the last scale factor set on any instance Summary: Plasma::Svg initializes SvgPrivate::scaleFactor to 1.0. On systems with a higher value for Units:devicePixelRatio, that means Svg::setScaleFactor gets called with a different value right after instanciation and a fair amount of work is done twice. This patch introduces a static SvgPrivate::s_lastScaleFactor, initialized to 1.0 but updated in Svg::setScaleFactor. SvgPrivate::scaleFactor is then initialized to the static every time its instanciated. That means after the first time Svg::setScaleFactor is called with e.g. 2.0, subsequent Svg instances get initialized with 2.0. This ends up shaving a decent amount of time off of startup on scaled systems. Reviewers: #plasma, davidedmundson, broulik Subscribers: plasma-devel, #frameworks Tags: #plasma, #frameworks Differential Revision: https://phabricator.kde.org/D9119 --- src/plasma/private/svg_p.h | 1 + src/plasma/svg.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plasma/private/svg_p.h b/src/plasma/private/svg_p.h index 1ad666f30..84b41ecfa 100644 --- a/src/plasma/private/svg_p.h +++ b/src/plasma/private/svg_p.h @@ -97,6 +97,7 @@ public: static QHash s_renderers; static QWeakPointer s_systemColorsCache; + static qreal s_lastScaleFactor; Svg *q; QWeakPointer theme; diff --git a/src/plasma/svg.cpp b/src/plasma/svg.cpp index 33bb94975..5118501e8 100644 --- a/src/plasma/svg.cpp +++ b/src/plasma/svg.cpp @@ -146,7 +146,7 @@ SvgPrivate::SvgPrivate(Svg *svg) colorGroup(Plasma::Theme::NormalColorGroup), lastModified(0), devicePixelRatio(1.0), - scaleFactor(1.0), + scaleFactor(s_lastScaleFactor), status(Svg::Status::Normal), multipleImages(false), themed(false), @@ -700,6 +700,7 @@ void SvgPrivate::colorsChanged() QHash SvgPrivate::s_renderers; QWeakPointer SvgPrivate::s_systemColorsCache; +qreal SvgPrivate::s_lastScaleFactor = 1.0; Svg::Svg(QObject *parent) : QObject(parent), @@ -746,6 +747,7 @@ void Svg::setScaleFactor(qreal ratio) } d->scaleFactor = floor(ratio); + d->s_lastScaleFactor = d->scaleFactor; //not resize() because we want to do it unconditionally QRectF rect;