diff options
author | Liang Qi <liang.qi@qt.io> | 2017-09-01 10:40:16 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-09-01 10:40:16 +0200 |
commit | 409a879f3617a7db7f3abfb3408f2530c139b24b (patch) | |
tree | 9238b92b5385139b6c037b45b080329d6f549cb5 /tests | |
parent | 5c99313eedada4e502b57798122ab20d71eca0fe (diff) | |
parent | 2e4acacfa3a062b8585226500f6cbc65597b8b67 (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Change-Id: Ic4220f9957266c374f751d3612c60b81e9cea193
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/render/vsyncframeadvanceservice/tst_vsyncframeadvanceservice.cpp | 108 |
1 files changed, 30 insertions, 78 deletions
diff --git a/tests/auto/render/vsyncframeadvanceservice/tst_vsyncframeadvanceservice.cpp b/tests/auto/render/vsyncframeadvanceservice/tst_vsyncframeadvanceservice.cpp index 6f455ea56..c35473111 100644 --- a/tests/auto/render/vsyncframeadvanceservice/tst_vsyncframeadvanceservice.cpp +++ b/tests/auto/render/vsyncframeadvanceservice/tst_vsyncframeadvanceservice.cpp @@ -35,76 +35,49 @@ class FakeRenderThread Q_DECL_FINAL : public QThread public: FakeRenderThread(Qt3DRender::Render::VSyncFrameAdvanceService *tickService) : m_tickService(tickService) + , m_running(1) + , m_submitCount(0) { } - // QThread interface -protected: - void run() Q_DECL_FINAL - { - QThread::msleep(1000); - m_tickService->proceedToNextFrame(); - } - -private: - Qt3DRender::Render::VSyncFrameAdvanceService *m_tickService; -}; - -class FakeAspectThread Q_DECL_FINAL : public QThread -{ -public: - FakeAspectThread(Qt3DRender::Render::VSyncFrameAdvanceService *tickService) - : m_tickService(tickService) - , m_count(0) - , m_running(true) - , m_waitForStarted(0) - { - } - - int count() const { return m_count; } + int submitCount() const { return m_submitCount; } void stopRunning() { - QMutexLocker lock(&m_mutex); - m_running = false; + m_running.fetchAndStoreOrdered(0); + m_submitSemaphore.release(1); } - void waitForStarted() + void enqueueRenderView() { - m_waitForStarted.acquire(1); + m_submitSemaphore.release(1); } protected: // QThread interface void run() Q_DECL_FINAL { - m_waitForStarted.release(1); - while (true) { - - bool running = true; - { - QMutexLocker lock(&m_mutex); - running = m_running; - } - - if (!running) { - qDebug() << "exiting"; - return; - } - - m_tickService->waitForNextFrame(); - ++m_count; + m_tickService->proceedToNextFrame(); - QThread::msleep(100); + while (true) { + if (!isReadyToSubmit()) + break; + ++m_submitCount; + m_tickService->proceedToNextFrame(); } } private: + bool isReadyToSubmit() + { + m_submitSemaphore.acquire(1); + return m_running.load() == 1; + } + Qt3DRender::Render::VSyncFrameAdvanceService *m_tickService; - int m_count; - bool m_running; - QMutex m_mutex; - QSemaphore m_waitForStarted; + QAtomicInt m_running; + QSemaphore m_submitSemaphore; + int m_submitCount; }; class tst_VSyncFrameAdvanceService : public QObject @@ -118,43 +91,22 @@ private Q_SLOTS: // GIVEN Qt3DRender::Render::VSyncFrameAdvanceService tickService(true); FakeRenderThread renderThread(&tickService); - QElapsedTimer t; // WHEN - t.start(); renderThread.start(); - tickService.waitForNextFrame(); - // THEN - // we allow for a little margin by checking for 950 - // instead of 1000 - QVERIFY(t.elapsed() >= 950); - } - - void checkWaitForNextFrame() - { - // GIVEN - Qt3DRender::Render::VSyncFrameAdvanceService tickService(false); - FakeAspectThread aspectThread(&tickService); - - // WHEN - aspectThread.start(); - aspectThread.waitForStarted(); - - QElapsedTimer t; - t.start(); - - while (t.elapsed() < 1000) - tickService.proceedToNextFrame(); + for (int i = 0; i < 10; ++i) { + tickService.waitForNextFrame(); + renderThread.enqueueRenderView(); + } - aspectThread.stopRunning(); + tickService.waitForNextFrame(); - // To make sure the aspectThread can finish - tickService.proceedToNextFrame(); - aspectThread.wait(); + renderThread.stopRunning(); + renderThread.wait(); // THEN - QCOMPARE(aspectThread.count(), 10); + QCOMPARE(renderThread.submitCount(), 10); } }; |