Commit f4916384 by Antonio Maiorano

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: 's avatarAntonio Maiorano <amaiorano@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent f2ab65b0
......@@ -33,15 +33,60 @@ size_t alignUp(size_t val, size_t alignment)
}
} // anonymous namespace
class SwiftShaderVulkanTest : public testing::Test
enum class LoadDriver
{
PerSuite,
PerTest
};
TEST_F(SwiftShaderVulkanTest, ICD_Check)
template<typename TestBase, LoadDriver loadDriver>
class SwiftShaderTest : public TestBase
{
Driver driver;
ASSERT_TRUE(driver.loadSwiftShader());
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)
{
auto createInstance = driver.vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance");
EXPECT_NE(createInstance, nullptr);
......@@ -62,9 +107,6 @@ TEST_F(SwiftShaderVulkanTest, ICD_Check)
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, Version)
/*
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 @@ struct ComputeParams
// 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 @@ void SwiftShaderVulkanBufferToBufferComputeTest::test(
{
auto code = compileSpirv(shader.c_str());
Driver driver;
ASSERT_TRUE(driver.loadSwiftShader());
const VkInstanceCreateInfo createInfo = {
VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType
nullptr, // pNext
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment