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

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

Issue 1253433002: Fix GL extension filtering so that extension bits are set correctly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove RealGLApi::InitializeWithContext Created 5 years, 4 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 | « no previous file | ui/gl/gl_gl_api_implementation.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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/gl/gl_context.h"
8 #include "ui/gl/gl_gl_api_implementation.h" 9 #include "ui/gl/gl_gl_api_implementation.h"
9 #include "ui/gl/gl_implementation.h" 10 #include "ui/gl/gl_implementation.h"
10 #include "ui/gl/gl_switches.h" 11 #include "ui/gl/gl_switches.h"
12 #include "ui/gl/gpu_timing.h"
11 13
12 namespace gfx { 14 namespace gfx {
13 15
16 class GLContextFake : public GLContext {
17 public:
18 bool Initialize(GLSurface* compatible_surface,
19 GpuPreference gpu_preference) override {
20 return true;
21 }
22 void Destroy() override {}
23 bool MakeCurrent(GLSurface* surface) override { return true; }
24 void ReleaseCurrent(GLSurface* surface) override {}
25 bool IsCurrent(GLSurface* surface) override { return true; }
26 void* GetHandle() override { return NULL; }
27 scoped_refptr<gfx::GPUTimingClient> CreateGPUTimingClient() override {
28 return NULL;
29 }
30 void OnSetSwapInterval(int interval) override {}
31 GLContextFake() : GLContext(NULL) {}
32 protected:
33 ~GLContextFake() override {}
34 };
35
14 class GLApiTest : public testing::Test { 36 class GLApiTest : public testing::Test {
15 public: 37 public:
16 void SetUp() override { 38 void SetUp() override {
17 fake_extension_string_ = ""; 39 fake_extension_string_ = "";
18 num_fake_extension_strings_ = 0; 40 num_fake_extension_strings_ = 0;
19 fake_extension_strings_ = nullptr; 41 fake_extension_strings_ = nullptr;
20 42
21 driver_.reset(new DriverGL()); 43 g_current_gl_context_tls = new base::ThreadLocalPointer<GLApi>;
22 api_.reset(new RealGLApi()); 44 api_.reset(new RealGLApi());
23 45
24 driver_->fn.glGetStringFn = &FakeGetString; 46 g_driver_gl.ClearBindings();
25 driver_->fn.glGetStringiFn = &FakeGetStringi; 47 g_driver_gl.fn.glGetStringFn = &FakeGetString;
26 driver_->fn.glGetIntegervFn = &FakeGetIntegervFn; 48 g_driver_gl.fn.glGetStringiFn = &FakeGetStringi;
49 g_driver_gl.fn.glGetIntegervFn = &FakeGetIntegervFn;
50
51 SetGLGetProcAddressProc(
52 static_cast<GLGetProcAddressProc>(&FakeGLGetProcAddress));
53 }
54
55 static void* GL_BINDING_CALL FakeGLGetProcAddress(const char *proc) {
56 return reinterpret_cast<void*>(0x1);
27 } 57 }
28 58
29 void TearDown() override { 59 void TearDown() override {
30 api_.reset(nullptr); 60 api_.reset(nullptr);
31 driver_.reset(nullptr); 61 delete g_current_gl_context_tls;
32 62
33 SetGLImplementation(kGLImplementationNone); 63 SetGLImplementation(kGLImplementationNone);
34 fake_extension_string_ = ""; 64 fake_extension_string_ = "";
35 num_fake_extension_strings_ = 0; 65 num_fake_extension_strings_ = 0;
36 fake_extension_strings_ = nullptr; 66 fake_extension_strings_ = nullptr;
37 } 67 }
38 68
39 void InitializeAPI(base::CommandLine* command_line) { 69 void InitializeAPI(base::CommandLine* command_line) {
40 api_.reset(new RealGLApi()); 70 api_.reset(new RealGLApi());
71 g_current_gl_context_tls->Set(api_.get());
72
73 fake_context_ = new GLContextFake();
41 if (command_line) 74 if (command_line)
42 api_->InitializeWithCommandLine(driver_.get(), command_line); 75 api_->InitializeWithCommandLine(&g_driver_gl, command_line);
43 else 76 else
44 api_->Initialize(driver_.get()); 77 api_->Initialize(&g_driver_gl);
45 api_->InitializeWithContext(); 78 api_->InitializeFilteredExtensions();
79 g_driver_gl.InitializeCustomDynamicBindings(fake_context_.get());
46 } 80 }
47 81
48 void SetFakeExtensionString(const char* fake_string) { 82 void SetFakeExtensionString(const char* fake_string) {
49 SetGLImplementation(kGLImplementationDesktopGL); 83 SetGLImplementation(kGLImplementationDesktopGL);
50 fake_extension_string_ = fake_string; 84 fake_extension_string_ = fake_string;
51 } 85 }
52 86
53 void SetFakeExtensionStrings(const char** fake_strings, uint32_t count) { 87 void SetFakeExtensionStrings(const char** fake_strings, uint32_t count) {
54 SetGLImplementation(kGLImplementationDesktopGLCoreProfile); 88 SetGLImplementation(kGLImplementationDesktopGLCoreProfile);
55 num_fake_extension_strings_ = count; 89 num_fake_extension_strings_ = count;
(...skipping 29 matching lines...) Expand all
85 return reinterpret_cast<const char*>(api_->glGetStringiFn(GL_EXTENSIONS, 119 return reinterpret_cast<const char*>(api_->glGetStringiFn(GL_EXTENSIONS,
86 index)); 120 index));
87 } 121 }
88 122
89 protected: 123 protected:
90 static const char* fake_extension_string_; 124 static const char* fake_extension_string_;
91 125
92 static uint32_t num_fake_extension_strings_; 126 static uint32_t num_fake_extension_strings_;
93 static const char** fake_extension_strings_; 127 static const char** fake_extension_strings_;
94 128
129 scoped_refptr<GLContext> fake_context_;
95 scoped_ptr<DriverGL> driver_; 130 scoped_ptr<DriverGL> driver_;
96 scoped_ptr<RealGLApi> api_; 131 scoped_ptr<RealGLApi> api_;
97 }; 132 };
98 133
99 const char* GLApiTest::fake_extension_string_ = ""; 134 const char* GLApiTest::fake_extension_string_ = "";
100 135
101 uint32_t GLApiTest::num_fake_extension_strings_ = 0; 136 uint32_t GLApiTest::num_fake_extension_strings_ = 0;
102 const char** GLApiTest::fake_extension_strings_ = nullptr; 137 const char** GLApiTest::fake_extension_strings_ = nullptr;
103 138
104 TEST_F(GLApiTest, DisabledExtensionStringTest) { 139 TEST_F(GLApiTest, DisabledExtensionStringTest) {
105 static const char* kFakeExtensions = "GL_EXT_1 GL_EXT_2 GL_EXT_3 GL_EXT_4"; 140 static const char* kFakeExtensions = "GL_EXT_1 GL_EXT_2 GL_EXT_3 GL_EXT_4";
106 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE"; 141 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE";
107 static const char* kFilteredExtensions = "GL_EXT_3 GL_EXT_4"; 142 static const char* kFilteredExtensions = "GL_EXT_3 GL_EXT_4";
108 143
109 SetFakeExtensionString(kFakeExtensions); 144 SetFakeExtensionString(kFakeExtensions);
110 InitializeAPI(nullptr); 145 InitializeAPI(nullptr);
111 146
112 EXPECT_STREQ(kFakeExtensions, GetExtensions()); 147 EXPECT_STREQ(kFakeExtensions, GetExtensions());
113 148
114 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); 149 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
115 command_line.AppendSwitchASCII(switches::kDisableGLExtensions, 150 command_line.AppendSwitchASCII(switches::kDisableGLExtensions,
116 kFakeDisabledExtensions); 151 kFakeDisabledExtensions);
117 InitializeAPI(&command_line); 152 InitializeAPI(&command_line);
118 153
119 EXPECT_STREQ(kFilteredExtensions, GetExtensions()); 154 EXPECT_STREQ(kFilteredExtensions, GetExtensions());
120 } 155 }
121 156
157 TEST_F(GLApiTest, DisabledExtensionBitTest) {
158 static const char* kFakeExtensions[] = {
159 "GL_ARB_timer_query"
160 };
161 static const char* kFakeDisabledExtensions = "GL_ARB_timer_query";
162
163 SetFakeExtensionStrings(kFakeExtensions, arraysize(kFakeExtensions));
164 InitializeAPI(nullptr);
165
166 EXPECT_TRUE(g_driver_gl.ext.b_GL_ARB_timer_query);
167
168 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
169 command_line.AppendSwitchASCII(switches::kDisableGLExtensions,
170 kFakeDisabledExtensions);
171 InitializeAPI(&command_line);
172
173 EXPECT_FALSE(g_driver_gl.ext.b_GL_ARB_timer_query);
174 }
175
122 TEST_F(GLApiTest, DisabledExtensionStringIndexTest) { 176 TEST_F(GLApiTest, DisabledExtensionStringIndexTest) {
123 static const char* kFakeExtensions[] = { 177 static const char* kFakeExtensions[] = {
124 "GL_EXT_1", 178 "GL_EXT_1",
125 "GL_EXT_2", 179 "GL_EXT_2",
126 "GL_EXT_3", 180 "GL_EXT_3",
127 "GL_EXT_4" 181 "GL_EXT_4"
128 }; 182 };
129 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE"; 183 static const char* kFakeDisabledExtensions = "GL_EXT_1,GL_EXT_2,GL_FAKE";
130 static const char* kFilteredExtensions[] = { 184 static const char* kFilteredExtensions[] = {
131 "GL_EXT_3", 185 "GL_EXT_3",
(...skipping 13 matching lines...) Expand all
145 kFakeDisabledExtensions); 199 kFakeDisabledExtensions);
146 InitializeAPI(&command_line); 200 InitializeAPI(&command_line);
147 201
148 EXPECT_EQ(arraysize(kFilteredExtensions), GetNumExtensions()); 202 EXPECT_EQ(arraysize(kFilteredExtensions), GetNumExtensions());
149 for (uint32_t i = 0; i < arraysize(kFilteredExtensions); ++i) { 203 for (uint32_t i = 0; i < arraysize(kFilteredExtensions); ++i) {
150 EXPECT_STREQ(kFilteredExtensions[i], GetExtensioni(i)); 204 EXPECT_STREQ(kFilteredExtensions[i], GetExtensioni(i));
151 } 205 }
152 } 206 }
153 207
154 } // namespace gfx 208 } // namespace gfx
OLDNEW
« no previous file with comments | « no previous file | ui/gl/gl_gl_api_implementation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698