Index: content/browser/gpu/gpu_control_list_unittest.cc |
=================================================================== |
--- content/browser/gpu/gpu_control_list_unittest.cc (revision 201645) |
+++ content/browser/gpu/gpu_control_list_unittest.cc (working copy) |
@@ -1,444 +0,0 @@ |
-// Copyright (c) 2013 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 <vector> |
- |
-#include "base/memory/scoped_ptr.h" |
-#include "content/browser/gpu/gpu_control_list.h" |
-#include "content/public/common/gpu_info.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-const char kOsVersion[] = "10.6.4"; |
-const uint32 kIntelVendorId = 0x8086; |
-const uint32 kIntelDeviceId = 0x0166; // 3rd Gen Core Graphics |
-const uint32 kNvidiaVendorId = 0x10de; |
-const uint32 kNvidiaDeviceId = 0x0fd5; // GeForce GT 650M |
- |
-#define LONG_STRING_CONST(...) #__VA_ARGS__ |
- |
-#define EXPECT_EMPTY_SET(feature_set) EXPECT_EQ(0u, feature_set.size()) |
-#define EXPECT_SINGLE_FEATURE(feature_set, feature) \ |
- EXPECT_TRUE(feature_set.size() == 1 && feature_set.count(feature) == 1) |
- |
-namespace content { |
- |
-enum TestFeatureType { |
- TEST_FEATURE_0 = 1, |
- TEST_FEATURE_1 = 1 << 2, |
- TEST_FEATURE_2 = 1 << 3, |
-}; |
- |
-class GpuControlListTest : public testing::Test { |
- public: |
- GpuControlListTest() { } |
- |
- virtual ~GpuControlListTest() { } |
- |
- const GPUInfo& gpu_info() const { |
- return gpu_info_; |
- } |
- |
- GpuControlList* Create() { |
- GpuControlList* rt = new GpuControlList(); |
- rt->AddSupportedFeature("test_feature_0", TEST_FEATURE_0); |
- rt->AddSupportedFeature("test_feature_1", TEST_FEATURE_1); |
- rt->AddSupportedFeature("test_feature_2", TEST_FEATURE_2); |
- return rt; |
- } |
- |
- protected: |
- virtual void SetUp() { |
- gpu_info_.gpu.vendor_id = kNvidiaVendorId; |
- gpu_info_.gpu.device_id = 0x0640; |
- gpu_info_.driver_vendor = "NVIDIA"; |
- gpu_info_.driver_version = "1.6.18"; |
- gpu_info_.driver_date = "7-14-2009"; |
- gpu_info_.machine_model = "MacBookPro 7.1"; |
- gpu_info_.gl_vendor = "NVIDIA Corporation"; |
- gpu_info_.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine"; |
- gpu_info_.performance_stats.graphics = 5.0; |
- gpu_info_.performance_stats.gaming = 5.0; |
- gpu_info_.performance_stats.overall = 5.0; |
- } |
- |
- virtual void TearDown() { |
- } |
- |
- private: |
- GPUInfo gpu_info_; |
-}; |
- |
-TEST_F(GpuControlListTest, DefaultControlListSettings) { |
- scoped_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": [ |
- ] |
- } |
- ); |
- scoped_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": "=", |
- "number": "10.6.4" |
- } |
- }, |
- "vendor_id": "0x10de", |
- "device_id": ["0x0640"], |
- "driver_version": { |
- "op": "=", |
- "number": "1.6.18" |
- }, |
- "features": [ |
- "test_feature_0" |
- ] |
- } |
- ] |
- } |
- ); |
- scoped_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> 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" |
- ] |
- } |
- ] |
- } |
- ); |
- scoped_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, ChromeVersionEntry) { |
- const std::string browser_version_json = LONG_STRING_CONST( |
- { |
- "name": "gpu control list", |
- "version": "0.1", |
- "entries": [ |
- { |
- "id": 1, |
- "browser_version": { |
- "op": ">=", |
- "number": "10" |
- }, |
- "features": [ |
- "test_feature_0" |
- ] |
- } |
- ] |
- } |
- ); |
- scoped_ptr<GpuControlList> control_list9(Create()); |
- EXPECT_TRUE(control_list9->LoadList( |
- "9.0", browser_version_json, GpuControlList::kAllOs)); |
- std::set<int> features = control_list9->MakeDecision( |
- GpuControlList::kOsWin, kOsVersion, gpu_info()); |
- EXPECT_EMPTY_SET(features); |
- |
- scoped_ptr<GpuControlList> control_list10(Create()); |
- EXPECT_TRUE(control_list10->LoadList( |
- "10.0", browser_version_json, GpuControlList::kAllOs)); |
- features = control_list10->MakeDecision( |
- GpuControlList::kOsWin, kOsVersion, gpu_info()); |
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0); |
-} |
- |
-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" |
- ] |
- } |
- ] |
- } |
- ); |
- scoped_ptr<GpuControlList> control_list(Create()); |
- |
- EXPECT_TRUE(control_list->LoadList( |
- unknown_field_json, GpuControlList::kAllOs)); |
- EXPECT_EQ(1u, control_list->num_entries()); |
- EXPECT_TRUE(control_list->contains_unknown_fields()); |
- std::set<int> features = control_list->MakeDecision( |
- GpuControlList::kOsWin, kOsVersion, gpu_info()); |
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0); |
-} |
- |
-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" |
- ] |
- } |
- ] |
- } |
- ); |
- scoped_ptr<GpuControlList> control_list(Create()); |
- |
- EXPECT_TRUE(control_list->LoadList( |
- unknown_exception_field_json, GpuControlList::kAllOs)); |
- EXPECT_EQ(1u, control_list->num_entries()); |
- EXPECT_TRUE(control_list->contains_unknown_fields()); |
- std::set<int> features = control_list->MakeDecision( |
- GpuControlList::kOsWin, kOsVersion, gpu_info()); |
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0); |
-} |
- |
-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" |
- ] |
- } |
- ] |
- } |
- ); |
- scoped_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> 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, 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": { |
- "op": "contains", |
- "value": "mesa" |
- } |
- } |
- ], |
- "features": [ |
- "test_feature_0" |
- ] |
- } |
- ] |
- } |
- ); |
- GPUInfo gpu_info; |
- gpu_info.gpu.vendor_id = kIntelVendorId; |
- |
- scoped_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); |
- EXPECT_EMPTY_SET(features); |
- EXPECT_FALSE(control_list->needs_more_info()); |
- |
- // The case this entry might apply, but need more info. |
- features = control_list->MakeDecision( |
- GpuControlList::kOsLinux, kOsVersion, gpu_info); |
- EXPECT_EMPTY_SET(features); |
- EXPECT_TRUE(control_list->needs_more_info()); |
- |
- // The case we have full info, and the exception applies (so the entry |
- // does not apply). |
- gpu_info.gl_renderer = "mesa"; |
- features = control_list->MakeDecision( |
- GpuControlList::kOsLinux, kOsVersion, gpu_info); |
- EXPECT_EMPTY_SET(features); |
- EXPECT_FALSE(control_list->needs_more_info()); |
- |
- // The case we have full info, and this entry applies. |
- gpu_info.gl_renderer = "my renderer"; |
- features = control_list->MakeDecision(GpuControlList::kOsLinux, kOsVersion, |
- gpu_info); |
- EXPECT_SINGLE_FEATURE(features, TEST_FEATURE_0); |
- EXPECT_FALSE(control_list->needs_more_info()); |
-} |
- |
-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": "<", |
- "number": "10.7" |
- }, |
- "features": [ |
- "test_feature_0" |
- ] |
- } |
- ] |
- } |
- ); |
- GPUInfo gpu_info; |
- gpu_info.gpu.vendor_id = kIntelVendorId; |
- |
- scoped_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()); |
-} |
- |
-} // namespace content |
- |