diff options
Diffstat (limited to 'tests/benchmarks/gui/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp')
-rw-r--r-- | tests/benchmarks/gui/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp | 420 |
1 files changed, 0 insertions, 420 deletions
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp deleted file mode 100644 index b15aad04cd..0000000000 --- a/tests/benchmarks/gui/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp +++ /dev/null @@ -1,420 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> -#include <QtWidgets/qgraphicsanchorlayout.h> -#include <QtWidgets/qgraphicslinearlayout.h> -#include <QtWidgets/qgraphicswidget.h> -#include <QtWidgets/qgraphicsview.h> - -class tst_QGraphicsAnchorLayout : public QObject -{ - Q_OBJECT -public: - tst_QGraphicsAnchorLayout() {} - ~tst_QGraphicsAnchorLayout() {} - -private slots: - void hard_complex_data(); - void hard_complex(); - void linearVsAnchorSizeHints_data(); - void linearVsAnchorSizeHints(); - void linearVsAnchorSetGeometry_data(); - void linearVsAnchorSetGeometry(); - void linearVsAnchorNested_data(); - void linearVsAnchorNested(); -}; - - -class RectWidget : public QGraphicsWidget -{ -public: - RectWidget(QGraphicsItem *parent = 0) : QGraphicsWidget(parent){} - - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) - { - Q_UNUSED(option); - Q_UNUSED(widget); - painter->drawRoundRect(rect()); - painter->drawLine(rect().topLeft(), rect().bottomRight()); - painter->drawLine(rect().bottomLeft(), rect().topRight()); - } -}; - -static QGraphicsWidget *createItem(const QSizeF &minimum = QSizeF(100.0, 100.0), - const QSizeF &preferred = QSize(150.0, 100.0), - const QSizeF &maximum = QSizeF(200.0, 100.0), - const QString &name = QString()) -{ - QGraphicsWidget *w = new RectWidget; - w->setMinimumSize(minimum); - w->setPreferredSize(preferred); - w->setMaximumSize(maximum); - w->setData(0, name); - return w; -} - -static void setAnchor(QGraphicsAnchorLayout *l, - QGraphicsLayoutItem *firstItem, - Qt::AnchorPoint firstEdge, - QGraphicsLayoutItem *secondItem, - Qt::AnchorPoint secondEdge, - qreal spacing) -{ - QGraphicsAnchor *anchor = l->addAnchor(firstItem, firstEdge, secondItem, secondEdge); - anchor->setSpacing(spacing); -} - -void tst_QGraphicsAnchorLayout::hard_complex_data() -{ - QTest::addColumn<int>("whichSizeHint"); - QTest::newRow("minimumSizeHint") - << int(Qt::MinimumSize); - QTest::newRow("preferredSizeHint") - << int(Qt::PreferredSize); - QTest::newRow("maximumSizeHint") - << int(Qt::MaximumSize); - // Add it as a reference to see how much overhead the body of effectiveSizeHint takes. - QTest::newRow("noSizeHint") - << -1; -} - -void tst_QGraphicsAnchorLayout::hard_complex() -{ - QFETCH(int, whichSizeHint); - - // Test for "hard" complex case, taken from wiki - // https://cwiki.nokia.com/S60QTUI/AnchorLayoutComplexCases - QSizeF min(0, 10); - QSizeF pref(50, 10); - QSizeF max(100, 10); - - QGraphicsWidget *a = createItem(min, pref, max, "a"); - QGraphicsWidget *b = createItem(min, pref, max, "b"); - QGraphicsWidget *c = createItem(min, pref, max, "c"); - QGraphicsWidget *d = createItem(min, pref, max, "d"); - QGraphicsWidget *e = createItem(min, pref, max, "e"); - QGraphicsWidget *f = createItem(min, pref, max, "f"); - QGraphicsWidget *g = createItem(min, pref, max, "g"); - - QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout; - l->setContentsMargins(0, 0, 0, 0); - - //<!-- Trunk --> - setAnchor(l, l, Qt::AnchorLeft, a, Qt::AnchorLeft, 10); - setAnchor(l, a, Qt::AnchorRight, b, Qt::AnchorLeft, 10); - setAnchor(l, b, Qt::AnchorRight, c, Qt::AnchorLeft, 10); - setAnchor(l, c, Qt::AnchorRight, d, Qt::AnchorLeft, 10); - setAnchor(l, d, Qt::AnchorRight, l, Qt::AnchorRight, 10); - - //<!-- Above trunk --> - setAnchor(l, b, Qt::AnchorLeft, e, Qt::AnchorLeft, 10); - setAnchor(l, e, Qt::AnchorRight, d, Qt::AnchorLeft, 10); - - //<!-- Below trunk --> - setAnchor(l, a, Qt::AnchorHorizontalCenter, g, Qt::AnchorLeft, 10); - setAnchor(l, g, Qt::AnchorRight, f, Qt::AnchorHorizontalCenter, 10); - setAnchor(l, c, Qt::AnchorLeft, f, Qt::AnchorLeft, 10); - setAnchor(l, f, Qt::AnchorRight, d, Qt::AnchorRight, 10); - - //<!-- vertical is simpler --> - setAnchor(l, l, Qt::AnchorTop, e, Qt::AnchorTop, 0); - setAnchor(l, e, Qt::AnchorBottom, a, Qt::AnchorTop, 0); - setAnchor(l, e, Qt::AnchorBottom, b, Qt::AnchorTop, 0); - setAnchor(l, e, Qt::AnchorBottom, c, Qt::AnchorTop, 0); - setAnchor(l, e, Qt::AnchorBottom, d, Qt::AnchorTop, 0); - setAnchor(l, a, Qt::AnchorBottom, f, Qt::AnchorTop, 0); - setAnchor(l, a, Qt::AnchorBottom, b, Qt::AnchorBottom, 0); - setAnchor(l, a, Qt::AnchorBottom, c, Qt::AnchorBottom, 0); - setAnchor(l, a, Qt::AnchorBottom, d, Qt::AnchorBottom, 0); - setAnchor(l, f, Qt::AnchorBottom, g, Qt::AnchorTop, 0); - setAnchor(l, g, Qt::AnchorBottom, l, Qt::AnchorBottom, 0); - - // It won't query the size hint if it already has a size set. - // If only one of the sizes is unset it will query sizeHint only of for that hint type. - l->setMinimumSize(60,40); - l->setPreferredSize(220,40); - l->setMaximumSize(240,40); - - switch (whichSizeHint) { - case Qt::MinimumSize: - l->setMinimumSize(-1, -1); - break; - case Qt::PreferredSize: - l->setPreferredSize(-1, -1); - break; - case Qt::MaximumSize: - l->setMaximumSize(-1, -1); - break; - default: - break; - } - - QSizeF sizeHint; - // warm up instruction cache - l->invalidate(); - sizeHint = l->effectiveSizeHint((Qt::SizeHint)whichSizeHint); - // ...then measure... - QBENCHMARK { - l->invalidate(); - sizeHint = l->effectiveSizeHint((Qt::SizeHint)whichSizeHint); - } -} - -static QGraphicsLayout* createLayouts(int whichLayout) -{ - QSizeF min(0, 10); - QSizeF pref(50, 10); - QSizeF max(100, 10); - - QGraphicsWidget *a = createItem(min, pref, max, "a"); - QGraphicsWidget *b = createItem(min, pref, max, "b"); - QGraphicsWidget *c = createItem(min, pref, max, "c"); - QGraphicsWidget *d = createItem(min, pref, max, "d"); - - QGraphicsLayout *l; - if (whichLayout == 0) { - l = new QGraphicsLinearLayout; - QGraphicsLinearLayout *linear = static_cast<QGraphicsLinearLayout *>(l); - linear->setContentsMargins(0, 0, 0, 0); - - linear->addItem(a); - linear->addItem(b); - linear->addItem(c); - linear->addItem(d); - } else { - l = new QGraphicsAnchorLayout; - QGraphicsAnchorLayout *anchor = static_cast<QGraphicsAnchorLayout *>(l); - anchor->setContentsMargins(0, 0, 0, 0); - - // Horizontal - setAnchor(anchor, anchor, Qt::AnchorLeft, a, Qt::AnchorLeft, 0); - setAnchor(anchor, a, Qt::AnchorRight, b, Qt::AnchorLeft, 0); - setAnchor(anchor, b, Qt::AnchorRight, c, Qt::AnchorLeft, 0); - setAnchor(anchor, c, Qt::AnchorRight, d, Qt::AnchorLeft, 0); - setAnchor(anchor, d, Qt::AnchorRight, anchor, Qt::AnchorRight, 0); - - // Vertical - anchor->addAnchors(anchor, a, Qt::Vertical); - anchor->addAnchors(anchor, b, Qt::Vertical); - anchor->addAnchors(anchor, c, Qt::Vertical); - anchor->addAnchors(anchor, d, Qt::Vertical); - } - - return l; -} - -void tst_QGraphicsAnchorLayout::linearVsAnchorSizeHints_data() -{ - QTest::addColumn<int>("whichLayout"); - QTest::addColumn<int>("whichSizeHint"); - - QTest::newRow("QGraphicsLinearLayout::minimum") - << 0 << int(Qt::MinimumSize); - QTest::newRow("QGraphicsLinearLayout::preferred") - << 0 << int(Qt::PreferredSize); - QTest::newRow("QGraphicsLinearLayout::maximum") - << 0 << int(Qt::MaximumSize); - QTest::newRow("QGraphicsLinearLayout::noSizeHint") - << 0 << -1; - - QTest::newRow("QGraphicsAnchorLayout::minimum") - << 1 << int(Qt::MinimumSize); - QTest::newRow("QGraphicsAnchorLayout::preferred") - << 1 << int(Qt::PreferredSize); - QTest::newRow("QGraphicsAnchorLayout::maximum") - << 1 << int(Qt::MaximumSize); - QTest::newRow("QGraphicsAnchorLayout::noSizeHint") - << 1 << -1; -} - -void tst_QGraphicsAnchorLayout::linearVsAnchorSizeHints() -{ - QFETCH(int, whichSizeHint); - QFETCH(int, whichLayout); - - QGraphicsLayout *l = createLayouts(whichLayout); - - QSizeF sizeHint; - // warm up instruction cache - l->invalidate(); - sizeHint = l->effectiveSizeHint((Qt::SizeHint)whichSizeHint); - // ...then measure... - - QBENCHMARK { - l->invalidate(); - sizeHint = l->effectiveSizeHint((Qt::SizeHint)whichSizeHint); - } -} - -void tst_QGraphicsAnchorLayout::linearVsAnchorSetGeometry_data() -{ - QTest::addColumn<int>("whichLayout"); - - QTest::newRow("QGraphicsLinearLayout") - << 0; - QTest::newRow("QGraphicsAnchorLayout") - << 1; -} - -void tst_QGraphicsAnchorLayout::linearVsAnchorSetGeometry() -{ - QFETCH(int, whichLayout); - - QGraphicsLayout *l = createLayouts(whichLayout); - - QRectF sizeHint; - qreal maxWidth; - qreal increment; - // warm up instruction cache - l->invalidate(); - sizeHint.setSize(l->effectiveSizeHint(Qt::MinimumSize)); - maxWidth = l->effectiveSizeHint(Qt::MaximumSize).width(); - increment = (maxWidth - sizeHint.width()) / 100; - l->setGeometry(sizeHint); - // ...then measure... - - QBENCHMARK { - l->invalidate(); - for (qreal width = sizeHint.width(); width <= maxWidth; width += increment) { - sizeHint.setWidth(width); - l->setGeometry(sizeHint); - } - } -} - -void tst_QGraphicsAnchorLayout::linearVsAnchorNested_data() -{ - QTest::addColumn<int>("whichLayout"); - QTest::newRow("LinearLayout") - << 0; - QTest::newRow("AnchorLayout setup with null-anchors knot") - << 1; - QTest::newRow("AnchorLayout setup easy to simplificate") - << 2; -} - -void tst_QGraphicsAnchorLayout::linearVsAnchorNested() -{ - QFETCH(int, whichLayout); - - QSizeF min(10, 10); - QSizeF pref(80, 80); - QSizeF max(150, 150); - - QGraphicsWidget *a = createItem(min, pref, max, "a"); - QGraphicsWidget *b = createItem(min, pref, max, "b"); - QGraphicsWidget *c = createItem(min, pref, max, "c"); - QGraphicsWidget *d = createItem(min, pref, max, "d"); - - QGraphicsLayout *layout; - - if (whichLayout == 0) { - QGraphicsLinearLayout *linear1 = new QGraphicsLinearLayout; - QGraphicsLinearLayout *linear2 = new QGraphicsLinearLayout(Qt::Vertical); - QGraphicsLinearLayout *linear3 = new QGraphicsLinearLayout; - - linear1->addItem(a); - linear1->addItem(linear2); - linear2->addItem(b); - linear2->addItem(linear3); - linear3->addItem(c); - linear3->addItem(d); - - layout = linear1; - } else if (whichLayout == 1) { - QGraphicsAnchorLayout *anchor = new QGraphicsAnchorLayout; - - // A - anchor->addCornerAnchors(a, Qt::TopLeftCorner, anchor, Qt::TopLeftCorner); - anchor->addCornerAnchors(a, Qt::TopRightCorner, b, Qt::TopLeftCorner); - anchor->addCornerAnchors(a, Qt::BottomLeftCorner, anchor, Qt::BottomLeftCorner); - anchor->addCornerAnchors(a, Qt::BottomRightCorner, c, Qt::BottomLeftCorner); - - // B - anchor->addCornerAnchors(b, Qt::TopRightCorner, anchor, Qt::TopRightCorner); - anchor->addCornerAnchors(b, Qt::BottomLeftCorner, c, Qt::TopLeftCorner); - anchor->addCornerAnchors(b, Qt::BottomRightCorner, d, Qt::TopRightCorner); - - // C - anchor->addCornerAnchors(c, Qt::TopRightCorner, d, Qt::TopLeftCorner); - anchor->addCornerAnchors(c, Qt::BottomRightCorner, d, Qt::BottomLeftCorner); - - // D - anchor->addCornerAnchors(d, Qt::BottomRightCorner, anchor, Qt::BottomRightCorner); - - layout = anchor; - } else { - QGraphicsAnchorLayout *anchor = new QGraphicsAnchorLayout; - - // A - anchor->addAnchor(a, Qt::AnchorLeft, anchor, Qt::AnchorLeft); - anchor->addAnchors(a, anchor, Qt::Vertical); - anchor->addAnchor(a, Qt::AnchorRight, b, Qt::AnchorLeft); - anchor->addAnchor(a, Qt::AnchorRight, c, Qt::AnchorLeft); - - // B - anchor->addAnchor(b, Qt::AnchorTop, anchor, Qt::AnchorTop); - anchor->addAnchor(b, Qt::AnchorRight, anchor, Qt::AnchorRight); - anchor->addAnchor(b, Qt::AnchorBottom, c, Qt::AnchorTop); - anchor->addAnchor(b, Qt::AnchorBottom, d, Qt::AnchorTop); - - // C - anchor->addAnchor(c, Qt::AnchorRight, d, Qt::AnchorLeft); - anchor->addAnchor(c, Qt::AnchorBottom, anchor, Qt::AnchorBottom); - - // D - anchor->addAnchor(d, Qt::AnchorRight, anchor, Qt::AnchorRight); - anchor->addAnchor(d, Qt::AnchorBottom, anchor, Qt::AnchorBottom); - - layout = anchor; - } - - QSizeF sizeHint; - // warm up instruction cache - layout->invalidate(); - sizeHint = layout->effectiveSizeHint(Qt::PreferredSize); - - // ...then measure... - QBENCHMARK { - // To ensure that all sizeHints caches are invalidated in - // the LinearLayout setup, we must call updateGeometry on the - // children. If we didn't, only the top level layout would be - // re-calculated. - static_cast<QGraphicsLayoutItem *>(a)->updateGeometry(); - static_cast<QGraphicsLayoutItem *>(b)->updateGeometry(); - static_cast<QGraphicsLayoutItem *>(c)->updateGeometry(); - static_cast<QGraphicsLayoutItem *>(d)->updateGeometry(); - layout->invalidate(); - sizeHint = layout->effectiveSizeHint(Qt::PreferredSize); - } -} - -QTEST_MAIN(tst_QGraphicsAnchorLayout) - -#include "tst_qgraphicsanchorlayout.moc" |