summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2023-04-18 17:58:42 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-04-19 10:11:41 +0000
commitf6d1e9f731781ddfa7e543d4fac911fb81c7c825 (patch)
treefb97a8a7f870a6b546d59aaffca54d4cd49ea884
parentbdc03935a44438c6c5875a48c575ef24225cbb66 (diff)
downloadqtmultimedia-f6d1e9f731781ddfa7e543d4fac911fb81c7c825.tar.gz
Fix qmediaplayer tests flakyness with QSignalSpy
QSignalSpy is not safe if signals are emitted from another thread, on windows the collision of removing QSignalSpy and receiving a new frame occurredpretty often (around 20% of running attempts). Catching the signal in the main thread fixes the problem. Change-Id: Id9630a5ee32e261b308ea61dc0a61b424f5239c0 Reviewed-by: Lars Knoll <lars@knoll.priv.no> (cherry picked from commit 587fb48167cf57d1612338ac0e91ae8136cd76aa) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
index a3e005929..953a43fc8 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -113,11 +113,12 @@ public:
: m_storeFrames(storeFrames)
{
connect(this, &QVideoSink::videoFrameChanged, this, &TestVideoSink::addVideoFrame);
+ connect(this, &QVideoSink::videoFrameChanged, this, &TestVideoSink::videoFrameChangedSync);
}
QVideoFrame waitForFrame()
{
- QSignalSpy spy(this, &TestVideoSink::videoFrameChanged);
+ QSignalSpy spy(this, &TestVideoSink::videoFrameChangedSync);
return spy.wait() ? spy.at(0).at(0).value<QVideoFrame>() : QVideoFrame{};
}
@@ -136,6 +137,9 @@ public Q_SLOTS:
++m_totalFrames;
}
+signals:
+ void videoFrameChangedSync(const QVideoFrame &frame);
+
public:
QList<QVideoFrame> m_frameList;
int m_totalFrames = 0; // used instead of the list when frames are not stored