Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(512)

Unified Diff: gpu/config/gpu_control_list_unittest.cc

Issue 2756793003: Move GPU blacklist and driver bug workaround list from json to data struct. (Closed)
Patch Set: Switch to use arraysize Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/config/gpu_control_list_unittest.cc
diff --git a/gpu/config/gpu_control_list_unittest.cc b/gpu/config/gpu_control_list_unittest.cc
index f3a3c099d6112db495becc4aa7a1d75387b2688a..5981ec05f9d7bab2b4bb1b191431a67224eaca18 100644
--- a/gpu/config/gpu_control_list_unittest.cc
+++ b/gpu/config/gpu_control_list_unittest.cc
@@ -8,13 +8,13 @@
#include <vector>
#include "gpu/config/gpu_control_list.h"
+#include "gpu/config/gpu_control_list_testing_data.h"
#include "gpu/config/gpu_info.h"
#include "testing/gtest/include/gtest/gtest.h"
const char kOsVersion[] = "10.6.4";
const uint32_t kIntelVendorId = 0x8086;
const uint32_t kNvidiaVendorId = 0x10de;
-const uint32_t kAmdVendorId = 0x10de;
#define LONG_STRING_CONST(...) #__VA_ARGS__
@@ -24,24 +24,20 @@ const uint32_t kAmdVendorId = 0x10de;
namespace gpu {
-enum TestFeatureType {
- TEST_FEATURE_0 = 1,
- TEST_FEATURE_1 = 1 << 2,
- TEST_FEATURE_2 = 1 << 3,
-};
-
class GpuControlListTest : public testing::Test {
public:
- GpuControlListTest() { }
+ typedef GpuControlList::Entry Entry;
+ GpuControlListTest() {}
~GpuControlListTest() override {}
const GPUInfo& gpu_info() const {
return gpu_info_;
}
- GpuControlList* Create() {
- GpuControlList* rt = new GpuControlList();
+ GpuControlList* Create(size_t entry_count, const Entry* entries) {
piman 2017/03/30 23:44:41 nit: return std::unique_ptr<GpuControlList>
Zhenyao Mo 2017/03/31 19:14:15 Done.
+ GpuControlListData data("0.1", entry_count, entries);
+ GpuControlList* rt = new GpuControlList(data);
rt->AddSupportedFeature("test_feature_0", TEST_FEATURE_0);
rt->AddSupportedFeature("test_feature_1", TEST_FEATURE_1);
rt->AddSupportedFeature("test_feature_2", TEST_FEATURE_2);
@@ -67,261 +63,20 @@ class GpuControlListTest : public testing::Test {
GPUInfo gpu_info_;
};
-TEST_F(GpuControlListTest, DefaultControlListSettings) {
- std::unique_ptr<GpuControlList> control_list(Create());
- // Default control list settings: all feature are allowed.
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_EMPTY_SET(features);
-}
-
-TEST_F(GpuControlListTest, EmptyControlList) {
- // Empty list: all features are allowed.
- const std::string empty_list_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "2.5",
- "entries": [
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
-
- EXPECT_TRUE(control_list->LoadList(empty_list_json,
- GpuControlList::kAllOs));
- EXPECT_EQ("2.5", control_list->version());
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_EMPTY_SET(features);
-}
-
-TEST_F(GpuControlListTest, DetailedEntryAndInvalidJson) {
- // exact setting.
- const std::string exact_list_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 5,
- "os": {
- "type": "macosx",
- "version": {
- "op": "=",
- "value": "10.6.4"
- }
- },
- "vendor_id": "0x10de",
- "device_id": ["0x0640"],
- "driver_version": {
- "op": "=",
- "value": "1.6.18"
- },
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
-
- EXPECT_TRUE(control_list->LoadList(exact_list_json, GpuControlList::kAllOs));
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
-
- // Invalid json input should not change the current control_list settings.
- const std::string invalid_json = "invalid";
-
- EXPECT_FALSE(control_list->LoadList(invalid_json, GpuControlList::kAllOs));
- features = control_list->MakeDecision(
- GpuControlList::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- std::vector<uint32_t> entries;
- control_list->GetDecisionEntries(&entries, false);
- ASSERT_EQ(1u, entries.size());
- EXPECT_EQ(5u, entries[0]);
- EXPECT_EQ(5u, control_list->max_entry_id());
-}
-
-TEST_F(GpuControlListTest, VendorOnAllOsEntry) {
- // ControlList a vendor on all OS.
- const std::string vendor_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "vendor_id": "0x10de",
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
-
- // ControlList entries won't be filtered to the current OS only upon loading.
- EXPECT_TRUE(control_list->LoadList(vendor_json, GpuControlList::kAllOs));
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- features = control_list->MakeDecision(
- GpuControlList::kOsLinux, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || \
- defined(OS_OPENBSD)
- // ControlList entries will be filtered to the current OS only upon loading.
- EXPECT_TRUE(control_list->LoadList(
- vendor_json, GpuControlList::kCurrentOsOnly));
- features = control_list->MakeDecision(
- GpuControlList::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- features = control_list->MakeDecision(
- GpuControlList::kOsLinux, kOsVersion, gpu_info());
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
-#endif
-}
-
-TEST_F(GpuControlListTest, UnknownField) {
- const std::string unknown_field_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "unknown_field": 0,
- "features": [
- "test_feature_1"
- ]
- },
- {
- "id": 2,
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
-
- EXPECT_FALSE(control_list->LoadList(
- unknown_field_json, GpuControlList::kAllOs));
-}
-
-TEST_F(GpuControlListTest, UnknownExceptionField) {
- const std::string unknown_exception_field_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "unknown_field": 0,
- "features": [
- "test_feature_2"
- ]
- },
- {
- "id": 2,
- "exceptions": [
- {
- "unknown_field": 0
- }
- ],
- "features": [
- "test_feature_1"
- ]
- },
- {
- "id": 3,
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
-
- EXPECT_FALSE(control_list->LoadList(
- unknown_exception_field_json, GpuControlList::kAllOs));
-}
-
-TEST_F(GpuControlListTest, DisabledEntry) {
- const std::string disabled_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "disabled": true,
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(disabled_json, GpuControlList::kAllOs));
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info());
- EXPECT_EMPTY_SET(features);
- std::vector<uint32_t> flag_entries;
- control_list->GetDecisionEntries(&flag_entries, false);
- EXPECT_EQ(0u, flag_entries.size());
- control_list->GetDecisionEntries(&flag_entries, true);
- EXPECT_EQ(1u, flag_entries.size());
-}
-
TEST_F(GpuControlListTest, NeedsMoreInfo) {
- const std::string json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "win"
- },
- "vendor_id": "0x10de",
- "driver_version": {
- "op": "<",
- "value": "12"
- },
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
+ const Entry kEntries[1] = {
+ kGpuControlListTestingEntries[kGpuControlListTest_NeedsMoreInfo]};
+ std::unique_ptr<GpuControlList> control_list(Create(1, kEntries));
+
GPUInfo gpu_info;
gpu_info.gpu.vendor_id = kNvidiaVendorId;
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(json, GpuControlList::kAllOs));
-
std::set<int> features = control_list->MakeDecision(
GpuControlList::kOsWin, kOsVersion, gpu_info);
EXPECT_EMPTY_SET(features);
EXPECT_TRUE(control_list->needs_more_info());
std::vector<uint32_t> decision_entries;
- control_list->GetDecisionEntries(&decision_entries, false);
+ control_list->GetDecisionEntries(&decision_entries);
EXPECT_EQ(0u, decision_entries.size());
gpu_info.driver_version = "11";
@@ -329,40 +84,19 @@ TEST_F(GpuControlListTest, NeedsMoreInfo) {
GpuControlList::kOsWin, kOsVersion, gpu_info);
EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
EXPECT_FALSE(control_list->needs_more_info());
- control_list->GetDecisionEntries(&decision_entries, false);
+ control_list->GetDecisionEntries(&decision_entries);
EXPECT_EQ(1u, decision_entries.size());
}
TEST_F(GpuControlListTest, NeedsMoreInfoForExceptions) {
- const std::string json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "linux"
- },
- "vendor_id": "0x8086",
- "exceptions": [
- {
- "gl_renderer": ".*mesa.*"
- }
- ],
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
+ const Entry kEntries[1] = {
+ kGpuControlListTestingEntries
+ [kGpuControlListTest_NeedsMoreInfoForExceptions]};
+ std::unique_ptr<GpuControlList> control_list(Create(1, kEntries));
+
GPUInfo gpu_info;
gpu_info.gpu.vendor_id = kIntelVendorId;
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(json, GpuControlList::kAllOs));
-
// The case this entry does not apply.
std::set<int> features = control_list->MakeDecision(
GpuControlList::kOsMacosx, kOsVersion, gpu_info);
@@ -395,228 +129,28 @@ TEST_F(GpuControlListTest, NeedsMoreInfoForExceptions) {
TEST_F(GpuControlListTest, IgnorableEntries) {
// If an entry will not change the control_list decisions, then it should not
// trigger the needs_more_info flag.
- const std::string json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "linux"
- },
- "vendor_id": "0x8086",
- "features": [
- "test_feature_0"
- ]
- },
- {
- "id": 2,
- "os": {
- "type": "linux"
- },
- "vendor_id": "0x8086",
- "driver_version": {
- "op": "<",
- "value": "10.7"
- },
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = kIntelVendorId;
-
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(json, GpuControlList::kAllOs));
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsLinux, kOsVersion, gpu_info);
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- EXPECT_FALSE(control_list->needs_more_info());
-}
+ const Entry kEntries[2] = {
+ kGpuControlListTestingEntries[kGpuControlListTest_IgnorableEntries_0],
+ kGpuControlListTestingEntries[kGpuControlListTest_IgnorableEntries_1]};
+ std::unique_ptr<GpuControlList> control_list(Create(2, kEntries));
-TEST_F(GpuControlListTest, ExceptionWithoutVendorId) {
- const std::string json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "linux"
- },
- "vendor_id": "0x8086",
- "exceptions": [
- {
- "device_id": ["0x2a06"],
- "driver_version": {
- "op": ">=",
- "value": "8.1"
- }
- },
- {
- "device_id": ["0x2a02"],
- "driver_version": {
- "op": ">=",
- "value": "9.1"
- }
- }
- ],
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
GPUInfo gpu_info;
gpu_info.gpu.vendor_id = kIntelVendorId;
- gpu_info.gpu.device_id = 0x2a02;
- gpu_info.driver_version = "9.1";
-
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(json, GpuControlList::kAllOs));
std::set<int> features = control_list->MakeDecision(
GpuControlList::kOsLinux, kOsVersion, gpu_info);
- EXPECT_EMPTY_SET(features);
-
- gpu_info.driver_version = "9.0";
- features = control_list->MakeDecision(
- GpuControlList::kOsLinux, kOsVersion, gpu_info);
EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
-}
-
-TEST_F(GpuControlListTest, AMDSwitchable) {
- GPUInfo gpu_info;
- gpu_info.amd_switchable = true;
- gpu_info.gpu.vendor_id = kAmdVendorId;
- gpu_info.gpu.device_id = 0x6760;
- GPUInfo::GPUDevice integrated_gpu;
- integrated_gpu.vendor_id = kIntelVendorId;
- integrated_gpu.device_id = 0x0116;
- gpu_info.secondary_gpus.push_back(integrated_gpu);
-
- { // amd_switchable_discrete entry
- const std::string json= LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "win"
- },
- "multi_gpu_style": "amd_switchable_discrete",
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
-
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(json, GpuControlList::kAllOs));
-
- // Integrated GPU is active
- gpu_info.gpu.active = false;
- gpu_info.secondary_gpus[0].active = true;
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_EMPTY_SET(features);
-
- // Discrete GPU is active
- gpu_info.gpu.active = true;
- gpu_info.secondary_gpus[0].active = false;
- features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- }
-
- { // amd_switchable_integrated entry
- const std::string json= LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "win"
- },
- "multi_gpu_style": "amd_switchable_integrated",
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
-
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(json, GpuControlList::kAllOs));
-
- // Discrete GPU is active
- gpu_info.gpu.active = true;
- gpu_info.secondary_gpus[0].active = false;
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_EMPTY_SET(features);
-
- // Integrated GPU is active
- gpu_info.gpu.active = false;
- gpu_info.secondary_gpus[0].active = true;
- features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
-
- // For non AMD switchable
- gpu_info.amd_switchable = false;
- features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_EMPTY_SET(features);
- }
+ EXPECT_FALSE(control_list->needs_more_info());
}
TEST_F(GpuControlListTest, DisabledExtensionTest) {
// exact setting.
- const std::string exact_list_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "win"
- },
- "disabled_extensions": [
- "test_extension2",
- "test_extension1"
- ]
- },
- {
- "id": 2,
- "os": {
- "type": "win"
- },
- "disabled_extensions": [
- "test_extension3",
- "test_extension2"
- ]
- }
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
-
- EXPECT_TRUE(control_list->LoadList(exact_list_json, GpuControlList::kAllOs));
+ const Entry kEntries[2] = {kGpuControlListTestingEntries
+ [kGpuControlListTest_DisabledExtensionTest_0],
+ kGpuControlListTestingEntries
+ [kGpuControlListTest_DisabledExtensionTest_1]};
+ std::unique_ptr<GpuControlList> control_list(Create(2, kEntries));
+
GPUInfo gpu_info;
control_list->MakeDecision(GpuControlList::kOsWin, kOsVersion, gpu_info);
@@ -629,71 +163,4 @@ TEST_F(GpuControlListTest, DisabledExtensionTest) {
ASSERT_STREQ("test_extension3", disabled_extensions[2].c_str());
}
-TEST_F(GpuControlListTest, DisabledInProcessGPUTest) {
- const std::string exact_list_json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "win"
- },
- "in_process_gpu": true,
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- std::unique_ptr<GpuControlList> control_list(Create());
-
- EXPECT_TRUE(control_list->LoadList(exact_list_json, GpuControlList::kAllOs));
- GPUInfo gpu_info;
-
- gpu_info.in_process_gpu = true;
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
-
- gpu_info.in_process_gpu = false;
- features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_EMPTY_SET(features);
-}
-
-TEST_F(GpuControlListTest, SameGPUTwiceTest) {
- const std::string json = LONG_STRING_CONST(
- {
- "name": "gpu control list",
- "version": "0.1",
- "entries": [
- {
- "id": 1,
- "os": {
- "type": "win"
- },
- "vendor_id": "0x8086",
- "features": [
- "test_feature_0"
- ]
- }
- ]
- }
- );
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = kIntelVendorId;
- // Real case on Intel GMA* on Windows
- gpu_info.secondary_gpus.push_back(gpu_info.gpu);
-
- std::unique_ptr<GpuControlList> control_list(Create());
- EXPECT_TRUE(control_list->LoadList(json, GpuControlList::kAllOs));
- std::set<int> features = control_list->MakeDecision(
- GpuControlList::kOsWin, kOsVersion, gpu_info);
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0);
- EXPECT_FALSE(control_list->needs_more_info());
-}
-
} // namespace gpu

Powered by Google App Engine
This is Rietveld 408576698