// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "gpu/config/gpu_info.h" #include "gpu/config/gpu_test_config.h" #include "testing/gtest/include/gtest/gtest.h" namespace gpu { class GPUTestConfigTest : public testing::Test { public: GPUTestConfigTest() = default; ~GPUTestConfigTest() override = default; protected: void SetUp() override {} void TearDown() override {} }; TEST_F(GPUTestConfigTest, EmptyValues) { GPUTestConfig config; EXPECT_EQ(GPUTestConfig::kOsUnknown, config.os()); EXPECT_EQ(0u, config.gpu_vendor().size()); EXPECT_EQ(0u, config.gpu_device_id()); EXPECT_EQ(GPUTestConfig::kBuildTypeUnknown, config.build_type()); EXPECT_EQ(GPUTestConfig::kAPIUnknown, config.api()); EXPECT_EQ(GPUTestConfig::kCommandDecoderUnknown, config.command_decoder()); } TEST_F(GPUTestConfigTest, SetGPUInfo) { GPUInfo gpu_info; gpu_info.gpu.vendor_id = 0x10de; gpu_info.gpu.device_id = 0x0640; GPUTestBotConfig config; EXPECT_TRUE(config.SetGPUInfo(gpu_info)); EXPECT_EQ(1u, config.gpu_vendor().size()); EXPECT_EQ(gpu_info.gpu.vendor_id, config.gpu_vendor()[0]); EXPECT_EQ(gpu_info.gpu.device_id, config.gpu_device_id()); gpu_info.gpu.vendor_id = 0x8086; gpu_info.gpu.device_id = 0x0046; EXPECT_TRUE(config.SetGPUInfo(gpu_info)); EXPECT_EQ(1u, config.gpu_vendor().size()); EXPECT_EQ(gpu_info.gpu.vendor_id, config.gpu_vendor()[0]); EXPECT_EQ(gpu_info.gpu.device_id, config.gpu_device_id()); } TEST_F(GPUTestConfigTest, IsValid) { { GPUTestConfig config; config.set_gpu_device_id(0x0640); EXPECT_FALSE(config.IsValid()); config.AddGPUVendor(0x10de); EXPECT_TRUE(config.IsValid()); } { GPUTestBotConfig config; config.set_build_type(GPUTestConfig::kBuildTypeRelease); config.set_os(GPUTestConfig::kOsWin7); config.set_gpu_device_id(0x0640); EXPECT_FALSE(config.IsValid()); config.AddGPUVendor(0x10de); EXPECT_TRUE(config.IsValid()); // Device ID of 0 is valid only on macOS. config.set_gpu_device_id(0); config.set_os(GPUTestConfig::kOsMacBigSur); EXPECT_TRUE(config.IsValid()); config.set_os(GPUTestConfig::kOsWin7); EXPECT_FALSE(config.IsValid()); config.set_gpu_device_id(0x0640); EXPECT_TRUE(config.IsValid()); config.set_os(GPUTestConfig::kOsWin); EXPECT_FALSE(config.IsValid()); config.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsWinXP); EXPECT_FALSE(config.IsValid()); config.set_os(GPUTestConfig::kOsWin7); EXPECT_TRUE(config.IsValid()); config.set_build_type(GPUTestConfig::kBuildTypeUnknown); EXPECT_FALSE(config.IsValid()); config.set_build_type(GPUTestConfig::kBuildTypeRelease); EXPECT_TRUE(config.IsValid()); } } TEST_F(GPUTestConfigTest, Matches) { GPUTestBotConfig config; config.set_os(GPUTestConfig::kOsWin7); config.set_build_type(GPUTestConfig::kBuildTypeRelease); config.AddGPUVendor(0x10de); config.set_gpu_device_id(0x0640); config.set_api(GPUTestConfig::kAPID3D11); config.set_command_decoder(GPUTestConfig::kCommandDecoderPassthrough); EXPECT_TRUE(config.IsValid()); { // os matching GPUTestConfig config2; EXPECT_TRUE(config.Matches(config2)); config2.set_os(GPUTestConfig::kOsWin); EXPECT_TRUE(config.Matches(config2)); config2.set_os(GPUTestConfig::kOsWin7); EXPECT_TRUE(config.Matches(config2)); config2.set_os(GPUTestConfig::kOsMac); EXPECT_FALSE(config.Matches(config2)); config2.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsLinux); EXPECT_TRUE(config.Matches(config2)); } { // gpu vendor matching { GPUTestConfig config2; config2.AddGPUVendor(0x10de); EXPECT_TRUE(config.Matches(config2)); config2.AddGPUVendor(0x1004); EXPECT_TRUE(config.Matches(config2)); } { GPUTestConfig config2; config2.AddGPUVendor(0x8086); EXPECT_FALSE(config.Matches(config2)); } } { // build type matching GPUTestConfig config2; config2.set_build_type(GPUTestConfig::kBuildTypeRelease); EXPECT_TRUE(config.Matches(config2)); config2.set_build_type(GPUTestConfig::kBuildTypeRelease | GPUTestConfig::kBuildTypeDebug); EXPECT_TRUE(config.Matches(config2)); config2.set_build_type(GPUTestConfig::kBuildTypeDebug); EXPECT_FALSE(config.Matches(config2)); } { // exact matching GPUTestConfig config2; config2.set_os(GPUTestConfig::kOsWin7); config2.set_build_type(GPUTestConfig::kBuildTypeRelease); config2.AddGPUVendor(0x10de); config2.set_gpu_device_id(0x0640); EXPECT_TRUE(config.Matches(config2)); config2.set_gpu_device_id(0x0641); EXPECT_FALSE(config.Matches(config2)); } { // api matching { GPUTestConfig config2; config2.set_api(GPUTestConfig::kAPID3D11); EXPECT_TRUE(config.Matches(config2)); config2.set_api(config2.api() | GPUTestConfig::kAPID3D9); EXPECT_TRUE(config.Matches(config2)); } { GPUTestConfig config2; config2.set_api(GPUTestConfig::kAPID3D9); EXPECT_FALSE(config.Matches(config2)); } } { // command decoder matching { GPUTestConfig config2; config2.set_command_decoder(GPUTestConfig::kCommandDecoderPassthrough); EXPECT_TRUE(config.Matches(config2)); } { GPUTestConfig config2; config2.set_command_decoder(GPUTestConfig::kCommandDecoderValidating); EXPECT_FALSE(config.Matches(config2)); } } } TEST_F(GPUTestConfigTest, StringMatches) { GPUTestBotConfig config; config.set_os(GPUTestConfig::kOsWin7); config.set_build_type(GPUTestConfig::kBuildTypeRelease); config.AddGPUVendor(0x10de); config.set_gpu_device_id(0x0640); config.set_api(GPUTestConfig::kAPID3D11); config.set_command_decoder(GPUTestConfig::kCommandDecoderPassthrough); EXPECT_TRUE(config.IsValid()); EXPECT_TRUE(config.Matches(std::string())); // os matching EXPECT_TRUE(config.Matches("WIN")); EXPECT_TRUE(config.Matches("WIN7")); EXPECT_FALSE(config.Matches("MAC")); EXPECT_TRUE(config.Matches("WIN7 LINUX")); // gpu vendor matching EXPECT_TRUE(config.Matches("NVIDIA")); EXPECT_TRUE(config.Matches("NVIDIA AMD")); EXPECT_FALSE(config.Matches("INTEL")); // build type matching EXPECT_TRUE(config.Matches("RELEASE")); EXPECT_TRUE(config.Matches("RELEASE DEBUG")); EXPECT_FALSE(config.Matches("DEBUG")); // exact matching EXPECT_TRUE(config.Matches("WIN7 RELEASE NVIDIA 0X0640")); EXPECT_FALSE(config.Matches("WIN7 RELEASE NVIDIA 0X0641")); // api matching EXPECT_TRUE(config.Matches("D3D11")); EXPECT_FALSE(config.Matches("D3D9 OPENGL GLES")); // command decoder matching EXPECT_TRUE(config.Matches("PASSTHROUGH")); EXPECT_FALSE(config.Matches("VALIDATING")); } TEST_F(GPUTestConfigTest, OverlapsWith) { { // os // win vs win7 GPUTestConfig config; config.set_os(GPUTestConfig::kOsWin); GPUTestConfig config2; config2.set_os(GPUTestConfig::kOsWin7); EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); // win vs win7+linux config2.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsLinux); EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); // win vs mac config2.set_os(GPUTestConfig::kOsMac); EXPECT_FALSE(config.OverlapsWith(config2)); EXPECT_FALSE(config2.OverlapsWith(config)); // win vs unknown config2.set_os(GPUTestConfig::kOsUnknown); EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); } { // gpu vendor GPUTestConfig config; config.AddGPUVendor(0x10de); // nvidia vs unknown GPUTestConfig config2; EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); // nvidia vs intel config2.AddGPUVendor(0x1086); EXPECT_FALSE(config.OverlapsWith(config2)); EXPECT_FALSE(config2.OverlapsWith(config)); // nvidia vs nvidia+intel config2.AddGPUVendor(0x10de); EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); } { // build type // release vs debug GPUTestConfig config; config.set_build_type(GPUTestConfig::kBuildTypeRelease); GPUTestConfig config2; config2.set_build_type(GPUTestConfig::kBuildTypeDebug); EXPECT_FALSE(config.OverlapsWith(config2)); EXPECT_FALSE(config2.OverlapsWith(config)); // release vs release+debug config2.set_build_type(GPUTestConfig::kBuildTypeRelease | GPUTestConfig::kBuildTypeDebug); EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); // release vs unknown config2.set_build_type(GPUTestConfig::kBuildTypeUnknown); EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); } { // win7 vs nvidia GPUTestConfig config; config.set_os(GPUTestConfig::kOsWin7); GPUTestConfig config2; config2.AddGPUVendor(0x10de); EXPECT_TRUE(config.OverlapsWith(config2)); EXPECT_TRUE(config2.OverlapsWith(config)); } } TEST_F(GPUTestConfigTest, LoadCurrentConfig) { GPUTestBotConfig config; GPUInfo gpu_info; gpu_info.gpu.vendor_id = 0x10de; gpu_info.gpu.device_id = 0x0640; EXPECT_TRUE(config.LoadCurrentConfig(&gpu_info)); EXPECT_TRUE(config.IsValid()); } } // namespace gpu