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

Side by Side Diff: ui/gl/gl_api_unittest.cc

Issue 2629633003: Refactor GL bindings so there is no global GLApi or DriverGL. (Closed)
Patch Set: rebase Created 3 years, 10 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 unified diff | Download patch
« no previous file with comments | « ui/gl/generate_bindings.py ('k') | ui/gl/gl_bindings.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/gl/gl_context.h" 12 #include "ui/gl/gl_context.h"
13 #include "ui/gl/gl_gl_api_implementation.h" 13 #include "ui/gl/gl_gl_api_implementation.h"
14 #include "ui/gl/gl_implementation.h" 14 #include "ui/gl/gl_implementation.h"
15 #include "ui/gl/gl_switches.h" 15 #include "ui/gl/gl_switches.h"
16 #include "ui/gl/gl_version_info.h"
16 #include "ui/gl/gpu_timing.h" 17 #include "ui/gl/gpu_timing.h"
17 18
18 namespace gl { 19 namespace gl {
19 20
20 class GLContextFake : public GLContext {
21 public:
22 bool Initialize(GLSurface* compatible_surface,
23 const GLContextAttribs& attribs) override {
24 return true;
25 }
26 bool MakeCurrent(GLSurface* surface) override { return true; }
27 void ReleaseCurrent(GLSurface* surface) override {}
28 bool IsCurrent(GLSurface* surface) override { return true; }
29 void* GetHandle() override { return NULL; }
30 scoped_refptr<GPUTimingClient> CreateGPUTimingClient() override {
31 return NULL;
32 }
33 void OnSetSwapInterval(int interval) override {}
34 GLContextFake() : GLContext(NULL) {}
35 protected:
36 ~GLContextFake() override {}
37 };
38
39 class GLApiTest : public testing::Test { 21 class GLApiTest : public testing::Test {
40 public: 22 public:
41 void SetUp() override { 23 void SetUp() override {
42 fake_extension_string_ = ""; 24 fake_extension_string_ = "";
43 fake_version_string_ = ""; 25 fake_version_string_ = "";
44 num_fake_extension_strings_ = 0; 26 num_fake_extension_strings_ = 0;
45 fake_extension_strings_ = nullptr; 27 fake_extension_strings_ = nullptr;
46 28
47 DCHECK(!g_current_gl_context_tls);
48 g_current_gl_context_tls = new base::ThreadLocalPointer<GLApi>;
49
50 SetGLGetProcAddressProc( 29 SetGLGetProcAddressProc(
51 static_cast<GLGetProcAddressProc>(&FakeGLGetProcAddress)); 30 static_cast<GLGetProcAddressProc>(&FakeGLGetProcAddress));
52 } 31 }
53 32
54 static GLFunctionPointerType GL_BINDING_CALL 33 static GLFunctionPointerType GL_BINDING_CALL
55 FakeGLGetProcAddress(const char* proc) { 34 FakeGLGetProcAddress(const char* proc) {
56 return reinterpret_cast<GLFunctionPointerType>(0x1); 35 return reinterpret_cast<GLFunctionPointerType>(0x1);
57 } 36 }
58 37
59 void TearDown() override { 38 void TearDown() override {
60 api_.reset(nullptr); 39 api_.reset(nullptr);
61 delete g_current_gl_context_tls; 40 driver_.reset(nullptr);
62 g_current_gl_context_tls = nullptr;
63 41
64 SetGLImplementation(kGLImplementationNone); 42 SetGLImplementation(kGLImplementationNone);
65 fake_extension_string_ = ""; 43 fake_extension_string_ = "";
66 fake_version_string_ = ""; 44 fake_version_string_ = "";
67 num_fake_extension_strings_ = 0; 45 num_fake_extension_strings_ = 0;
68 fake_extension_strings_ = nullptr; 46 fake_extension_strings_ = nullptr;
69 } 47 }
70 48
71 void InitializeAPI(base::CommandLine* command_line) { 49 void InitializeAPI(base::CommandLine* command_line) {
50 driver_.reset(new DriverGL());
51 driver_->fn.glGetStringFn = &FakeGetString;
52 driver_->fn.glGetStringiFn = &FakeGetStringi;
53 driver_->fn.glGetIntegervFn = &FakeGetIntegervFn;
54
72 api_.reset(new RealGLApi()); 55 api_.reset(new RealGLApi());
73 g_current_gl_context_tls->Set(api_.get()); 56 if (command_line)
57 api_->InitializeWithCommandLine(driver_.get(), command_line);
58 else
59 api_->Initialize(driver_.get());
74 60
75 g_driver_gl.ClearBindings();
76 g_driver_gl.fn.glGetStringFn = &FakeGetString;
77 g_driver_gl.fn.glGetStringiFn = &FakeGetStringi;
78 g_driver_gl.fn.glGetIntegervFn = &FakeGetIntegervFn;
79
80 fake_context_ = new GLContextFake();
81 if (command_line)
82 api_->InitializeWithCommandLine(&g_driver_gl, command_line);
83 else
84 api_->Initialize(&g_driver_gl);
85 api_->InitializeFilteredExtensions(); 61 api_->InitializeFilteredExtensions();
86 g_driver_gl.InitializeCustomDynamicBindings(fake_context_.get()); 62 std::unique_ptr<GLVersionInfo> version =
63 GetVersionInfoFromContext(api_.get());
64 driver_->InitializeDynamicBindings(
65 version.get(), GetGLExtensionsFromCurrentContext(api_.get()));
66 api_->set_version(std::move(version));
87 } 67 }
88 68
89 void SetFakeExtensionString(const char* fake_string) { 69 void SetFakeExtensionString(const char* fake_string) {
90 SetGLImplementation(kGLImplementationDesktopGL); 70 SetGLImplementation(kGLImplementationDesktopGL);
91 fake_extension_string_ = fake_string; 71 fake_extension_string_ = fake_string;
92 fake_version_string_ = "2.1"; 72 fake_version_string_ = "2.1";
93 } 73 }
94 74
95 void SetFakeExtensionStrings(const char** fake_strings, uint32_t count) { 75 void SetFakeExtensionStrings(const char** fake_strings, uint32_t count) {
96 SetGLImplementation(kGLImplementationDesktopGL); 76 SetGLImplementation(kGLImplementationDesktopGL);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 index)); 111 index));
132 } 112 }
133 113
134 protected: 114 protected:
135 static const char* fake_extension_string_; 115 static const char* fake_extension_string_;
136 static const char* fake_version_string_; 116 static const char* fake_version_string_;
137 117
138 static uint32_t num_fake_extension_strings_; 118 static uint32_t num_fake_extension_strings_;
139 static const char** fake_extension_strings_; 119 static const char** fake_extension_strings_;
140 120
141 scoped_refptr<GLContext> fake_context_;
142 std::unique_ptr<DriverGL> driver_; 121 std::unique_ptr<DriverGL> driver_;
143 std::unique_ptr<RealGLApi> api_; 122 std::unique_ptr<RealGLApi> api_;
144 }; 123 };
145 124
146 const char* GLApiTest::fake_extension_string_ = ""; 125 const char* GLApiTest::fake_extension_string_ = "";
147 const char* GLApiTest::fake_version_string_ = ""; 126 const char* GLApiTest::fake_version_string_ = "";
148 127
149 uint32_t GLApiTest::num_fake_extension_strings_ = 0; 128 uint32_t GLApiTest::num_fake_extension_strings_ = 0;
150 const char** GLApiTest::fake_extension_strings_ = nullptr; 129 const char** GLApiTest::fake_extension_strings_ = nullptr;
151 130
(...skipping 17 matching lines...) Expand all
169 148
170 TEST_F(GLApiTest, DisabledExtensionBitTest) { 149 TEST_F(GLApiTest, DisabledExtensionBitTest) {
171 static const char* kFakeExtensions[] = { 150 static const char* kFakeExtensions[] = {
172 "GL_ARB_timer_query" 151 "GL_ARB_timer_query"
173 }; 152 };
174 static const char* kFakeDisabledExtensions = "GL_ARB_timer_query"; 153 static const char* kFakeDisabledExtensions = "GL_ARB_timer_query";
175 154
176 SetFakeExtensionStrings(kFakeExtensions, arraysize(kFakeExtensions)); 155 SetFakeExtensionStrings(kFakeExtensions, arraysize(kFakeExtensions));
177 InitializeAPI(nullptr); 156 InitializeAPI(nullptr);
178 157
179 EXPECT_TRUE(g_driver_gl.ext.b_GL_ARB_timer_query); 158 EXPECT_TRUE(driver_->ext.b_GL_ARB_timer_query);
180 159
181 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); 160 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
182 command_line.AppendSwitchASCII(switches::kDisableGLExtensions, 161 command_line.AppendSwitchASCII(switches::kDisableGLExtensions,
183 kFakeDisabledExtensions); 162 kFakeDisabledExtensions);
184 InitializeAPI(&command_line); 163 InitializeAPI(&command_line);
185 164
186 EXPECT_FALSE(g_driver_gl.ext.b_GL_ARB_timer_query); 165 EXPECT_FALSE(driver_->ext.b_GL_ARB_timer_query);
187 } 166 }
188 167
189 TEST_F(GLApiTest, DisabledExtensionStringIndexTest) { 168 TEST_F(GLApiTest, DisabledExtensionStringIndexTest) {
190 static const char* kFakeExtensions[] = { 169 static const char* kFakeExtensions[] = {
191 "GL_EXT_1", 170 "GL_EXT_1",
192 "GL_EXT_2", 171 "GL_EXT_2",
193 "GL_EXT_3", 172 "GL_EXT_3",
194 "GL_EXT_4" 173 "GL_EXT_4"
195 }; 174 };
196 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE"; 175 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE";
(...skipping 15 matching lines...) Expand all
212 kFakeDisabledExtensions); 191 kFakeDisabledExtensions);
213 InitializeAPI(&command_line); 192 InitializeAPI(&command_line);
214 193
215 EXPECT_EQ(arraysize(kFilteredExtensions), GetNumExtensions()); 194 EXPECT_EQ(arraysize(kFilteredExtensions), GetNumExtensions());
216 for (uint32_t i = 0; i < arraysize(kFilteredExtensions); ++i) { 195 for (uint32_t i = 0; i < arraysize(kFilteredExtensions); ++i) {
217 EXPECT_STREQ(kFilteredExtensions[i], GetExtensioni(i)); 196 EXPECT_STREQ(kFilteredExtensions[i], GetExtensioni(i));
218 } 197 }
219 } 198 }
220 199
221 } // namespace gl 200 } // namespace gl
OLDNEW
« no previous file with comments | « ui/gl/generate_bindings.py ('k') | ui/gl/gl_bindings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698