summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2021-10-01 12:31:11 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2021-10-01 16:46:48 +0200
commit132d6d012701ce00a4ff82eae5b14e560632e893 (patch)
treee75e55fb2dfdf26aa64a42b4a3ffb040f6ed3c32 /tests/auto/gui
parent18bb10373aa06d258763a1f75e53acb397269ce4 (diff)
QFontCache: don't start cleanup timer if we are not in the main thread
We can only start timers in threads started via QThread, and even then we cannot assume that the thread runs an event loop. So only start the timer when we are in the main thread. Add a test that verifies that we don't get the warning message. Pick-to: 6.2 Change-Id: I40d7d9ff115720f9ecd3eedaebbade2643daf843 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/text/qfontcache/tst_qfontcache.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp b/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
index 3a7eebdc64..17d199210d 100644
--- a/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
+++ b/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
@@ -47,6 +47,7 @@ private slots:
void engineData();
void engineDataFamilies_data();
void engineDataFamilies();
+ void threadedAccess();
void clear();
};
@@ -227,5 +228,51 @@ for (int i = 0; i < leakedEngines.size(); ++i) qWarning() << i << leakedEngines.
#endif
}
+struct MessageHandler
+{
+ MessageHandler()
+ {
+ oldMessageHandler = qInstallMessageHandler(myMessageHandler);
+ messages.clear();
+ }
+ ~MessageHandler()
+ {
+ qInstallMessageHandler(oldMessageHandler);
+ }
+
+ inline static bool receivedMessage = false;
+ inline static QtMessageHandler oldMessageHandler = nullptr;
+ inline static QStringList messages;
+ static void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &text)
+ {
+ if (!text.startsWith("Populating font family aliases took")) {
+ receivedMessage = true;
+ messages += text;
+ }
+ if (oldMessageHandler)
+ oldMessageHandler(type, context, text);
+ }
+};
+
+
+void tst_QFontCache::threadedAccess()
+{
+ MessageHandler messageHandler;
+ auto lambda = []{
+ for (const auto &family : QFontDatabase::families()) {
+ QFont font(family);
+ QFontMetrics fontMetrics(font);
+ fontMetrics.height();
+ }
+ };
+ auto *qThread = QThread::create(lambda);
+ qThread->start();
+ qThread->wait();
+
+ std::thread stdThread(lambda);
+ stdThread.join();
+ QVERIFY2(!messageHandler.receivedMessage, qPrintable(messageHandler.messages.join('\n')));
+}
+
QTEST_MAIN(tst_QFontCache)
#include "tst_qfontcache.moc"