1/*-------------------------------------------------------------------------
2 * drawElements Quality Program EGL Module
3 * ---------------------------------------
4 *
5 * Copyright 2014 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 *//*!
20 * \file
21 * \brief EGL Test Package
22 *//*--------------------------------------------------------------------*/
23
24#include "teglTestPackage.hpp"
25
26#include "tcuTestLog.hpp"
27#include "tcuPlatform.hpp"
28#include "tcuCommandLine.hpp"
29
30#include "egluPlatform.hpp"
31#include "egluUtil.hpp"
32
33#include "teglInfoTests.hpp"
34#include "teglCreateContextTests.hpp"
35#include "teglQueryContextTests.hpp"
36#include "teglCreateSurfaceTests.hpp"
37#include "teglQuerySurfaceTests.hpp"
38#include "teglChooseConfigTests.hpp"
39#include "teglQueryConfigTests.hpp"
40#include "teglColorClearTests.hpp"
41#include "teglRenderTests.hpp"
42#include "teglImageTests.hpp"
43#include "teglGLES2SharingTests.hpp"
44#include "teglNegativeApiTests.hpp"
45#include "teglSyncTests.hpp"
46#include "teglMultiThreadTests.hpp"
47#include "teglGetProcAddressTests.hpp"
48#include "teglMemoryStressTests.hpp"
49#include "teglMakeCurrentPerfTests.hpp"
50#include "teglGLES2SharedRenderingPerfTests.hpp"
51#include "teglPreservingSwapTests.hpp"
52#include "teglClientExtensionTests.hpp"
53#include "teglCreateContextExtTests.hpp"
54#include "teglSurfacelessContextTests.hpp"
55#include "teglSwapBuffersTests.hpp"
56#include "teglNativeColorMappingTests.hpp"
57#include "teglNativeCoordMappingTests.hpp"
58#include "teglResizeTests.hpp"
59#include "teglBufferAgeTests.hpp"
60#include "teglPartialUpdateTests.hpp"
61#include "teglNegativePartialUpdateTests.hpp"
62#include "teglSwapBuffersWithDamageTests.hpp"
63#include "teglMultiContextTests.hpp"
64
65namespace deqp
66{
67namespace egl
68{
69
70class StressTests : public TestCaseGroup
71{
72public:
73	StressTests (EglTestContext& eglTestCtx)
74		: TestCaseGroup(eglTestCtx, "stress", "EGL stress tests")
75	{
76	}
77
78	void init (void)
79	{
80		addChild(new MemoryStressTests(m_eglTestCtx));
81	}
82};
83
84class PerformanceTests : public TestCaseGroup
85{
86public:
87	PerformanceTests (EglTestContext& eglTestCtx)
88		: TestCaseGroup(eglTestCtx, "performance", "EGL performance tests")
89	{
90	}
91
92	void init (void)
93	{
94		addChild(new MakeCurrentPerfTests			(m_eglTestCtx));
95		addChild(new GLES2SharedRenderingPerfTests	(m_eglTestCtx));
96	}
97};
98
99class FunctionalTests : public TestCaseGroup
100{
101public:
102	FunctionalTests (EglTestContext& eglTestCtx)
103		: TestCaseGroup(eglTestCtx, "functional", "EGL functional tests")
104	{
105	}
106
107	void init (void)
108	{
109		addChild(new CreateContextTests			(m_eglTestCtx));
110		addChild(new QueryContextTests			(m_eglTestCtx));
111		addChild(new CreateSurfaceTests			(m_eglTestCtx));
112		addChild(new QuerySurfaceTests			(m_eglTestCtx));
113		addChild(new QueryConfigTests			(m_eglTestCtx));
114		addChild(new ChooseConfigTests			(m_eglTestCtx));
115		addChild(new ColorClearTests			(m_eglTestCtx));
116		addChild(new RenderTests				(m_eglTestCtx));
117		addChild(new ImageTests					(m_eglTestCtx));
118		addChild(new SharingTests				(m_eglTestCtx));
119		addChild(new NegativeApiTests			(m_eglTestCtx));
120		addChild(new FenceSyncTests				(m_eglTestCtx));
121		addChild(new MultiThreadedTests			(m_eglTestCtx));
122		addChild(new GetProcAddressTests		(m_eglTestCtx));
123		addChild(new PreservingSwapTests		(m_eglTestCtx));
124		addChild(new ClientExtensionTests		(m_eglTestCtx));
125		addChild(new CreateContextExtTests		(m_eglTestCtx));
126		addChild(new SurfacelessContextTests	(m_eglTestCtx));
127		addChild(new SwapBuffersTests			(m_eglTestCtx));
128		addChild(new NativeColorMappingTests	(m_eglTestCtx));
129		addChild(new NativeCoordMappingTests	(m_eglTestCtx));
130		addChild(new ReusableSyncTests			(m_eglTestCtx));
131		addChild(new ResizeTests				(m_eglTestCtx));
132		addChild(new BufferAgeTests				(m_eglTestCtx));
133		addChild(new PartialUpdateTests			(m_eglTestCtx));
134		addChild(new NegativePartialUpdateTests	(m_eglTestCtx));
135		addChild(new SwapBuffersWithDamageTests	(m_eglTestCtx));
136		addChild(createMultiContextTests		(m_eglTestCtx));
137	}
138};
139
140class TestCaseWrapper : public tcu::TestCaseExecutor
141{
142public:
143	TestCaseWrapper (void)
144	{
145	}
146
147	~TestCaseWrapper (void)
148	{
149	}
150
151	void init (tcu::TestCase* testCase, const std::string&)
152	{
153		testCase->init();
154	}
155
156	void deinit (tcu::TestCase* testCase)
157	{
158		testCase->deinit();
159	}
160
161	tcu::TestNode::IterateResult iterate (tcu::TestCase* testCase)
162	{
163		return testCase->iterate();
164	}
165};
166
167static const eglu::NativeDisplayFactory& getDefaultDisplayFactory (tcu::TestContext& testCtx)
168{
169	const eglu::NativeDisplayFactory& factory = eglu::selectNativeDisplayFactory(testCtx.getPlatform().getEGLPlatform().getNativeDisplayFactoryRegistry(), testCtx.getCommandLine());
170
171	return factory;
172}
173
174TestPackage::TestPackage (tcu::TestContext& testCtx)
175	: tcu::TestPackage	(testCtx, "dEQP-EGL", "dEQP EGL Tests")
176	, m_eglTestCtx		(DE_NULL)
177{
178}
179
180TestPackage::~TestPackage (void)
181{
182	// Destroy children first since destructors may access context.
183	TestNode::deinit();
184	delete m_eglTestCtx;
185}
186
187void TestPackage::init (void)
188{
189	DE_ASSERT(!m_eglTestCtx);
190	m_eglTestCtx = new EglTestContext(m_testCtx, getDefaultDisplayFactory(m_testCtx));
191
192	try
193	{
194		addChild(new InfoTests			(*m_eglTestCtx));
195		addChild(new FunctionalTests	(*m_eglTestCtx));
196		addChild(new PerformanceTests	(*m_eglTestCtx));
197		addChild(new StressTests		(*m_eglTestCtx));
198	}
199	catch (...)
200	{
201		delete m_eglTestCtx;
202		m_eglTestCtx = DE_NULL;
203
204		throw;
205	}
206}
207
208void TestPackage::deinit (void)
209{
210	tcu::TestNode::deinit();
211	delete m_eglTestCtx;
212	m_eglTestCtx = DE_NULL;
213}
214
215tcu::TestCaseExecutor* TestPackage::createExecutor (void) const
216{
217	return new TestCaseWrapper();
218}
219
220} // egl
221} // deqp
222