OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include <vector> | |
6 | |
7 #include "base/version.h" | |
8 #include "chrome/browser/gpu_blacklist.h" | |
9 #include "chrome/common/gpu_info.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 TEST(GpuBlacklistTest, BlacklistLogic) { | |
13 GPUInfo gpu_info; | |
14 gpu_info.SetVideoCardInfo(0x10de, // Vendor ID | |
15 0x0640); // Device ID | |
16 gpu_info.SetDriverInfo("NVIDIA", // Driver vendor | |
17 "1.6.18"); // Driver Version | |
18 gpu_info.SetLevel(GPUInfo::kComplete); | |
19 scoped_ptr<Version> os_version(Version::GetVersionFromString("10.6.4")); | |
20 | |
21 GpuBlacklist blacklist; | |
22 | |
23 // Default blacklist settings: all feature are allowed. | |
24 GpuFeatureFlags flags = blacklist.DetermineGpuFeatureFlags( | |
25 GpuBlacklist::kOsMacosx, os_version.get(), gpu_info); | |
26 EXPECT_EQ(flags.flags(), 0u); | |
27 | |
28 // Empty list: all features are allowed. | |
29 const std::string empty_list_json = | |
30 "{\n" | |
31 " \"name\": \"gpu blacklist\",\n" | |
32 " \"version\": \"2.5\",\n" | |
33 " \"entries\": [\n" | |
34 " ]\n" | |
35 "}"; | |
36 EXPECT_TRUE(blacklist.LoadGpuBlacklist(empty_list_json, false)); | |
37 uint16 major, minor; | |
38 EXPECT_TRUE(blacklist.GetVersion(&major, &minor)); | |
39 EXPECT_EQ(major, 2u); | |
40 EXPECT_EQ(minor, 5u); | |
41 flags = blacklist.DetermineGpuFeatureFlags( | |
42 GpuBlacklist::kOsMacosx, os_version.get(), gpu_info); | |
43 EXPECT_EQ(flags.flags(), 0u); | |
44 | |
45 // Blacklist accelerated_compositing with exact setting. | |
46 const std::string exact_list_json = | |
47 "{\n" | |
48 " \"name\": \"gpu blacklist\",\n" | |
49 " \"version\": \"0.1\",\n" | |
50 " \"entries\": [\n" | |
51 " {\n" | |
52 " \"id\": \"5\",\n" | |
53 " \"os\": {\n" | |
54 " \"type\": \"macosx\",\n" | |
55 " \"version\": {\n" | |
56 " \"op\": \"=\",\n" | |
57 " \"number\": \"10.6.4\"\n" | |
58 " }\n" | |
59 " },\n" | |
60 " \"vendor_id\": \"0x10de\",\n" | |
61 " \"device_id\": \"0x0640\",\n" | |
62 " \"driver_version\": {\n" | |
63 " \"op\": \"=\",\n" | |
64 " \"number\": \"1.6.18\"\n" | |
65 " },\n" | |
66 " \"blacklist\": [\n" | |
67 " \"accelerated_compositing\"\n" | |
68 " ]\n" | |
69 " }\n" | |
70 " ]\n" | |
71 "}"; | |
72 EXPECT_TRUE(blacklist.LoadGpuBlacklist(exact_list_json, false)); | |
73 flags = blacklist.DetermineGpuFeatureFlags( | |
74 GpuBlacklist::kOsMacosx, os_version.get(), gpu_info); | |
75 EXPECT_EQ( | |
76 flags.flags(), | |
77 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureAcceleratedCompositing)); | |
78 | |
79 // Invalid json input should not change the current blacklist settings. | |
80 const std::string invalid_json = "invalid"; | |
81 EXPECT_FALSE(blacklist.LoadGpuBlacklist(invalid_json, false)); | |
82 flags = blacklist.DetermineGpuFeatureFlags( | |
83 GpuBlacklist::kOsMacosx, os_version.get(), gpu_info); | |
84 EXPECT_EQ( | |
85 flags.flags(), | |
86 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureAcceleratedCompositing)); | |
87 std::vector<uint32> entries; | |
88 blacklist.GetGpuFeatureFlagEntries( | |
89 GpuFeatureFlags::kGpuFeatureAcceleratedCompositing, entries); | |
90 EXPECT_EQ(entries.size(), 1u); | |
91 EXPECT_EQ(entries[0], 5u); | |
92 blacklist.GetGpuFeatureFlagEntries( | |
93 GpuFeatureFlags::kGpuFeatureAll, entries); | |
94 EXPECT_EQ(entries.size(), 1u); | |
95 EXPECT_EQ(entries[0], 5u); | |
96 EXPECT_EQ(blacklist.max_entry_id(), 5u); | |
97 | |
98 // Blacklist a vendor on all OS. | |
99 const std::string vendor_json = | |
100 "{\n" | |
101 " \"name\": \"gpu blacklist\",\n" | |
102 " \"version\": \"0.1\",\n" | |
103 " \"entries\": [\n" | |
104 " {\n" | |
105 " \"id\": \"1\",\n" | |
106 " \"vendor_id\": \"0x10de\",\n" | |
107 " \"blacklist\": [\n" | |
108 " \"webgl\"\n" | |
109 " ]\n" | |
110 " }\n" | |
111 " ]\n" | |
112 "}"; | |
113 // Blacklist entries won't be filtered to the current OS only upon loading. | |
114 EXPECT_TRUE(blacklist.LoadGpuBlacklist(vendor_json, false)); | |
115 flags = blacklist.DetermineGpuFeatureFlags( | |
116 GpuBlacklist::kOsMacosx, os_version.get(), gpu_info); | |
117 EXPECT_EQ(flags.flags(), | |
118 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); | |
119 flags = blacklist.DetermineGpuFeatureFlags( | |
120 GpuBlacklist::kOsWin, os_version.get(), gpu_info); | |
121 EXPECT_EQ(flags.flags(), | |
122 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); | |
123 flags = blacklist.DetermineGpuFeatureFlags( | |
124 GpuBlacklist::kOsLinux, os_version.get(), gpu_info); | |
125 EXPECT_EQ(flags.flags(), | |
126 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); | |
127 #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) | |
128 // Blacklist entries will be filtered to the current OS only upon loading. | |
129 EXPECT_TRUE(blacklist.LoadGpuBlacklist(vendor_json, true)); | |
130 flags = blacklist.DetermineGpuFeatureFlags( | |
131 GpuBlacklist::kOsMacosx, os_version.get(), gpu_info); | |
132 EXPECT_EQ(flags.flags(), | |
133 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); | |
134 flags = blacklist.DetermineGpuFeatureFlags( | |
135 GpuBlacklist::kOsWin, os_version.get(), gpu_info); | |
136 EXPECT_EQ(flags.flags(), | |
137 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); | |
138 flags = blacklist.DetermineGpuFeatureFlags( | |
139 GpuBlacklist::kOsLinux, os_version.get(), gpu_info); | |
140 EXPECT_EQ(flags.flags(), | |
141 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); | |
142 #endif | |
143 | |
144 | |
145 // Blacklist a vendor on Linux only. | |
146 const std::string vendor_linux_json = | |
147 "{\n" | |
148 " \"name\": \"gpu blacklist\",\n" | |
149 " \"version\": \"0.1\",\n" | |
150 " \"entries\": [\n" | |
151 " {\n" | |
152 " \"id\": \"1\",\n" | |
153 " \"os\": {\n" | |
154 " \"type\": \"linux\"\n" | |
155 " },\n" | |
156 " \"vendor_id\": \"0x10de\",\n" | |
157 " \"blacklist\": [\n" | |
158 " \"accelerated_2d_canvas\"\n" | |
159 " ]\n" | |
160 " }\n" | |
161 " ]\n" | |
162 "}"; | |
163 EXPECT_TRUE(blacklist.LoadGpuBlacklist(vendor_linux_json, false)); | |
164 flags = blacklist.DetermineGpuFeatureFlags( | |
165 GpuBlacklist::kOsMacosx, os_version.get(), gpu_info); | |
166 EXPECT_EQ(flags.flags(), 0u); | |
167 flags = blacklist.DetermineGpuFeatureFlags( | |
168 GpuBlacklist::kOsWin, os_version.get(), gpu_info); | |
169 EXPECT_EQ(flags.flags(), 0u); | |
170 flags = blacklist.DetermineGpuFeatureFlags( | |
171 GpuBlacklist::kOsLinux, os_version.get(), gpu_info); | |
172 EXPECT_EQ( | |
173 flags.flags(), | |
174 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureAccelerated2dCanvas)); | |
175 } | |
176 | |
OLD | NEW |