OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 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/command_line.h" |
| 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "ui/gl/gl_gl_api_implementation.h" |
| 9 #include "ui/gl/gl_implementation.h" |
| 10 #include "ui/gl/gl_switches.h" |
| 11 |
| 12 namespace gfx { |
| 13 |
| 14 class GLApiTest : public testing::Test { |
| 15 public: |
| 16 void SetUp() override { |
| 17 fake_extension_string_ = ""; |
| 18 num_fake_extension_strings_ = 0; |
| 19 fake_extension_strings_ = nullptr; |
| 20 |
| 21 driver_.reset(new DriverGL()); |
| 22 api_.reset(new RealGLApi()); |
| 23 |
| 24 driver_->fn.glGetStringFn = |
| 25 reinterpret_cast<glGetStringProc>(&FakeGetString); |
| 26 driver_->fn.glGetStringiFn = |
| 27 reinterpret_cast<glGetStringiProc>(&FakeGetStringi); |
| 28 driver_->fn.glGetIntegervFn = |
| 29 reinterpret_cast<glGetIntegervProc>(&FakeGetIntegervFn); |
| 30 } |
| 31 |
| 32 void TearDown() override { |
| 33 api_.reset(nullptr); |
| 34 driver_.reset(nullptr); |
| 35 |
| 36 SetGLImplementation(kGLImplementationNone); |
| 37 fake_extension_string_ = ""; |
| 38 num_fake_extension_strings_ = 0; |
| 39 fake_extension_strings_ = nullptr; |
| 40 } |
| 41 |
| 42 void InitializeAPI(base::CommandLine* command_line) { |
| 43 api_.reset(new RealGLApi()); |
| 44 if (command_line) |
| 45 api_->InitializeWithCommandLine(driver_.get(), command_line); |
| 46 else |
| 47 api_->Initialize(driver_.get()); |
| 48 } |
| 49 |
| 50 void SetFakeExtensionString(const char* fake_string) { |
| 51 SetGLImplementation(kGLImplementationDesktopGL); |
| 52 fake_extension_string_ = fake_string; |
| 53 } |
| 54 |
| 55 void SetFakeExtensionStrings(const char** fake_strings, uint32_t count) { |
| 56 SetGLImplementation(kGLImplementationDesktopGLCoreProfile); |
| 57 num_fake_extension_strings_ = count; |
| 58 fake_extension_strings_ = fake_strings; |
| 59 } |
| 60 |
| 61 static const GLubyte* FakeGetString(GLenum name) { |
| 62 return reinterpret_cast<const GLubyte*>(fake_extension_string_); |
| 63 } |
| 64 |
| 65 static void FakeGetIntegervFn(GLenum pname, GLint* params) { |
| 66 *params = num_fake_extension_strings_; |
| 67 } |
| 68 |
| 69 static const GLubyte* FakeGetStringi(GLenum name, GLuint index) { |
| 70 return (index < num_fake_extension_strings_) ? |
| 71 reinterpret_cast<const GLubyte*>(fake_extension_strings_[index]) : |
| 72 nullptr; |
| 73 } |
| 74 |
| 75 const char* GetExtensions() { |
| 76 return reinterpret_cast<const char*>(api_->glGetStringFn(GL_EXTENSIONS)); |
| 77 } |
| 78 |
| 79 uint32_t GetNumExtensions() { |
| 80 GLint num_extensions = 0; |
| 81 api_->glGetIntegervFn(GL_NUM_EXTENSIONS, &num_extensions); |
| 82 return static_cast<uint32_t>(num_extensions); |
| 83 } |
| 84 |
| 85 const char* GetExtensioni(uint32_t index) { |
| 86 return reinterpret_cast<const char*>(api_->glGetStringiFn(GL_EXTENSIONS, |
| 87 index)); |
| 88 } |
| 89 |
| 90 protected: |
| 91 static const char* fake_extension_string_; |
| 92 |
| 93 static uint32_t num_fake_extension_strings_; |
| 94 static const char** fake_extension_strings_; |
| 95 |
| 96 scoped_ptr<DriverGL> driver_; |
| 97 scoped_ptr<RealGLApi> api_; |
| 98 }; |
| 99 |
| 100 const char* GLApiTest::fake_extension_string_ = ""; |
| 101 |
| 102 uint32_t GLApiTest::num_fake_extension_strings_ = 0; |
| 103 const char** GLApiTest::fake_extension_strings_ = nullptr; |
| 104 |
| 105 TEST_F(GLApiTest, DisabledExtensionStringTest) { |
| 106 static const char* kFakeExtensions = "GL_EXT_1 GL_EXT_2 GL_EXT_3 GL_EXT_4"; |
| 107 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE"; |
| 108 static const char* kFilteredExtensions = "GL_EXT_3 GL_EXT_4"; |
| 109 |
| 110 SetFakeExtensionString(kFakeExtensions); |
| 111 InitializeAPI(nullptr); |
| 112 |
| 113 EXPECT_STREQ(kFakeExtensions, GetExtensions()); |
| 114 |
| 115 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
| 116 command_line.AppendSwitchASCII(switches::kDisableGLExtensions, |
| 117 kFakeDisabledExtensions); |
| 118 InitializeAPI(&command_line); |
| 119 |
| 120 EXPECT_STREQ(kFilteredExtensions, GetExtensions()); |
| 121 } |
| 122 |
| 123 TEST_F(GLApiTest, DisabledExtensionStringIndexTest) { |
| 124 static const char* kFakeExtensions[] = { |
| 125 "GL_EXT_1", |
| 126 "GL_EXT_2", |
| 127 "GL_EXT_3", |
| 128 "GL_EXT_4" |
| 129 }; |
| 130 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE"; |
| 131 static const char* kFilteredExtensions[] = { |
| 132 "GL_EXT_3", |
| 133 "GL_EXT_4" |
| 134 }; |
| 135 |
| 136 SetFakeExtensionStrings(kFakeExtensions, arraysize(kFakeExtensions)); |
| 137 InitializeAPI(nullptr); |
| 138 |
| 139 EXPECT_EQ(arraysize(kFakeExtensions), GetNumExtensions()); |
| 140 for (uint32_t i = 0; i < arraysize(kFakeExtensions); ++i) { |
| 141 EXPECT_STREQ(kFakeExtensions[i], GetExtensioni(i)); |
| 142 } |
| 143 |
| 144 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
| 145 command_line.AppendSwitchASCII(switches::kDisableGLExtensions, |
| 146 kFakeDisabledExtensions); |
| 147 InitializeAPI(&command_line); |
| 148 |
| 149 EXPECT_EQ(arraysize(kFilteredExtensions), GetNumExtensions()); |
| 150 for (uint32_t i = 0; i < arraysize(kFilteredExtensions); ++i) { |
| 151 EXPECT_STREQ(kFilteredExtensions[i], GetExtensioni(i)); |
| 152 } |
| 153 } |
| 154 |
| 155 } // namespace gpu |
OLD | NEW |