diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-04-18 17:58:42 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-04-19 10:11:41 +0000 |
commit | f6d1e9f731781ddfa7e543d4fac911fb81c7c825 (patch) | |
tree | fb97a8a7f870a6b546d59aaffca54d4cd49ea884 | |
parent | bdc03935a44438c6c5875a48c575ef24225cbb66 (diff) | |
download | qtmultimedia-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.cpp | 6 |
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 |