Make vkBase singleton class.
Hasty mode depends on tests using the same instance.
Make the vkBase singleton so that dev won't use different vkBase by
mistake.
BUG=b:172227944
TEST=./vkbench -t Draw
Change-Id: I345feff12ca870527bd4a4ba733625bbdeed3bed
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vkbench/+/2552099
Reviewed-by: Ilja H. Friedel <ihf@chromium.org>
Commit-Queue: Po-Hsien Wang <pwang@chromium.org>
Tested-by: Po-Hsien Wang <pwang@chromium.org>
Auto-Submit: Po-Hsien Wang <pwang@chromium.org>
diff --git a/src/main.cc b/src/main.cc
index 84b509a..7002d6b 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -187,33 +187,25 @@
}
int main(int argc, char* argv[]) {
- vkbench::vkBase simpleVulkan;
// all_tests list all the available tests.
- std::vector<vkbench::testBase*> all_tests = {
- new vkbench::SubmitTest(10, &simpleVulkan),
- new vkbench::SubmitTest(100, &simpleVulkan),
- new vkbench::SubmitTest(1000, &simpleVulkan),
- new vkbench::SubmitTest(10000, &simpleVulkan),
- new vkbench::SubmitTest(100000, &simpleVulkan),
- new vkbench::DrawSizeTest(16, &simpleVulkan),
- new vkbench::DrawSizeTest(64, &simpleVulkan),
- new vkbench::DrawSizeTest(128, &simpleVulkan),
- new vkbench::DrawSizeTest(512, &simpleVulkan),
- new vkbench::DrawSizeTest(1024, &simpleVulkan),
- new vkbench::ClearTest(&simpleVulkan),
+ std::vector<vkbench::testBase*> all_tests;
+ auto appendList = [](std::vector<vkbench::testBase*>& a,
+ const std::vector<vkbench::testBase*>& b) {
+ a.insert(a.end(), b.begin(), b.end());
};
+ appendList(all_tests, vkbench::SubmitTest::GenTests());
+ appendList(all_tests, vkbench::DrawSizeTest::GenTests());
+ appendList(all_tests, vkbench::ClearTest::GenTests());
+
+ if (!ParseArgv(argc, argv, all_tests)) {
+ return 0;
+ }
// Sort to bundle tests using same vulkan instance together.
std::stable_sort(all_tests.begin(), all_tests.end(),
[](vkbench::testBase* a, vkbench::testBase* b) -> bool {
return a->vk < b->vk;
});
-
- if (!ParseArgv(argc, argv, all_tests)) {
- return 0;
- }
-
- std::map<const char*, int> failed_test;
LOG("@TEST_BEGIN")
PrintDateTime();
for (auto i = 0; i < all_tests.size(); i++) {
@@ -226,8 +218,7 @@
if (!g_hasty)
test->vk->Destroy();
} catch (const std::runtime_error error) {
- failed_test[test->Name()] += 1;
- LOG("Runtime Error: %s", error.what());
+ LOG("@RESULT: %46s = ERROR[%s]", test->Name(), error.what());
}
}
@@ -239,12 +230,7 @@
}
}
PrintDateTime();
- LOG("@TEST_END")
-
- for (auto& keyval : failed_test) {
- LOG("%s failed %d times.", keyval.first, keyval.second)
- }
-
+ LOG("@TEST_END");
for (auto& test : all_tests) {
delete test;
}
diff --git a/src/tests/clearTest.h b/src/tests/clearTest.h
index 4fe532a..3699cd1 100644
--- a/src/tests/clearTest.h
+++ b/src/tests/clearTest.h
@@ -18,6 +18,10 @@
}
~ClearTest() override = default;
+ static std::vector<testBase*> GenTests() {
+ return std::vector<testBase*>{
+ new vkbench::ClearTest(vkBase::GetInstance())};
+ }
const char* Name() const override { return name_; }
const char* Desp() const override { return desp_; }
const char* Unit() const override { return "mpixels_sec"; }
diff --git a/src/tests/drawSizeTest.h b/src/tests/drawSizeTest.h
index 05304b0..f69e331 100644
--- a/src/tests/drawSizeTest.h
+++ b/src/tests/drawSizeTest.h
@@ -19,6 +19,15 @@
}
~DrawSizeTest() override = default;
+ static std::vector<testBase*> GenTests() {
+ return std::vector<testBase*>{
+ new vkbench::DrawSizeTest(16, vkBase::GetInstance()),
+ new vkbench::DrawSizeTest(64, vkBase::GetInstance()),
+ new vkbench::DrawSizeTest(128, vkBase::GetInstance()),
+ new vkbench::DrawSizeTest(512, vkBase::GetInstance()),
+ new vkbench::DrawSizeTest(1024, vkBase::GetInstance()),
+ };
+ }
const char* Name() const override { return name_; }
const char* Desp() const override { return desp_; }
const char* Unit() const override { return "us"; }
diff --git a/src/tests/submitTest.h b/src/tests/submitTest.h
index 2f70fd9..8e58620 100644
--- a/src/tests/submitTest.h
+++ b/src/tests/submitTest.h
@@ -19,6 +19,16 @@
}
~SubmitTest() override = default;
+ static std::vector<testBase*> GenTests() {
+ return std::vector<testBase*>{
+ new vkbench::SubmitTest(16, vkBase::GetInstance()),
+ new vkbench::SubmitTest(64, vkBase::GetInstance()),
+ new vkbench::SubmitTest(256, vkBase::GetInstance()),
+ new vkbench::SubmitTest(1024, vkBase::GetInstance()),
+ new vkbench::SubmitTest(4096, vkBase::GetInstance()),
+ new vkbench::SubmitTest(16384, vkBase::GetInstance()),
+ };
+ }
const char* Name() const override { return name_; }
const char* Desp() const override { return desp_; }
const char* Unit() const override { return "us"; }
diff --git a/src/vkBase.cc b/src/vkBase.cc
index 9aedfaf..20d8afa 100644
--- a/src/vkBase.cc
+++ b/src/vkBase.cc
@@ -102,6 +102,13 @@
}
}
+vkBase* vkBase::singleton_ = nullptr;
+vkBase* vkBase::GetInstance() {
+ if (singleton_ == nullptr)
+ singleton_ = new vkBase();
+ return singleton_;
+}
+
uint32_t ChooseGFXQueueFamilies(const vk::PhysicalDevice& physical_device) {
uint32_t gfx_queue_idx = UINT32_MAX;
std::vector<vk::QueueFamilyProperties> props =
diff --git a/src/vkBase.h b/src/vkBase.h
index 057cb54..c9d5ab7 100644
--- a/src/vkBase.h
+++ b/src/vkBase.h
@@ -34,6 +34,8 @@
class vkBase {
public:
virtual ~vkBase() = default;
+ static vkBase* GetInstance();
+
virtual void Initialize();
virtual bool IsInitialized() const;
virtual void Destroy();
@@ -51,6 +53,7 @@
// Helper function
uint32_t GetMemoryType(uint32_t bits, vk::MemoryPropertyFlags properties);
vkImage* GetReadableImage(vkImage* src, vk::Extent2D size, vk::Format format);
+ DISALLOW_COPY_AND_ASSIGN(vkBase);
protected:
// Vulkan general method.
@@ -76,6 +79,10 @@
vk::SurfaceKHR surface_;
bool initialized_ = false;
+
+ private:
+ vkBase() {}
+ static vkBase* singleton_;
};
} // namespace vkbench