From b885fba8c17c03e2000783038dc2e76fe827b099 Mon Sep 17 00:00:00 2001 From: Michael Chock Date: Wed, 26 Jul 2017 10:07:16 -0700 Subject: [PATCH] Release EGL resources in CTS worker threads For worker threads in multithreaded EGL tests, call eglReleaseThread before thread termination. Affects: dEQP-EGL.functional.color_clears.multi_thread.* dEQP-EGL.functional.multithread.* dEQP-EGL.functional.render.multi_thread.* dEQP-EGL.functional.thread_cleanup.* dEQP-EGL.performance.gles2_shared_render.* Change-Id: I1e47fae1b9a3d1f148a80215c1c2baa0b684c57e --- modules/egl/teglColorClearCase.cpp | 1 + modules/egl/teglGLES2SharedRenderingPerfTests.cpp | 14 +++++++++----- modules/egl/teglMultiThreadTests.cpp | 2 ++ modules/egl/teglRenderTests.cpp | 1 + modules/egl/teglThreadCleanUpTests.cpp | 2 ++ 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/egl/teglColorClearCase.cpp b/modules/egl/teglColorClearCase.cpp index 8ae8b4c..92cbd8f 100644 --- a/modules/egl/teglColorClearCase.cpp +++ b/modules/egl/teglColorClearCase.cpp @@ -310,6 +310,7 @@ public: // Signal completion. packetIter->signal->increment(); } + m_egl.releaseThread(); } private: diff --git a/modules/egl/teglGLES2SharedRenderingPerfTests.cpp b/modules/egl/teglGLES2SharedRenderingPerfTests.cpp index bc13aad..7d334c9 100644 --- a/modules/egl/teglGLES2SharedRenderingPerfTests.cpp +++ b/modules/egl/teglGLES2SharedRenderingPerfTests.cpp @@ -717,7 +717,7 @@ void TestContext::render (void) class TestThread : de::Thread { public: - TestThread (const vector contexts); + TestThread (const vector contexts, const Library& egl); ~TestThread (void); void start (void); @@ -727,6 +727,7 @@ public: private: vector m_contexts; + const Library& m_egl; bool m_isOk; string m_errorString; @@ -746,8 +747,9 @@ private: TestThread (const TestThread&); }; -TestThread::TestThread (const vector contexts) +TestThread::TestThread (const vector contexts, const Library& egl) : m_contexts (contexts) + , m_egl (egl) , m_isOk (false) , m_errorString ("") , m_beginTimeUs (0) @@ -800,6 +802,8 @@ void TestThread::run (void) m_isOk = false; m_errorString = "Got unknown exception"; } + + m_egl.releaseThread(); } class SharedRenderingPerfCase : public TestCase @@ -879,7 +883,7 @@ void SharedRenderingPerfCase::deinit (void) namespace { -void createThreads (vector& threads, int threadCount, int perThreadContextCount, vector& contexts) +void createThreads (vector& threads, int threadCount, int perThreadContextCount, vector& contexts, const Library& egl) { DE_ASSERT(threadCount * perThreadContextCount == (int)contexts.size()); DE_ASSERT(threads.empty()); @@ -891,7 +895,7 @@ void createThreads (vector& threads, int threadCount, int perThread for (int contextNdx = 0; contextNdx < perThreadContextCount; contextNdx++) threadContexts.push_back(contexts[threadNdx * perThreadContextCount + contextNdx]); - threads.push_back(new TestThread(threadContexts)); + threads.push_back(new TestThread(threadContexts, egl)); threadContexts.clear(); } @@ -1036,7 +1040,7 @@ TestCase::IterateResult SharedRenderingPerfCase::iterate (void) if (m_results.empty()) logTestConfig(m_testCtx.getLog(), m_config); - createThreads(threads, m_config.threadCount, m_config.perThreadContextCount, m_contexts); + createThreads(threads, m_config.threadCount, m_config.perThreadContextCount, m_contexts, m_eglTestCtx.getLibrary()); beginTimeUs = deGetMicroseconds(); diff --git a/modules/egl/teglMultiThreadTests.cpp b/modules/egl/teglMultiThreadTests.cpp index 21952a9..3a5f13f 100644 --- a/modules/egl/teglMultiThreadTests.cpp +++ b/modules/egl/teglMultiThreadTests.cpp @@ -210,6 +210,8 @@ void TestThread::run (void) { getLog() << ThreadLog::BeginMessage << "Unknown exception" << ThreadLog::EndMessage; } + + getLibrary().releaseThread(); } bool MultiThreadedTest::execTest (TestThread& thread) diff --git a/modules/egl/teglRenderTests.cpp b/modules/egl/teglRenderTests.cpp index 8b5b5c2..be012e3 100644 --- a/modules/egl/teglRenderTests.cpp +++ b/modules/egl/teglRenderTests.cpp @@ -868,6 +868,7 @@ public: // Signal completion. packetIter->signal->increment(); } + m_egl.releaseThread(); } private: diff --git a/modules/egl/teglThreadCleanUpTests.cpp b/modules/egl/teglThreadCleanUpTests.cpp index ffe3913..a3f64cb 100644 --- a/modules/egl/teglThreadCleanUpTests.cpp +++ b/modules/egl/teglThreadCleanUpTests.cpp @@ -120,6 +120,8 @@ public: { m_error = error; } + + m_egl.releaseThread(); } private: -- 2.7.4