blob: c29abf4c55c32d302dfd2d050b3a4af2b7c9c3e7 [file] [log] [blame]
// 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