Commit 52ee81cf by Jamie Madill Committed by Commit Bot

Add a small unit test that dumps system info.

We can use this in the trace gold tests to identify system properties. The test uses Vulkan info collection when available and dumps out the known GPU info as JSON. Bug: angleproject:4090 Bug: b/168049670 Change-Id: Ib8d2244d82b650b94818da30adab180b471af556 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2427872 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com>
parent a3b16c6b
...@@ -211,6 +211,7 @@ set_defaults("angle_test") { ...@@ -211,6 +211,7 @@ set_defaults("angle_test") {
sources = [] sources = []
data = [] data = []
defines = [] defines = []
deps = []
data_deps = [] data_deps = []
main = "" main = ""
suppressed_configs = angle_remove_configs suppressed_configs = angle_remove_configs
......
...@@ -110,6 +110,16 @@ angle_common_test_utils("angle_common_test_utils_static") { ...@@ -110,6 +110,16 @@ angle_common_test_utils("angle_common_test_utils_static") {
angle_util = "angle_util_static" angle_util = "angle_util_static"
} }
# We use this in the restricted trace tests to load driver info.
angle_test("angle_system_info_test") {
standalone_harness = true
sources = [ "angle_system_info_tests_main.cpp" ]
deps = [
"$angle_root:angle_gpu_info_util",
"$angle_root/util:angle_util_static",
]
}
angle_test("angle_unittests") { angle_test("angle_unittests") {
sources = angle_unittests_sources sources = angle_unittests_sources
main = "angle_unittest_main" main = "angle_unittest_main"
...@@ -1307,6 +1317,7 @@ group("angle_tests") { ...@@ -1307,6 +1317,7 @@ group("angle_tests") {
deps = [ deps = [
":angle_end2end_tests", ":angle_end2end_tests",
":angle_perftests", ":angle_perftests",
":angle_system_info_test",
":angle_unittests", ":angle_unittests",
"capture_replay_tests", "capture_replay_tests",
] ]
......
//
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Simple unit test suite that prints out system info as JSON.
//
// Example output for a Windows/NV machine:
//
// {
// "activeGPUIndex": 0,
// "isOptimus": false,
// "isMacSwitchable": false,
// "machineManufacturer": "",
// "machineModelVersion": "",
// "gpus": [
// {
// "vendorId": 4318,
// "deviceId": 7040,
// "driverVendor": "NVIDIA Corporation",
// "driverVersion": "452.6.0.0",
// "driverDate": "",
// "detailedDriverVersion": {
// "major": 452,
// "minor": 6,
// "subMinor": 0,
// "patch": 0
// }
// }
// ]
// }
#include "gpu_info_util/SystemInfo.h"
#include <cstdlib>
#include <gtest/gtest.h>
#include <rapidjson/document.h>
#include <rapidjson/prettywriter.h>
#include <rapidjson/stringbuffer.h>
namespace js = rapidjson;
int main(int argc, char **argv)
{
angle::SystemInfo info;
bool useVulkan = false;
bool listTests = false;
for (int arg = 1; arg < argc; ++arg)
{
if (strcmp(argv[arg], "--vulkan") == 0)
{
useVulkan = true;
}
else if (strcmp(argv[arg], "--gtest_list_tests") == 0)
{
listTests = true;
}
}
if (listTests)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
if (useVulkan)
{
#if defined(ANGLE_ENABLE_VULKAN)
angle::GetSystemInfoVulkan(&info);
#else
printf("Vulkan not supported.\n");
return EXIT_FAILURE;
#endif // defined(ANGLE_ENABLE_VULKAN)
}
else
{
angle::GetSystemInfo(&info);
}
js::Document doc;
doc.SetObject();
js::Document::AllocatorType &allocator = doc.GetAllocator();
doc.AddMember("activeGPUIndex", info.activeGPUIndex, allocator);
doc.AddMember("isOptimus", info.isOptimus, allocator);
doc.AddMember("isMacSwitchable", info.isMacSwitchable, allocator);
js::Value machineManufacturer;
machineManufacturer.SetString(info.machineManufacturer.c_str(), allocator);
doc.AddMember("machineManufacturer", machineManufacturer, allocator);
js::Value machineModelVersion;
machineModelVersion.SetString(info.machineModelVersion.c_str(), allocator);
doc.AddMember("machineModelVersion", machineModelVersion, allocator);
js::Value gpus;
gpus.SetArray();
for (const angle::GPUDeviceInfo &gpu : info.gpus)
{
js::Value obj;
obj.SetObject();
obj.AddMember("vendorId", gpu.vendorId, allocator);
obj.AddMember("deviceId", gpu.deviceId, allocator);
js::Value driverVendor;
driverVendor.SetString(gpu.driverVendor.c_str(), allocator);
obj.AddMember("driverVendor", driverVendor, allocator);
js::Value driverVersion;
driverVersion.SetString(gpu.driverVersion.c_str(), allocator);
obj.AddMember("driverVersion", driverVersion, allocator);
js::Value driverDate;
driverDate.SetString(gpu.driverDate.c_str(), allocator);
obj.AddMember("driverDate", driverDate, allocator);
js::Value versionInfo;
versionInfo.SetObject();
versionInfo.AddMember("major", gpu.detailedDriverVersion.major, allocator);
versionInfo.AddMember("minor", gpu.detailedDriverVersion.minor, allocator);
versionInfo.AddMember("subMinor", gpu.detailedDriverVersion.subMinor, allocator);
versionInfo.AddMember("patch", gpu.detailedDriverVersion.patch, allocator);
obj.AddMember("detailedDriverVersion", versionInfo, allocator);
gpus.PushBack(obj, allocator);
}
doc.AddMember("gpus", gpus, allocator);
js::StringBuffer buffer;
js::PrettyWriter<js::StringBuffer> writer(buffer);
doc.Accept(writer);
const char *output = buffer.GetString();
printf("%s\n", output);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
TEST(ANGLE, SystemInfo) {}
\ No newline at end of file
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