diff options
| author | skallweitNV <64953474+skallweitNV@users.noreply.github.com> | 2022-12-14 18:11:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-14 09:11:01 -0800 |
| commit | 5ce8d4c146fef7c8890cd40e112858db69702bd2 (patch) | |
| tree | d37e4faaaaa3631563b9993077787f44f234eb21 /tools/slang-unit-test | |
| parent | 9d048351d283f8df2a68aca52b3573dcbb8cdb9b (diff) | |
Shader cache improvements (#2564)
* Make shader cache tests check the output buffer
* Add shader cache eviction test
* Cleanup comments
* Improve TestReporter thread safety
* Split lockFile test into two tests
* Cleanup PersistentCache tests
* Disable multi-threaded tests on aarch64
Diffstat (limited to 'tools/slang-unit-test')
| -rw-r--r-- | tools/slang-unit-test/unit-test-lock-file.cpp | 34 | ||||
| -rw-r--r-- | tools/slang-unit-test/unit-test-persistent-cache.cpp | 60 |
2 files changed, 45 insertions, 49 deletions
diff --git a/tools/slang-unit-test/unit-test-lock-file.cpp b/tools/slang-unit-test/unit-test-lock-file.cpp index 33e787a1d..312d9a1e2 100644 --- a/tools/slang-unit-test/unit-test-lock-file.cpp +++ b/tools/slang-unit-test/unit-test-lock-file.cpp @@ -10,20 +10,30 @@ using namespace Slang; -SLANG_UNIT_TEST(lockFile) +static const String fileName = Path::simplify(Path::getParentDirectory(Path::getExecutablePath()) + "/test_lock_file"); + +SLANG_UNIT_TEST(lockFileOpenClose) { - static String fileName = Path::simplify(Path::getParentDirectory(Path::getExecutablePath()) + "/test_lock_file"); + LockFile file; + SLANG_CHECK(file.isOpen() == false); + SLANG_CHECK_ABORT(file.open(fileName) == SLANG_OK); + SLANG_CHECK(file.isOpen() == true); + SLANG_CHECK(File::exists(fileName) == true); + file.close(); + SLANG_CHECK(file.isOpen() == false); - // Open/close lock file. - { - LockFile file; - SLANG_CHECK(file.isOpen() == false); - SLANG_CHECK_ABORT(file.open(fileName) == SLANG_OK); - SLANG_CHECK(file.isOpen() == true); - SLANG_CHECK(File::exists(fileName) == true); - file.close(); - SLANG_CHECK(file.isOpen() == false); - } + // Cleanup. + File::remove(fileName); + SLANG_CHECK(File::exists(fileName) == false); +} + +SLANG_UNIT_TEST(lockFileSync) +{ + // aarch64 builds currently fail to run multi-threaded tests within the test-server. + // Tests work fine without the test-server, which is puzzling. For now we disable them. +#if SLANG_PROCESSOR_ARM_64 + SLANG_IGNORE_TEST +#endif // Test using multiple threads. { diff --git a/tools/slang-unit-test/unit-test-persistent-cache.cpp b/tools/slang-unit-test/unit-test-persistent-cache.cpp index 55c358d77..a32215b6f 100644 --- a/tools/slang-unit-test/unit-test-persistent-cache.cpp +++ b/tools/slang-unit-test/unit-test-persistent-cache.cpp @@ -431,14 +431,6 @@ struct CorruptionTest : public PersistentCacheTest } }; -struct MultiThreadingTest : public PersistentCacheTest -{ - void run() - { - } -}; - - #undef ENABLE_LOGGING #undef ENABLE_WRITE_TEST @@ -485,10 +477,6 @@ struct StressTest : public PersistentCacheTest Barrier *read_barrier; Barrier *write_barrier; - std::mutex mutex; - std::condition_variable conditionVariable; - uint32_t generation{0}; - StressTest() : PersistentCacheTest(kEntryCount - kEntryShortageCount) {} void run() @@ -527,59 +515,58 @@ struct StressTest : public PersistentCacheTest for (uint32_t threadIndex = 0; threadIndex < kThreadCount; ++threadIndex) { threads[threadIndex] = std::thread( - [](StressTest* self, uint32_t threadIndex) + [this, threadIndex]() { LOG("Thread %u: starting\n", threadIndex); while (true) { // Write to cache. - size_t startIndex = (self->iteration * kEntryCount + (threadIndex * kBatchCount)) % (kEntryCount * 2); + size_t startIndex = (iteration * kEntryCount + (threadIndex * kBatchCount)) % (kEntryCount * 2); for (size_t i = 0; i < kBatchCount; ++i) { - const Entry& entry = self->entries[startIndex + i]; + const Entry& entry = entries[startIndex + i]; #ifdef ENABLE_WRITE_TEST - self->osFileSystem->saveFileBlob(self->getEntryFileName(entry).getBuffer(), entry.data); + osFileSystem->saveFileBlob(getEntryFileName(entry).getBuffer(), entry.data); #else - self->writeEntry(entry); + writeEntry(entry); #endif - self->entriesWritten.fetch_add(1); - self->bytesWritten.fetch_add((uint32_t)entry.data->getBufferSize()); + entriesWritten.fetch_add(1); + bytesWritten.fetch_add((uint32_t)entry.data->getBufferSize()); } - LOG("Thread %u: ended writing (iteration=%u)\n", threadIndex, self->iteration.load()); + LOG("Thread %u: ended writing (iteration=%u)\n", threadIndex, iteration.load()); // Synchronize. - self->read_barrier->wait(); + read_barrier->wait(); // Read from cache. for (size_t i = 0; i < kBatchCount; ++i) { - const Entry& entry = self->entries[startIndex + i]; + const Entry& entry = entries[startIndex + i]; #ifndef ENABLE_WRITE_TEST - if (self->readEntry(entry)) + if (readEntry(entry)) { - self->readSuccess.fetch_add(1); - self->bytesRead.fetch_add((uint32_t)entry.data->getBufferSize()); + readSuccess.fetch_add(1); + bytesRead.fetch_add((uint32_t)entry.data->getBufferSize()); } #endif - self->entriesRead.fetch_add(1); + entriesRead.fetch_add(1); } - LOG("Thread %u: ended reading (iteration=%u)\n", threadIndex, self->iteration.load()); + LOG("Thread %u: ended reading (iteration=%u)\n", threadIndex, iteration.load()); // Synchronize. - self->write_barrier->wait(); + write_barrier->wait(); // Terminate. - if (self->iteration >= kIterationCount) + if (iteration >= kIterationCount) { LOG("Thread %u: terminates\n", threadIndex); return; } } - }, - this, threadIndex); + }); } for (auto& thread : threads) @@ -616,14 +603,13 @@ SLANG_UNIT_TEST(persistentCacheCorruption) test.run(); } -SLANG_UNIT_TEST(persistentCacheMultiThreading) -{ - MultiThreadingTest test; - test.run(); -} - SLANG_UNIT_TEST(persistentCacheStress) { + // aarch64 builds currently fail to run multi-threaded tests within the test-server. + // Tests work fine without the test-server, which is puzzling. For now we disable them. +#if SLANG_PROCESSOR_ARM_64 + SLANG_IGNORE_TEST +#endif StressTest test; test.run(); } |
