aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@jollamobile.com>2015-06-07 12:30:20 +0200
committerGunnar Sletta <gunnar@sletta.org>2015-06-08 06:38:24 +0000
commite515fec1025ada6594c564fd5a90743abbc86edd (patch)
treed1978b83466872e744a82768b7efef5bb8913a73
parent926303a9f8946a2ff36bfcb57d035b9c870646c0 (diff)
Fix performance regression in Image construction.
Setting up the signal leads to a significant memory and performance overhead. This patch improves the benchmark by almost 10%. Change-Id: Ib0a76ba42fdce1ca707044a8f8b6bdc6405f20c3 Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
-rw-r--r--src/quick/items/qquickimage.cpp1
-rw-r--r--src/quick/items/qquickimage_p.h2
-rw-r--r--src/quick/items/qquickimagebase.cpp6
-rw-r--r--src/quick/items/qquickimagebase_p.h5
4 files changed, 9 insertions, 5 deletions
diff --git a/src/quick/items/qquickimage.cpp b/src/quick/items/qquickimage.cpp
index f0f17551b7..3ba09f9cea 100644
--- a/src/quick/items/qquickimage.cpp
+++ b/src/quick/items/qquickimage.cpp
@@ -152,7 +152,6 @@ QQuickImagePrivate::QQuickImagePrivate()
QQuickImage::QQuickImage(QQuickItem *parent)
: QQuickImageBase(*(new QQuickImagePrivate), parent)
{
- connect(this, SIGNAL(autoTransformBaseChanged()), SIGNAL(autoTransformChanged()));
}
QQuickImage::QQuickImage(QQuickImagePrivate &dd, QQuickItem *parent)
diff --git a/src/quick/items/qquickimage_p.h b/src/quick/items/qquickimage_p.h
index 5b1aea5940..8edf153ca3 100644
--- a/src/quick/items/qquickimage_p.h
+++ b/src/quick/items/qquickimage_p.h
@@ -88,6 +88,8 @@ public:
bool mipmap() const;
void setMipmap(bool use);
+ virtual void emitAutoTransformBaseChanged() { emit autoTransformChanged(); }
+
Q_SIGNALS:
void fillModeChanged();
void paintedGeometryChanged();
diff --git a/src/quick/items/qquickimagebase.cpp b/src/quick/items/qquickimagebase.cpp
index 0e2134842b..223cb8f46f 100644
--- a/src/quick/items/qquickimagebase.cpp
+++ b/src/quick/items/qquickimagebase.cpp
@@ -197,7 +197,7 @@ void QQuickImageBase::load()
}
if (autoTransform() != d->oldAutoTransform) {
d->oldAutoTransform = autoTransform();
- emit autoTransformBaseChanged();
+ emitAutoTransformBaseChanged();
}
update();
@@ -284,7 +284,7 @@ void QQuickImageBase::requestFinished()
}
if (autoTransform() != d->oldAutoTransform) {
d->oldAutoTransform = autoTransform();
- emit autoTransformBaseChanged();
+ emitAutoTransformBaseChanged();
}
update();
}
@@ -390,7 +390,7 @@ void QQuickImageBase::setAutoTransform(bool transform)
if (d->autoTransform != UsePluginDefault && transform == (d->autoTransform == ApplyTransform))
return;
d->autoTransform = transform ? ApplyTransform : DoNotApplyTransform;
- emit autoTransformBaseChanged();
+ emitAutoTransformBaseChanged();
}
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickimagebase_p.h b/src/quick/items/qquickimagebase_p.h
index d43822bebe..4fcfaecd7d 100644
--- a/src/quick/items/qquickimagebase_p.h
+++ b/src/quick/items/qquickimagebase_p.h
@@ -83,6 +83,10 @@ public:
void resolve2xLocalFile(const QUrl &url, qreal targetDevicePixelRatio, QUrl *sourceUrl, qreal *sourceDevicePixelRatio);
+ // Use a virtual rather than a signal->signal to avoid the huge
+ // connect/conneciton overhead for this rare case.
+ virtual void emitAutoTransformBaseChanged() { }
+
Q_SIGNALS:
void sourceChanged(const QUrl &);
void sourceSizeChanged();
@@ -91,7 +95,6 @@ Q_SIGNALS:
void asynchronousChanged();
void cacheChanged();
void mirrorChanged();
- void autoTransformBaseChanged();
protected:
virtual void load();