aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Burchell <robin.burchell@crimson.no>2017-04-25 00:03:22 +0200
committerRobin Burchell <robin.burchell@crimson.no>2017-04-28 17:46:49 +0000
commit9709d04ba7787c853a1ddbeed0347eab27c0924f (patch)
tree9c2e796acad520e7e4db47a5113439b7f1b53e26
parenta28b6107f82fefe2b4e0a5f553b6dae5e3186168 (diff)
QQuickRectangle: Optimize setGradient
Similarly to the QQuickPen optimization, we can avoid a signal connection by using the parent pointer of the QQuickGradient. This improves qmlbench's delegates_rect_gradient.qml by ~6% for me: Before: 300.6 frames; using samples; MedianAll=301; StdDev=4.61519, CoV=0.01535 After: 320.4 frames; using samples; MedianAll=321; StdDev=1.94936, CoV=0.00608414 Again, hopefully, the resulting lessening in allocations and improvement in performance will help stabilize the benchmark a little on some systems, as well as the improvement to performance and memory use. Change-Id: Id8e0399f5a4a0ef55d7fc9b8f100af229f389ddd Reviewed-by: Gunnar Sletta <gunnar@crimson.no> Reviewed-by: Michael Brasser <michael.brasser@live.com>
-rw-r--r--src/quick/items/qquickrectangle.cpp19
-rw-r--r--src/quick/items/qquickrectangle_p.h6
-rw-r--r--src/quick/items/qquickrectangle_p_p.h1
3 files changed, 2 insertions, 24 deletions
diff --git a/src/quick/items/qquickrectangle.cpp b/src/quick/items/qquickrectangle.cpp
index 7d8e4de1c0..27086c889b 100644
--- a/src/quick/items/qquickrectangle.cpp
+++ b/src/quick/items/qquickrectangle.cpp
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2017 Crimson AS <info@crimson.no>
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
@@ -269,11 +270,9 @@ QGradientStops QQuickGradient::gradientStops() const
void QQuickGradient::doUpdate()
{
- emit updated();
+ static_cast<QQuickItem*>(parent())->update();
}
-int QQuickRectanglePrivate::doUpdateSlotIdx = -1;
-
/*!
\qmltype Rectangle
\instantiates QQuickRectangle
@@ -327,11 +326,6 @@ QQuickRectangle::QQuickRectangle(QQuickItem *parent)
setFlag(ItemHasContents);
}
-void QQuickRectangle::doUpdate()
-{
- update();
-}
-
/*!
\qmlproperty bool QtQuick::Rectangle::antialiasing
@@ -396,16 +390,7 @@ void QQuickRectangle::setGradient(QQuickGradient *gradient)
Q_D(QQuickRectangle);
if (d->gradient == gradient)
return;
- static int updatedSignalIdx = -1;
- if (updatedSignalIdx < 0)
- updatedSignalIdx = QMetaMethod::fromSignal(&QQuickGradient::updated).methodIndex();
- if (d->doUpdateSlotIdx < 0)
- d->doUpdateSlotIdx = QQuickRectangle::staticMetaObject.indexOfSlot("doUpdate()");
- if (d->gradient)
- QMetaObject::disconnect(d->gradient, updatedSignalIdx, this, d->doUpdateSlotIdx);
d->gradient = gradient;
- if (d->gradient)
- QMetaObject::connect(d->gradient, updatedSignalIdx, this, d->doUpdateSlotIdx);
update();
}
diff --git a/src/quick/items/qquickrectangle_p.h b/src/quick/items/qquickrectangle_p.h
index 724a06013c..627f778e44 100644
--- a/src/quick/items/qquickrectangle_p.h
+++ b/src/quick/items/qquickrectangle_p.h
@@ -129,9 +129,6 @@ public:
QGradientStops gradientStops() const;
-Q_SIGNALS:
- void updated();
-
private:
void doUpdate();
@@ -172,9 +169,6 @@ Q_SIGNALS:
protected:
QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
-private Q_SLOTS:
- void doUpdate();
-
private:
Q_DISABLE_COPY(QQuickRectangle)
Q_DECLARE_PRIVATE(QQuickRectangle)
diff --git a/src/quick/items/qquickrectangle_p_p.h b/src/quick/items/qquickrectangle_p_p.h
index 3c1aaf7661..e771beec87 100644
--- a/src/quick/items/qquickrectangle_p_p.h
+++ b/src/quick/items/qquickrectangle_p_p.h
@@ -76,7 +76,6 @@ public:
QQuickGradient *gradient;
QQuickPen *pen;
qreal radius;
- static int doUpdateSlotIdx;
};
QT_END_NAMESPACE