summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2019-10-07 15:48:30 +0200
committerMårten Nordheim <marten.nordheim@qt.io>2019-10-11 11:36:16 +0200
commitd79726e9ebf65d1722f73d56cbc2ac68c7489a45 (patch)
treea9c94f937ed4e0e120533b9b337a89d810ea98c2 /tests/benchmarks
parentf67481094fa7f16dec281f9a96dd0de3dc0c453f (diff)
Win: QUdpSocket: Use QVarLengthArray for retrieving size
Increased size of the peek buffer to 2048 from 1500 and now uses QVarLengthArray with space for 10 stack-allocated WSABUF instances, but still growing at the pace of 5. In benchmarking (created for and included in this patch) this shows better performance when retrieving the datagram size for larger datagrams, and the same performance as before for smaller datagrams (at the cost of 2048 - 1500 + 16 * 10 = 708 bytes extra stack space). Benchmarks: With changes: ********* Start testing of tst_QUdpSocket ********* Config: Using QtTest library 5.13.1, Qt 5.13.1 (x86_64-little_endian-llp64 shared (dynamic) release build; by MSVC 2019) PASS : tst_QUdpSocket::initTestCase() PASS : tst_QUdpSocket::pendingDatagramSize(52) RESULT : tst_QUdpSocket::pendingDatagramSize():"52": 0.0038 msecs per iteration (total: 63, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(1024) RESULT : tst_QUdpSocket::pendingDatagramSize():"1024": 0.0039 msecs per iteration (total: 64, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(2049) RESULT : tst_QUdpSocket::pendingDatagramSize():"2049": 0.0038 msecs per iteration (total: 63, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(4500) RESULT : tst_QUdpSocket::pendingDatagramSize():"4500": 0.0039 msecs per iteration (total: 64, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(4098) RESULT : tst_QUdpSocket::pendingDatagramSize():"4098": 0.0040 msecs per iteration (total: 66, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(8192) RESULT : tst_QUdpSocket::pendingDatagramSize():"8192": 0.0040 msecs per iteration (total: 67, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(12000) RESULT : tst_QUdpSocket::pendingDatagramSize():"12000": 0.010 msecs per iteration (total: 90, iterations: 8192) PASS : tst_QUdpSocket::pendingDatagramSize(25000) RESULT : tst_QUdpSocket::pendingDatagramSize():"25000": 0.021 msecs per iteration (total: 88, iterations: 4096) PASS : tst_QUdpSocket::pendingDatagramSize(32768) RESULT : tst_QUdpSocket::pendingDatagramSize():"32768": 0.033 msecs per iteration (total: 69, iterations: 2048) PASS : tst_QUdpSocket::pendingDatagramSize(64512) RESULT : tst_QUdpSocket::pendingDatagramSize():"64512": 0.088 msecs per iteration (total: 91, iterations: 1024) PASS : tst_QUdpSocket::cleanupTestCase() Totals: 12 passed, 0 failed, 0 skipped, 0 blacklisted, 3090ms ********* Finished testing of tst_QUdpSocket ********* Without changes: ********* Start testing of tst_QUdpSocket ********* Config: Using QtTest library 5.13.1, Qt 5.13.1 (x86_64-little_endian-llp64 shared (dynamic) release build; by MSVC 2019) PASS : tst_QUdpSocket::initTestCase() PASS : tst_QUdpSocket::pendingDatagramSize(52) RESULT : tst_QUdpSocket::pendingDatagramSize():"52": 0.0039 msecs per iteration (total: 65, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(1024) RESULT : tst_QUdpSocket::pendingDatagramSize():"1024": 0.0039 msecs per iteration (total: 65, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(2049) RESULT : tst_QUdpSocket::pendingDatagramSize():"2049": 0.0040 msecs per iteration (total: 66, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(4500) RESULT : tst_QUdpSocket::pendingDatagramSize():"4500": 0.0040 msecs per iteration (total: 67, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(4098) RESULT : tst_QUdpSocket::pendingDatagramSize():"4098": 0.0040 msecs per iteration (total: 67, iterations: 16384) PASS : tst_QUdpSocket::pendingDatagramSize(8192) RESULT : tst_QUdpSocket::pendingDatagramSize():"8192": 0.010 msecs per iteration (total: 90, iterations: 8192) PASS : tst_QUdpSocket::pendingDatagramSize(12000) RESULT : tst_QUdpSocket::pendingDatagramSize():"12000": 0.010 msecs per iteration (total: 90, iterations: 8192) PASS : tst_QUdpSocket::pendingDatagramSize(25000) RESULT : tst_QUdpSocket::pendingDatagramSize():"25000": 0.033 msecs per iteration (total: 69, iterations: 2048) PASS : tst_QUdpSocket::pendingDatagramSize(32768) RESULT : tst_QUdpSocket::pendingDatagramSize():"32768": 0.0502 msecs per iteration (total: 103, iterations: 2048) PASS : tst_QUdpSocket::pendingDatagramSize(64512) RESULT : tst_QUdpSocket::pendingDatagramSize():"64512": 0.13 msecs per iteration (total: 70, iterations: 512) PASS : tst_QUdpSocket::cleanupTestCase() Totals: 12 passed, 0 failed, 0 skipped, 0 blacklisted, 3192ms ********* Finished testing of tst_QUdpSocket ********* Fixes: QTBUG-78275 Change-Id: If86a226620244aa4e470600c6c1db4a7863b5617 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/benchmarks')
-rw-r--r--tests/benchmarks/network/socket/qudpsocket/qudpsocket.pro8
-rw-r--r--tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp80
-rw-r--r--tests/benchmarks/network/socket/socket.pro3
3 files changed, 90 insertions, 1 deletions
diff --git a/tests/benchmarks/network/socket/qudpsocket/qudpsocket.pro b/tests/benchmarks/network/socket/qudpsocket/qudpsocket.pro
new file mode 100644
index 0000000000..8df5340e2e
--- /dev/null
+++ b/tests/benchmarks/network/socket/qudpsocket/qudpsocket.pro
@@ -0,0 +1,8 @@
+TEMPLATE = app
+TARGET = tst_bench_qudpsocket
+
+QT = network testlib
+
+CONFIG += release
+
+SOURCES += tst_qudpsocket.cpp
diff --git a/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp
new file mode 100644
index 0000000000..e6dbbf9dfa
--- /dev/null
+++ b/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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 <QtCore/qglobal.h>
+#include <QtCore/qcoreapplication.h>
+#include <QtNetwork/qudpsocket.h>
+#include <QtNetwork/qnetworkdatagram.h>
+
+class tst_QUdpSocket : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QUdpSocket();
+
+private slots:
+ void pendingDatagramSize_data();
+ void pendingDatagramSize();
+};
+
+tst_QUdpSocket::tst_QUdpSocket()
+{
+}
+
+void tst_QUdpSocket::pendingDatagramSize_data()
+{
+ QTest::addColumn<int>("size");
+ for (int value : {52, 1024, 2049, 4500, 4098, 8192, 12000, 25000, 32 * 1024, 63 * 1024})
+ QTest::addRow("%d", value) << value;
+}
+
+void tst_QUdpSocket::pendingDatagramSize()
+{
+ QFETCH(int, size);
+ QUdpSocket socket;
+ socket.bind();
+
+ QNetworkDatagram datagram;
+ datagram.setData(QByteArray(size, 'a'));
+ datagram.setDestination(QHostAddress::SpecialAddress::LocalHost, socket.localPort());
+
+ auto sent = socket.writeDatagram(datagram);
+ QCOMPARE(sent, size);
+
+ auto res = QTest::qWaitFor([&socket]() { return socket.hasPendingDatagrams(); }, 5000);
+ QVERIFY(res);
+
+ QBENCHMARK {
+ auto pendingSize = socket.pendingDatagramSize();
+ Q_UNUSED(pendingSize);
+ }
+}
+
+QTEST_MAIN(tst_QUdpSocket)
+#include "tst_qudpsocket.moc"
diff --git a/tests/benchmarks/network/socket/socket.pro b/tests/benchmarks/network/socket/socket.pro
index 2d676a2c6e..d428a4d973 100644
--- a/tests/benchmarks/network/socket/socket.pro
+++ b/tests/benchmarks/network/socket/socket.pro
@@ -1,3 +1,4 @@
TEMPLATE = subdirs
SUBDIRS = \
- qtcpserver
+ qtcpserver \
+ qudpsocket