Make vk-unittests load/unload swiftshader only once per suite
Rather than load/unload the driver for each test run, only do so once
per suite. This is mainly a workaround for the memory leak bug
reported at b/173733181; however, it also speeds up running the tests.
Bug: b/173733181
Change-Id: I7d47f8eee2fe8010bbf06845877649abf6761256
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/50608
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/tests/VulkanUnitTests/unittests.cpp b/tests/VulkanUnitTests/unittests.cpp
index bc62e61..8470d4d 100644
--- a/tests/VulkanUnitTests/unittests.cpp
+++ b/tests/VulkanUnitTests/unittests.cpp
@@ -33,15 +33,60 @@
}
} // anonymous namespace
-class SwiftShaderVulkanTest : public testing::Test
+enum class LoadDriver
+{
+ PerSuite,
+ PerTest
+};
+
+template<typename TestBase, LoadDriver loadDriver>
+class SwiftShaderTest : public TestBase
+{
+protected:
+ static Driver driver;
+
+ static void SetUpTestSuite()
+ {
+ if(loadDriver == LoadDriver::PerSuite)
+ {
+ ASSERT_TRUE(driver.loadSwiftShader());
+ }
+ }
+
+ static void TearDownTestSuite()
+ {
+ if(loadDriver == LoadDriver::PerSuite)
+ {
+ driver.unload();
+ }
+ }
+
+ virtual void SetUp()
+ {
+ if(loadDriver == LoadDriver::PerTest)
+ {
+ ASSERT_TRUE(driver.loadSwiftShader());
+ }
+ }
+
+ virtual void TearDown()
+ {
+ if(loadDriver == LoadDriver::PerTest)
+ {
+ driver.unload();
+ }
+ }
+};
+
+template<typename TestBase, LoadDriver loadDriver>
+Driver SwiftShaderTest<TestBase, loadDriver>::driver;
+
+class SwiftShaderVulkanTest : public SwiftShaderTest<testing::Test, LoadDriver::PerTest>
{
};
TEST_F(SwiftShaderVulkanTest, ICD_Check)
{
- Driver driver;
- ASSERT_TRUE(driver.loadSwiftShader());
-
auto createInstance = driver.vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance");
EXPECT_NE(createInstance, nullptr);
@@ -62,9 +107,6 @@
TEST_F(SwiftShaderVulkanTest, Version)
{
- Driver driver;
- ASSERT_TRUE(driver.loadSwiftShader());
-
uint32_t apiVersion = 0;
VkResult result = driver.vkEnumerateInstanceVersion(&apiVersion);
EXPECT_EQ(apiVersion, (uint32_t)VK_API_VERSION_1_1);
@@ -118,9 +160,6 @@
/*
TEST_F(SwiftShaderVulkanTest, UnsupportedDeviceExtension_DISABLED)
{
- Driver driver;
- ASSERT_TRUE(driver.loadSwiftShader());
-
uint32_t apiVersion = 0;
VkResult result = driver.vkEnumerateInstanceVersion(&apiVersion);
EXPECT_EQ(apiVersion, (uint32_t)VK_API_VERSION_1_1);
@@ -257,7 +296,7 @@
// Base class for compute tests that read from an input buffer and write to an
// output buffer of same length.
-class SwiftShaderVulkanBufferToBufferComputeTest : public testing::TestWithParam<ComputeParams>
+class SwiftShaderVulkanBufferToBufferComputeTest : public SwiftShaderTest<testing::TestWithParam<ComputeParams>, LoadDriver::PerSuite>
{
public:
void test(const std::string &shader,
@@ -272,9 +311,6 @@
{
auto code = compileSpirv(shader.c_str());
- Driver driver;
- ASSERT_TRUE(driver.loadSwiftShader());
-
const VkInstanceCreateInfo createInfo = {
VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType
nullptr, // pNext