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

Unified Diff: ui/gl/init/gl_factory.cc

Issue 2024953002: Move GL one-off initialization code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@split_x11
Patch Set: Delete GLInitializer class. Created 4 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/init/gl_factory.h ('k') | ui/gl/init/gl_init.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gl/init/gl_factory.cc
diff --git a/ui/gl/init/gl_factory.cc b/ui/gl/init/gl_factory.cc
index a3ae4c96b6744bb54db71c4413097607ed6f60a5..666b0e5f07a5a0f9cc4883703cb56ccf8088fbdc 100644
--- a/ui/gl/init/gl_factory.cc
+++ b/ui/gl/init/gl_factory.cc
@@ -4,23 +4,91 @@
#include "ui/gl/init/gl_factory.h"
+#include <string>
+#include <vector>
+
+#include "base/command_line.h"
+#include "base/logging.h"
+#include "base/trace_event/trace_event.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_share_group.h"
#include "ui/gl/gl_surface.h"
+#include "ui/gl/init/gl_initializer.h"
namespace gl {
namespace init {
-// TODO(kylechar): This file should be replaced with a platform specific
-// version for X11, Ozone, Windows, Mac and Android. The implementation of each
-// factory function should be moved into that file and the original static
-// methods should be removed from GLSurface and GLContext. This file can then
-// be deleted.
-
bool InitializeGLOneOff() {
- return GLSurface::InitializeOneOff();
+ TRACE_EVENT0("gpu,startup", "gl::init::InitializeOneOff");
+
+ DCHECK_EQ(kGLImplementationNone, GetGLImplementation());
+
+ std::vector<GLImplementation> allowed_impls;
+ GetAllowedGLImplementations(&allowed_impls);
+ DCHECK(!allowed_impls.empty());
+
+ base::CommandLine* cmd = base::CommandLine::ForCurrentProcess();
+
+ // The default implementation is always the first one in list.
+ GLImplementation impl = allowed_impls[0];
+ bool fallback_to_osmesa = false;
+ if (cmd->HasSwitch(switches::kOverrideUseGLWithOSMesaForTests)) {
+ impl = kGLImplementationOSMesaGL;
+ } else if (cmd->HasSwitch(switches::kUseGL)) {
+ std::string requested_implementation_name =
+ cmd->GetSwitchValueASCII(switches::kUseGL);
+ if (requested_implementation_name == "any") {
+ fallback_to_osmesa = true;
+ } else if (requested_implementation_name ==
+ kGLImplementationSwiftShaderName ||
+ requested_implementation_name == kGLImplementationANGLEName) {
+ impl = kGLImplementationEGLGLES2;
+ } else {
+ impl = GetNamedGLImplementation(requested_implementation_name);
+ if (!ContainsValue(allowed_impls, impl)) {
+ LOG(ERROR) << "Requested GL implementation is not available.";
+ return false;
+ }
+ }
+ }
+
+ bool gpu_service_logging = cmd->HasSwitch(switches::kEnableGPUServiceLogging);
+ bool disable_gl_drawing = cmd->HasSwitch(switches::kDisableGLDrawingForTests);
+
+ return InitializeGLOneOffImplementation(
+ impl, fallback_to_osmesa, gpu_service_logging, disable_gl_drawing);
+}
+
+bool InitializeGLOneOffImplementation(GLImplementation impl,
+ bool fallback_to_osmesa,
+ bool gpu_service_logging,
+ bool disable_gl_drawing) {
+ bool initialized =
+ InitializeStaticGLBindings(impl) && InitializeGLOneOffPlatform();
+ if (!initialized && fallback_to_osmesa) {
+ ClearGLBindings();
+ initialized = InitializeStaticGLBindings(kGLImplementationOSMesaGL) &&
+ InitializeGLOneOffPlatform();
+ }
+ if (!initialized)
+ ClearGLBindings();
+
+ if (initialized) {
+ DVLOG(1) << "Using " << GetGLImplementationName(GetGLImplementation())
+ << " GL implementation.";
+ if (gpu_service_logging)
+ InitializeDebugGLBindings();
+ if (disable_gl_drawing)
+ InitializeNullDrawGLBindings();
+ }
+ return initialized;
}
+// TODO(kylechar): The functions below should be replaced with a platform
+// specific version for X11, Ozone, Windows, Mac and Android. The implementation
+// of each function should be moved into a platform specific file and the
+// original static functions should be removed from GLSurface and GLContext.
+
scoped_refptr<GLContext> CreateGLContext(GLShareGroup* share_group,
GLSurface* compatible_surface,
GpuPreference gpu_preference) {
« no previous file with comments | « ui/gl/init/gl_factory.h ('k') | ui/gl/init/gl_init.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698