1// Copyright (c) 2013 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 "base/memory/scoped_ptr.h"
6#include "gpu/config/gpu_blacklist.h"
7#include "gpu/config/gpu_control_list_jsons.h"
8#include "gpu/config/gpu_feature_type.h"
9#include "gpu/config/gpu_info.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12const char kOsVersion[] = "10.6.4";
13
14namespace gpu {
15
16class GpuBlacklistTest : public testing::Test {
17 public:
18  GpuBlacklistTest() { }
19
20  virtual ~GpuBlacklistTest() { }
21
22  const GPUInfo& gpu_info() const {
23    return gpu_info_;
24  }
25
26  void RunFeatureTest(
27      const std::string feature_name, GpuFeatureType feature_type) {
28    const std::string json =
29        "{\n"
30        "  \"name\": \"gpu blacklist\",\n"
31        "  \"version\": \"0.1\",\n"
32        "  \"entries\": [\n"
33        "    {\n"
34        "      \"id\": 1,\n"
35        "      \"os\": {\n"
36        "        \"type\": \"macosx\"\n"
37        "      },\n"
38        "      \"vendor_id\": \"0x10de\",\n"
39        "      \"device_id\": [\"0x0640\"],\n"
40        "      \"features\": [\n"
41        "        \"" +
42        feature_name +
43        "\"\n"
44        "      ]\n"
45        "    }\n"
46        "  ]\n"
47        "}";
48
49    scoped_ptr<GpuBlacklist> blacklist(GpuBlacklist::Create());
50    EXPECT_TRUE(blacklist->LoadList(json, GpuBlacklist::kAllOs));
51    std::set<int> type = blacklist->MakeDecision(
52        GpuBlacklist::kOsMacosx, kOsVersion, gpu_info());
53    EXPECT_EQ(1u, type.size());
54    EXPECT_EQ(1u, type.count(feature_type));
55  }
56
57 protected:
58  virtual void SetUp() {
59    gpu_info_.gpu.vendor_id = 0x10de;
60    gpu_info_.gpu.device_id = 0x0640;
61    gpu_info_.driver_vendor = "NVIDIA";
62    gpu_info_.driver_version = "1.6.18";
63    gpu_info_.driver_date = "7-14-2009";
64    gpu_info_.machine_model_name = "MacBookPro";
65    gpu_info_.machine_model_version = "7.1";
66    gpu_info_.gl_vendor = "NVIDIA Corporation";
67    gpu_info_.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine";
68    gpu_info_.performance_stats.graphics = 5.0;
69    gpu_info_.performance_stats.gaming = 5.0;
70    gpu_info_.performance_stats.overall = 5.0;
71  }
72
73  virtual void TearDown() {
74  }
75
76 private:
77  GPUInfo gpu_info_;
78};
79
80TEST_F(GpuBlacklistTest, CurrentBlacklistValidation) {
81  scoped_ptr<GpuBlacklist> blacklist(GpuBlacklist::Create());
82  EXPECT_TRUE(blacklist->LoadList(
83      kSoftwareRenderingListJson, GpuBlacklist::kAllOs));
84}
85
86#define GPU_BLACKLIST_FEATURE_TEST(test_name, feature_name, feature_type) \
87TEST_F(GpuBlacklistTest, test_name) {                                     \
88  RunFeatureTest(feature_name, feature_type);                             \
89}
90
91GPU_BLACKLIST_FEATURE_TEST(Accelerated2DCanvas,
92                           "accelerated_2d_canvas",
93                           GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)
94
95GPU_BLACKLIST_FEATURE_TEST(GpuCompositing,
96                           "gpu_compositing",
97                           GPU_FEATURE_TYPE_GPU_COMPOSITING)
98
99GPU_BLACKLIST_FEATURE_TEST(WebGL,
100                           "webgl",
101                           GPU_FEATURE_TYPE_WEBGL)
102
103GPU_BLACKLIST_FEATURE_TEST(Flash3D,
104                           "flash_3d",
105                           GPU_FEATURE_TYPE_FLASH3D)
106
107GPU_BLACKLIST_FEATURE_TEST(FlashStage3D,
108                           "flash_stage3d",
109                           GPU_FEATURE_TYPE_FLASH_STAGE3D)
110
111GPU_BLACKLIST_FEATURE_TEST(FlashStage3DBaseline,
112                           "flash_stage3d_baseline",
113                           GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE)
114
115GPU_BLACKLIST_FEATURE_TEST(AcceleratedVideoDecode,
116                           "accelerated_video_decode",
117                           GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE)
118
119GPU_BLACKLIST_FEATURE_TEST(AcceleratedVideoEncode,
120                           "accelerated_video_encode",
121                           GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE)
122
123GPU_BLACKLIST_FEATURE_TEST(PanelFitting,
124                           "panel_fitting",
125                           GPU_FEATURE_TYPE_PANEL_FITTING)
126
127GPU_BLACKLIST_FEATURE_TEST(GpuRasterization,
128                           "gpu_rasterization",
129                           GPU_FEATURE_TYPE_GPU_RASTERIZATION)
130
131}  // namespace gpu
132