From 20f0b58a24dabf17d5d1dcfc06eaa3ccafcd7268 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 23 Dec 2022 22:35:21 +0100 Subject: tst_webchannel: port from raw and shared pointers to unique_ptr Avoids the need for qDeleteAll() in the case of raw pointers. Avoids overhead for non-shared objects in the shared pointer case. Since unique_ptr is a move-only type, use a container (std::vector) and loop constuct (ranged for loop) that can handle it. This removes the only use of QSharedPointer in this module. Change-Id: Ic3fe90403eb3f28f1e2e370a3648bc522880a10d Reviewed-by: Qt CI Bot Reviewed-by: Arno Rehn --- tests/auto/webchannel/tst_webchannel.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index d628937..28f1482 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -20,6 +20,9 @@ #include #endif +#include +#include + QT_USE_NAMESPACE #ifdef WEBCHANNEL_TESTS_CAN_USE_JS_ENGINE @@ -1469,31 +1472,30 @@ void TestWebChannel::benchRegisterObjects() void TestWebChannel::benchRemoveTransport() { QWebChannel channel; - QList dummyTransports; - for (int i = 500; i > 0; i--) - dummyTransports.append(new DummyTransport(this)); + std::vector> dummyTransports(500); + for (auto &e : dummyTransports) + e = std::make_unique(this); - QList> objs; + std::vector> objs; QMetaObjectPublisher *pub = channel.d_func()->publisher; - foreach (DummyTransport *transport, dummyTransports) { + for (auto &e : dummyTransports) { + DummyTransport *transport = e.get(); channel.connectTo(transport); channel.d_func()->publisher->initializeClient(transport); /* 30 objects per transport */ for (int i = 30; i > 0; i--) { - QSharedPointer obj = QSharedPointer::create(); - objs.append(obj); - pub->wrapResult(QVariant::fromValue(obj.data()), transport); + auto obj = std::make_unique(); + pub->wrapResult(QVariant::fromValue(obj.get()), transport); + objs.push_back(std::move(obj)); } } QBENCHMARK_ONCE { - for (auto transport : dummyTransports) - pub->transportRemoved(transport); + for (auto &transport : dummyTransports) + pub->transportRemoved(transport.get()); } - - qDeleteAll(dummyTransports); } #ifdef WEBCHANNEL_TESTS_CAN_USE_JS_ENGINE -- cgit v1.2.1