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

Unified Diff: ui/gl/gl_egl_api_implementation.cc

Issue 1203513004: Respect the disabled extension list during binding initialization. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 5 years, 6 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 | « ui/gl/gl_egl_api_implementation.h ('k') | ui/gl/gl_glx_api_implementation.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gl/gl_egl_api_implementation.cc
diff --git a/ui/gl/gl_egl_api_implementation.cc b/ui/gl/gl_egl_api_implementation.cc
index 8acaf0f460d034f71ace4701402c69fc6e69a3d6..792fdc5e714d9b7edeaaefbd3b9fe87944b67eb4 100644
--- a/ui/gl/gl_egl_api_implementation.cc
+++ b/ui/gl/gl_egl_api_implementation.cc
@@ -10,19 +10,36 @@
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_implementation.h"
+namespace {
+std::string FilterExtensionList(
+ const char* extensions,
+ const std::vector<std::string>& disabled_extensions) {
+ if (extensions == NULL)
+ return "";
+ std::vector<std::string> extension_vec;
+ base::SplitString(extensions, ' ', &extension_vec);
+ extension_vec.erase(std::remove_if(
+ extension_vec.begin(), extension_vec.end(),
+ [&disabled_extensions](const std::string& ext) {
+ return std::find(disabled_extensions.begin(), disabled_extensions.end(),
+ ext) != disabled_extensions.end();
+ }), extension_vec.end());
+ return JoinString(extension_vec, " ");
+}
+}
+
namespace gfx {
RealEGLApi* g_real_egl;
void InitializeStaticGLBindingsEGL() {
+ g_driver_egl.InitializeStaticBindings();
if (!g_real_egl) {
g_real_egl = new RealEGLApi();
}
g_real_egl->Initialize(&g_driver_egl);
g_current_egl_context = g_real_egl;
- g_driver_egl.InitializeStaticBindings();
-
- g_real_egl->InitializeFilteredExtensions();
+ g_driver_egl.InitializeExtensionBindings();
}
void InitializeDebugGLBindingsEGL() {
@@ -72,44 +89,22 @@ void RealEGLApi::InitializeWithCommandLine(DriverEGL* driver,
const std::string disabled_extensions = command_line->GetSwitchValueASCII(
switches::kDisableGLExtensions);
+ disabled_exts_.clear();
+ filtered_exts_.clear();
if (!disabled_extensions.empty()) {
Tokenize(disabled_extensions, ", ;", &disabled_exts_);
}
}
-void RealEGLApi::InitializeFilteredExtensions() {
- if (!disabled_exts_.empty() && filtered_exts_.empty()) {
- std::vector<std::string> platform_extensions_vec;
- std::string platform_ext = DriverEGL::GetPlatformExtensions();
- base::SplitString(platform_ext, ' ', &platform_extensions_vec);
-
- std::vector<std::string> client_extensions_vec;
- std::string client_ext = DriverEGL::GetClientExtensions();
- base::SplitString(client_ext, ' ', &client_extensions_vec);
-
- // Filter out extensions from the command line.
- for (const std::string& disabled_ext : disabled_exts_) {
- platform_extensions_vec.erase(std::remove(platform_extensions_vec.begin(),
- platform_extensions_vec.end(),
- disabled_ext),
- platform_extensions_vec.end());
- client_extensions_vec.erase(std::remove(client_extensions_vec.begin(),
- client_extensions_vec.end(),
- disabled_ext),
- client_extensions_vec.end());
- }
-
- // Construct filtered extensions string for GL_EXTENSIONS string lookups.
- filtered_exts_ = JoinString(platform_extensions_vec, " ");
- if (!platform_extensions_vec.empty() && !client_extensions_vec.empty())
- filtered_exts_ += " ";
- filtered_exts_ += JoinString(client_extensions_vec, " ");
- }
-}
-
const char* RealEGLApi::eglQueryStringFn(EGLDisplay dpy, EGLint name) {
- if (!filtered_exts_.empty() && name == EGL_EXTENSIONS) {
- return filtered_exts_.c_str();
+ if (name == EGL_EXTENSIONS) {
+ auto it = filtered_exts_.find(dpy);
+ if (it == filtered_exts_.end()) {
+ it = filtered_exts_.insert(std::make_pair(
+ dpy, FilterExtensionList(EGLApiBase::eglQueryStringFn(dpy, name),
+ disabled_exts_))).first;
+ }
+ return (*it).second.c_str();
}
return EGLApiBase::eglQueryStringFn(dpy, name);
}
« no previous file with comments | « ui/gl/gl_egl_api_implementation.h ('k') | ui/gl/gl_glx_api_implementation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698