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

Unified Diff: content/browser/gpu/gpu_blacklist_unittest.cc

Issue 12976004: Generalzie GpuBlacklist to GpuControlList. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 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
« no previous file with comments | « content/browser/gpu/gpu_blacklist.cc ('k') | content/browser/gpu/gpu_control_list.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/gpu/gpu_blacklist_unittest.cc
===================================================================
--- content/browser/gpu/gpu_blacklist_unittest.cc (revision 189678)
+++ content/browser/gpu/gpu_blacklist_unittest.cc (working copy)
@@ -1,23 +1,18 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// 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/base_paths.h"
#include "base/file_util.h"
#include "base/files/file_path.h"
#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "content/browser/gpu/gpu_blacklist.h"
+#include "content/public/common/gpu_feature_type.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
namespace content {
@@ -31,14 +26,39 @@
return gpu_info_;
}
- GpuBlacklist* Create() {
- GpuBlacklist* rt = new GpuBlacklist();
- return rt;
+ void RunFeatureTest(
+ const std::string feature_name, GpuFeatureType feature_type) {
+ const std::string json =
+ "{\n"
+ " \"name\": \"gpu blacklist\",\n"
+ " \"version\": \"0.1\",\n"
+ " \"entries\": [\n"
+ " {\n"
+ " \"id\": 1,\n"
+ " \"os\": {\n"
+ " \"type\": \"macosx\"\n"
+ " },\n"
+ " \"vendor_id\": \"0x10de\",\n"
+ " \"device_id\": [\"0x0640\"],\n"
+ " \"features\": [\n"
+ " \"" +
+ feature_name +
+ "\"\n"
+ " ]\n"
+ " }\n"
+ " ]\n"
+ "}";
+
+ scoped_ptr<GpuBlacklist> blacklist(GpuBlacklist::Create());
+ EXPECT_TRUE(blacklist->LoadList(json, GpuBlacklist::kAllOs));
+ int type = blacklist->MakeDecision(
+ GpuBlacklist::kOsMacosx, kOsVersion, gpu_info());
+ EXPECT_EQ(static_cast<int>(feature_type), type);
}
protected:
virtual void SetUp() {
- gpu_info_.gpu.vendor_id = kNvidiaVendorId;
+ gpu_info_.gpu.vendor_id = 0x10de;
gpu_info_.gpu.device_id = 0x0640;
gpu_info_.driver_vendor = "NVIDIA";
gpu_info_.driver_version = "1.6.18";
@@ -74,1449 +94,70 @@
ASSERT_EQ(data_file_size,
file_util::ReadFile(data_file, data.get(), data_file_size));
std::string json_string(data.get(), data_file_size);
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(json_string, GpuBlacklist::kAllOs));
+ scoped_ptr<GpuBlacklist> blacklist(GpuBlacklist::Create());
+ EXPECT_TRUE(blacklist->LoadList(json_string, GpuBlacklist::kAllOs));
EXPECT_FALSE(blacklist->contains_unknown_fields());
}
-TEST_F(GpuBlacklistTest, DefaultBlacklistSettings) {
- scoped_ptr<GpuBlacklist> blacklist(Create());
- // Default blacklist settings: all feature are allowed.
- GpuBlacklist::Decision decision = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_EQ(0, decision.blacklisted_features);
- EXPECT_EQ(GPU_SWITCHING_OPTION_UNKNOWN, decision.gpu_switching);
+#define GPU_BLACKLIST_FEATURE_TEST(test_name, feature_name, feature_type) \
+TEST_F(GpuBlacklistTest, test_name) { \
+ RunFeatureTest(feature_name, feature_type); \
}
-TEST_F(GpuBlacklistTest, EmptyBlacklist) {
- // Empty list: all features are allowed.
- const std::string empty_list_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"2.5\",\n"
- " \"entries\": [\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
+GPU_BLACKLIST_FEATURE_TEST(Accelerated2DCanvas,
+ "accelerated_2d_canvas",
+ GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(empty_list_json,
- GpuBlacklist::kAllOs));
- EXPECT_EQ("2.5", blacklist->GetVersion());
- GpuBlacklist::Decision decision = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info());
- EXPECT_EQ(0, decision.blacklisted_features);
- EXPECT_EQ(GPU_SWITCHING_OPTION_UNKNOWN, decision.gpu_switching);
-}
+GPU_BLACKLIST_FEATURE_TEST(AcceleratedCompositing,
+ "accelerated_compositing",
+ GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING)
-TEST_F(GpuBlacklistTest, DetailedEntryAndInvalidJson) {
- // Blacklist accelerated_compositing with exact setting.
- const std::string exact_list_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 5,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\",\n"
- " \"version\": {\n"
- " \"op\": \"=\",\n"
- " \"number\": \"10.6.4\"\n"
- " }\n"
- " },\n"
- " \"vendor_id\": \"0x10de\",\n"
- " \"device_id\": [\"0x0640\"],\n"
- " \"driver_version\": {\n"
- " \"op\": \"=\",\n"
- " \"number\": \"1.6.18\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"accelerated_compositing\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
+GPU_BLACKLIST_FEATURE_TEST(WebGL,
+ "webgl",
+ GPU_FEATURE_TYPE_WEBGL)
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(exact_list_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING, type);
+GPU_BLACKLIST_FEATURE_TEST(Multisampling,
+ "multisampling",
+ GPU_FEATURE_TYPE_MULTISAMPLING)
- // Invalid json input should not change the current blacklist settings.
- const std::string invalid_json = "invalid";
+GPU_BLACKLIST_FEATURE_TEST(Flash3D,
+ "flash_3d",
+ GPU_FEATURE_TYPE_FLASH3D)
- EXPECT_FALSE(blacklist->LoadGpuBlacklist(invalid_json, GpuBlacklist::kAllOs));
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING, type);
- std::vector<uint32> entries;
- blacklist->GetDecisionEntries(&entries, false);
- ASSERT_EQ(1u, entries.size());
- EXPECT_EQ(5u, entries[0]);
- EXPECT_EQ(5u, blacklist->max_entry_id());
-}
+GPU_BLACKLIST_FEATURE_TEST(FlashStage3D,
+ "flash_stage3d",
+ GPU_FEATURE_TYPE_FLASH_STAGE3D)
-TEST_F(GpuBlacklistTest, VendorOnAllOsEntry) {
- // Blacklist a vendor on all OS.
- const std::string vendor_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"vendor_id\": \"0x10de\",\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
+GPU_BLACKLIST_FEATURE_TEST(FlashStage3DBaseline,
+ "flash_stage3d_baseline",
+ GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE)
- // Blacklist entries won't be filtered to the current OS only upon loading.
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(vendor_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || \
- defined(OS_OPENBSD)
- // Blacklist entries will be filtered to the current OS only upon loading.
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(vendor_json,
- GpuBlacklist::kCurrentOsOnly));
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-#endif
-}
+GPU_BLACKLIST_FEATURE_TEST(TextureSharing,
+ "texture_sharing",
+ GPU_FEATURE_TYPE_TEXTURE_SHARING)
-TEST_F(GpuBlacklistTest, VendorOnLinuxEntry) {
- // Blacklist a vendor on Linux only.
- const std::string vendor_linux_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x10de\",\n"
- " \"blacklist\": [\n"
- " \"accelerated_2d_canvas\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
+GPU_BLACKLIST_FEATURE_TEST(AcceleratedVideoDecode,
+ "accelerated_video_decode",
+ GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE)
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(vendor_linux_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, type);
-}
+GPU_BLACKLIST_FEATURE_TEST(Css3D,
+ "3d_css",
+ GPU_FEATURE_TYPE_3D_CSS)
-TEST_F(GpuBlacklistTest, AllExceptNVidiaOnLinuxEntry) {
- // Blacklist all cards in Linux except NVIDIA.
- const std::string linux_except_nvidia_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"exceptions\": [\n"
- " {\n"
- " \"vendor_id\": \"0x10de\"\n"
- " }\n"
- " ],\n"
- " \"blacklist\": [\n"
- " \"accelerated_2d_canvas\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
+GPU_BLACKLIST_FEATURE_TEST(AcceleratedVideo,
+ "accelerated_video",
+ GPU_FEATURE_TYPE_ACCELERATED_VIDEO)
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(linux_except_nvidia_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
-}
+GPU_BLACKLIST_FEATURE_TEST(PanelFitting,
+ "panel_fitting",
+ GPU_FEATURE_TYPE_PANEL_FITTING)
-TEST_F(GpuBlacklistTest, AllExceptIntelOnLinuxEntry) {
- // Blacklist all cards in Linux except Intel.
- const std::string linux_except_intel_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"exceptions\": [\n"
- " {\n"
- " \"vendor_id\": \"0x8086\"\n"
- " }\n"
- " ],\n"
- " \"blacklist\": [\n"
- " \"accelerated_2d_canvas\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
+GPU_BLACKLIST_FEATURE_TEST(ForceCompositingMode,
+ "force_compositing_mode",
+ GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE)
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(linux_except_intel_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, type);
-}
+GPU_BLACKLIST_FEATURE_TEST(All,
+ "all",
+ GPU_FEATURE_TYPE_ALL)
-TEST_F(GpuBlacklistTest, DateOnWindowsEntry) {
- // Blacklist all drivers earlier than 2010-5-8 in Windows.
- const std::string date_windows_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"win\"\n"
- " },\n"
- " \"driver_date\": {\n"
- " \"op\": \"<\",\n"
- " \"number\": \"2010.5.8\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"accelerated_2d_canvas\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
-
- GPUInfo gpu_info;
- gpu_info.driver_date = "7-14-2009";
-
- EXPECT_TRUE(
- blacklist->LoadGpuBlacklist(date_windows_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, type);
-
- gpu_info.driver_date = "07-14-2009";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, type);
-
- gpu_info.driver_date = "1-1-2010";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, type);
-
- gpu_info.driver_date = "05-07-2010";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, type);
-
- gpu_info.driver_date = "5-8-2010";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_date = "5-9-2010";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_date = "6-2-2010";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-}
-
-TEST_F(GpuBlacklistTest, MultipleDevicesEntry) {
- const std::string devices_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"vendor_id\": \"0x10de\",\n"
- " \"device_id\": [\"0x1023\", \"0x0640\"],\n"
- " \"blacklist\": [\n"
- " \"multisampling\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
-
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(devices_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_MULTISAMPLING, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_MULTISAMPLING, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_MULTISAMPLING, type);
-}
-
-TEST_F(GpuBlacklistTest, ChromeOSEntry) {
- const std::string devices_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"chromeos\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
-
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(devices_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsChromeOS, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
-}
-
-TEST_F(GpuBlacklistTest, ChromeVersionEntry) {
- const std::string browser_version_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"browser_version\": {\n"
- " \"op\": \">=\",\n"
- " \"number\": \"10\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist9(Create());
- EXPECT_TRUE(blacklist9->LoadGpuBlacklist("9.0", browser_version_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist9->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
-
- scoped_ptr<GpuBlacklist> blacklist10(Create());
- EXPECT_TRUE(blacklist10->LoadGpuBlacklist("10.0", browser_version_json,
- GpuBlacklist::kAllOs));
- type = blacklist10->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, MalformedVendor) {
- // vendor_id is defined as list instead of string.
- const std::string malformed_vendor_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"vendor_id\": \"[0x10de]\",\n"
- " \"blacklist\": [\n"
- " \"accelerated_2d_canvas\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
-
- EXPECT_FALSE(blacklist->LoadGpuBlacklist(malformed_vendor_json,
- GpuBlacklist::kAllOs));
-}
-
-TEST_F(GpuBlacklistTest, UnknownField) {
- const std::string unknown_field_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"unknown_field\": 0,\n"
- " \"blacklist\": [\n"
- " \"accelerated_2d_canvas\"\n"
- " ]\n"
- " },\n"
- " {\n"
- " \"id\": 2,\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
-
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(unknown_field_json,
- GpuBlacklist::kAllOs));
- EXPECT_EQ(1u, blacklist->num_entries());
- EXPECT_TRUE(blacklist->contains_unknown_fields());
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, UnknownExceptionField) {
- const std::string unknown_exception_field_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"unknown_field\": 0,\n"
- " \"blacklist\": [\n"
- " \"accelerated_compositing\"\n"
- " ]\n"
- " },\n"
- " {\n"
- " \"id\": 2,\n"
- " \"exceptions\": [\n"
- " {\n"
- " \"unknown_field\": 0\n"
- " }\n"
- " ],\n"
- " \"blacklist\": [\n"
- " \"accelerated_2d_canvas\"\n"
- " ]\n"
- " },\n"
- " {\n"
- " \"id\": 3,\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
-
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(unknown_exception_field_json,
- GpuBlacklist::kAllOs));
- EXPECT_EQ(1u, blacklist->num_entries());
- EXPECT_TRUE(blacklist->contains_unknown_fields());
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, UnknownFeature) {
- const std::string unknown_feature_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"blacklist\": [\n"
- " \"accelerated_something\",\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
-
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(unknown_feature_json,
- GpuBlacklist::kAllOs));
- EXPECT_EQ(1u, blacklist->num_entries());
- EXPECT_TRUE(blacklist->contains_unknown_fields());
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, GlVendor) {
- const std::string gl_vendor_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"gl_vendor\": {\n"
- " \"op\": \"beginwith\",\n"
- " \"value\": \"NVIDIA\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(gl_vendor_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, GlRenderer) {
- const std::string gl_renderer_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"gl_renderer\": {\n"
- " \"op\": \"contains\",\n"
- " \"value\": \"GeForce\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(gl_renderer_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, PerfGraphics) {
- const std::string json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"perf_graphics\": {\n"
- " \"op\": \"<\",\n"
- " \"value\": \"6.0\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, PerfGaming) {
- const std::string json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"perf_gaming\": {\n"
- " \"op\": \"<=\",\n"
- " \"value\": \"4.0\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(0, type);
-}
-
-TEST_F(GpuBlacklistTest, PerfOverall) {
- const std::string json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"perf_overall\": {\n"
- " \"op\": \"between\",\n"
- " \"value\": \"1.0\",\n"
- " \"value2\": \"9.0\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, DisabledEntry) {
- const std::string disabled_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"disabled\": true,\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(disabled_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(type, 0);
- std::vector<uint32> flag_entries;
- blacklist->GetDecisionEntries(&flag_entries, false);
- EXPECT_EQ(0u, flag_entries.size());
- blacklist->GetDecisionEntries(&flag_entries, true);
- EXPECT_EQ(1u, flag_entries.size());
-}
-
-TEST_F(GpuBlacklistTest, Optimus) {
- const std::string optimus_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"multi_gpu_style\": \"optimus\",\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.optimus = true;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(optimus_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, AMDSwitchable) {
- const std::string amd_switchable_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\"\n"
- " },\n"
- " \"multi_gpu_style\": \"amd_switchable\",\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.amd_switchable = true;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(amd_switchable_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, LexicalDriverVersion) {
- const std::string lexical_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x1002\",\n"
- " \"driver_version\": {\n"
- " \"op\": \"<\",\n"
- " \"style\": \"lexical\",\n"
- " \"number\": \"8.201\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = 0x1002;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(lexical_json, GpuBlacklist::kAllOs));
-
- gpu_info.driver_version = "8.001.100";
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.109";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.10900";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.109.100";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.2";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.20";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.200";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.20.100";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.201";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "8.2010";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "8.21";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "8.21.100";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "9.002";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "9.201";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "12";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "12.201";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-}
-
-TEST_F(GpuBlacklistTest, LexicalDriverVersion2) {
- const std::string lexical_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x1002\",\n"
- " \"driver_version\": {\n"
- " \"op\": \"<\",\n"
- " \"style\": \"lexical\",\n"
- " \"number\": \"9.002\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = 0x1002;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(lexical_json, GpuBlacklist::kAllOs));
-
- gpu_info.driver_version = "8.001.100";
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.109";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.10900";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.109.100";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.2";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.20";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.200";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.20.100";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.201";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.2010";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.21";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.21.100";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "9.002";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "9.201";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "12";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- gpu_info.driver_version = "12.201";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-}
-
-TEST_F(GpuBlacklistTest, LexicalDriverVersion3) {
- const std::string lexical_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x1002\",\n"
- " \"driver_version\": {\n"
- " \"op\": \"=\",\n"
- " \"style\": \"lexical\",\n"
- " \"number\": \"8.76\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = 0x1002;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(lexical_json, GpuBlacklist::kAllOs));
-
- gpu_info.driver_version = "8.76";
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.768";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-
- gpu_info.driver_version = "8.76.8";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, MultipleGPUsAny) {
- const std::string multi_gpu_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\"\n"
- " },\n"
- " \"vendor_id\": \"0x8086\",\n"
- " \"device_id\": [\"0x0166\"],\n"
- " \"multi_gpu_category\": \"any\",\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = kNvidiaVendorId;
- gpu_info.gpu.device_id = kNvidiaDeviceId;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(multi_gpu_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- GPUInfo::GPUDevice gpu_device;
- gpu_device.vendor_id = kIntelVendorId;
- gpu_device.device_id = kIntelDeviceId;
- gpu_info.secondary_gpus.push_back(gpu_device);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, MultipleGPUsSecondary) {
- const std::string multi_gpu_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\"\n"
- " },\n"
- " \"vendor_id\": \"0x8086\",\n"
- " \"device_id\": [\"0x0166\"],\n"
- " \"multi_gpu_category\": \"secondary\",\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = kNvidiaVendorId;
- gpu_info.gpu.device_id = kNvidiaDeviceId;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(multi_gpu_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
-
- GPUInfo::GPUDevice gpu_device;
- gpu_device.vendor_id = kIntelVendorId;
- gpu_device.device_id = kIntelDeviceId;
- gpu_info.secondary_gpus.push_back(gpu_device);
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
-}
-
-TEST_F(GpuBlacklistTest, GpuSwitching) {
- const std::string gpu_switching_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\"\n"
- " },\n"
- " \"gpu_switching\": \"force_discrete\"\n"
- " },\n"
- " {\n"
- " \"id\": 2,\n"
- " \"os\": {\n"
- " \"type\": \"win\"\n"
- " },\n"
- " \"gpu_switching\": \"force_integrated\"\n"
- " },\n"
- " {\n"
- " \"id\": 3,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"gpu_switching\": \"automatic\"\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(gpu_switching_json,
- GpuBlacklist::kAllOs));
- GpuSwitchingOption switching = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).gpu_switching;
- EXPECT_EQ(GPU_SWITCHING_OPTION_FORCE_DISCRETE, switching);
- std::vector<uint32> entries;
- blacklist->GetDecisionEntries(&entries, false);
- ASSERT_EQ(1u, entries.size());
- EXPECT_EQ(1u, entries[0]);
-
- blacklist.reset(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(gpu_switching_json,
- GpuBlacklist::kAllOs));
- switching = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsWin, kOsVersion, gpu_info()).gpu_switching;
- EXPECT_EQ(GPU_SWITCHING_OPTION_FORCE_INTEGRATED, switching);
- blacklist->GetDecisionEntries(&entries, false);
- ASSERT_EQ(1u, entries.size());
- EXPECT_EQ(2u, entries[0]);
-
- blacklist.reset(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(gpu_switching_json,
- GpuBlacklist::kAllOs));
- switching = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info()).gpu_switching;
- EXPECT_EQ(GPU_SWITCHING_OPTION_AUTOMATIC, switching);
- blacklist->GetDecisionEntries(&entries, false);
- ASSERT_EQ(1u, entries.size());
- EXPECT_EQ(3u, entries[0]);
-}
-
-TEST_F(GpuBlacklistTest, VideoDecode) {
- const std::string video_decode_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\"\n"
- " },\n"
- " \"vendor_id\": \"0x10de\",\n"
- " \"device_id\": [\"0x0640\"],\n"
- " \"blacklist\": [\n"
- " \"accelerated_video_decode\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(video_decode_json,
- GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE, type);
-}
-
-TEST_F(GpuBlacklistTest, DualGpuModel) {
- const std::string model_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 5,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\",\n"
- " \"version\": {\n"
- " \"op\": \">=\",\n"
- " \"number\": \"10.7\"\n"
- " }\n"
- " },\n"
- " \"machine_model\": {\n"
- " \"name\": {\n"
- " \"op\": \"=\",\n"
- " \"value\": \"MacBookPro\"\n"
- " },\n"
- " \"version\": {\n"
- " \"op\": \"<\",\n"
- " \"number\": \"8\"\n"
- " }\n"
- " },\n"
- " \"gpu_count\": {\n"
- " \"op\": \"=\",\n"
- " \"value\": \"2\"\n"
- " },\n"
- " \"gpu_switching\": \"force_discrete\"\n"
- " }\n"
- " ]\n"
- "}";
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(model_json, GpuBlacklist::kAllOs));
- // Insert a second GPU.
- GPUInfo gpu_info;
- gpu_info.secondary_gpus.push_back(GPUInfo::GPUDevice());
- GpuSwitchingOption switching = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, "10.7.2", gpu_info).gpu_switching;
- EXPECT_EQ(GPU_SWITCHING_OPTION_FORCE_DISCRETE, switching);
-}
-
-TEST_F(GpuBlacklistTest, Css3D) {
- const std::string css_3d_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\"\n"
- " },\n"
- " \"vendor_id\": \"0x10de\",\n"
- " \"device_id\": [\"0x0640\"],\n"
- " \"blacklist\": [\n"
- " \"3d_css\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(css_3d_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_3D_CSS, type);
-}
-
-TEST_F(GpuBlacklistTest, Video) {
- const std::string video_json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"macosx\"\n"
- " },\n"
- " \"vendor_id\": \"0x10de\",\n"
- " \"device_id\": [\"0x0640\"],\n"
- " \"blacklist\": [\n"
- " \"accelerated_video\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(video_json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info()).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_VIDEO, type);
-}
-
-TEST_F(GpuBlacklistTest, NeedsMoreInfo) {
- const std::string json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x8086\",\n"
- " \"driver_version\": {\n"
- " \"op\": \"<\",\n"
- " \"number\": \"10.7\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = kIntelVendorId;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(json, GpuBlacklist::kAllOs));
-
- // The case this entry does not apply.
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- EXPECT_FALSE(blacklist->needs_more_info());
-
- // The case this entry might apply, but need more info.
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- EXPECT_TRUE(blacklist->needs_more_info());
-
- // The case we have full info, and this entry applies.
- gpu_info.driver_version = "10.6";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- EXPECT_FALSE(blacklist->needs_more_info());
-
- // The case we have full info, and this entry does not apply.
- gpu_info.driver_version = "10.8";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- EXPECT_FALSE(blacklist->needs_more_info());
-}
-
-TEST_F(GpuBlacklistTest, NeedsMoreInfoForExceptions) {
- const std::string json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x8086\",\n"
- " \"exceptions\": [\n"
- " {\n"
- " \"gl_renderer\": {\n"
- " \"op\": \"contains\",\n"
- " \"value\": \"mesa\"\n"
- " }\n"
- " }\n"
- " ],\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = kIntelVendorId;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(json, GpuBlacklist::kAllOs));
-
- // The case this entry does not apply.
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsMacosx, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- EXPECT_FALSE(blacklist->needs_more_info());
-
- // The case this entry might apply, but need more info.
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- EXPECT_TRUE(blacklist->needs_more_info());
-
- // The case we have full info, and the exception applies (so the entry
- // does not apply).
- gpu_info.gl_renderer = "mesa";
- type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(0, type);
- EXPECT_FALSE(blacklist->needs_more_info());
-
- // The case we have full info, and this entry applies.
- gpu_info.gl_renderer = "my renderer";
- type = blacklist->MakeBlacklistDecision(GpuBlacklist::kOsLinux, kOsVersion,
- gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- EXPECT_FALSE(blacklist->needs_more_info());
-}
-
-TEST_F(GpuBlacklistTest, IgnorableEntries) {
- // If an entry will not change the blacklist decisions, then it should not
- // trigger the needs_more_info flag.
- const std::string json =
- "{\n"
- " \"name\": \"gpu blacklist\",\n"
- " \"version\": \"0.1\",\n"
- " \"entries\": [\n"
- " {\n"
- " \"id\": 1,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x8086\",\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " },\n"
- " {\n"
- " \"id\": 2,\n"
- " \"os\": {\n"
- " \"type\": \"linux\"\n"
- " },\n"
- " \"vendor_id\": \"0x8086\",\n"
- " \"driver_version\": {\n"
- " \"op\": \"<\",\n"
- " \"number\": \"10.7\"\n"
- " },\n"
- " \"blacklist\": [\n"
- " \"webgl\"\n"
- " ]\n"
- " }\n"
- " ]\n"
- "}";
-
- GPUInfo gpu_info;
- gpu_info.gpu.vendor_id = kIntelVendorId;
-
- scoped_ptr<GpuBlacklist> blacklist(Create());
- EXPECT_TRUE(blacklist->LoadGpuBlacklist(json, GpuBlacklist::kAllOs));
- GpuFeatureType type = blacklist->MakeBlacklistDecision(
- GpuBlacklist::kOsLinux, kOsVersion, gpu_info).blacklisted_features;
- EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, type);
- EXPECT_FALSE(blacklist->needs_more_info());
-}
-
} // namespace content
« no previous file with comments | « content/browser/gpu/gpu_blacklist.cc ('k') | content/browser/gpu/gpu_control_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698