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

Side by Side Diff: ui/gl/gl_surface_mac.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 unified diff | Download patch
« no previous file with comments | « ui/gl/gl_surface_android.cc ('k') | ui/gl/gl_surface_ozone.cc » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/gl/gl_surface.h" 5 #include "ui/gl/gl_surface.h"
6 6
7 #include <OpenGL/CGLRenderers.h>
8
9 #include <memory> 7 #include <memory>
10 8
11 #include "base/logging.h" 9 #include "base/logging.h"
12 #include "base/macros.h" 10 #include "base/macros.h"
13 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
14 #include "ui/gl/gl_bindings.h" 12 #include "ui/gl/gl_bindings.h"
15 #include "ui/gl/gl_context.h" 13 #include "ui/gl/gl_context.h"
16 #include "ui/gl/gl_export.h" 14 #include "ui/gl/gl_export.h"
17 #include "ui/gl/gl_implementation.h" 15 #include "ui/gl/gl_implementation.h"
18 #include "ui/gl/gl_surface_osmesa.h" 16 #include "ui/gl/gl_surface_osmesa.h"
19 #include "ui/gl/gl_surface_stub.h" 17 #include "ui/gl/gl_surface_stub.h"
20 #include "ui/gl/gpu_switching_manager.h"
21 18
22 namespace gl { 19 namespace gl {
23 namespace { 20 namespace {
24 21
25 // A "no-op" surface. It is not required that a CGLContextObj have an 22 // A "no-op" surface. It is not required that a CGLContextObj have an
26 // associated drawable (pbuffer or fullscreen context) in order to be 23 // associated drawable (pbuffer or fullscreen context) in order to be
27 // made current. Everywhere this surface type is used, we allocate an 24 // made current. Everywhere this surface type is used, we allocate an
28 // FBO at the user level as the drawable of the associated context. 25 // FBO at the user level as the drawable of the associated context.
29 class GL_EXPORT NoOpGLSurface : public GLSurface { 26 class GL_EXPORT NoOpGLSurface : public GLSurface {
30 public: 27 public:
(...skipping 14 matching lines...) Expand all
45 42
46 protected: 43 protected:
47 ~NoOpGLSurface() override {} 44 ~NoOpGLSurface() override {}
48 45
49 private: 46 private:
50 gfx::Size size_; 47 gfx::Size size_;
51 48
52 DISALLOW_COPY_AND_ASSIGN(NoOpGLSurface); 49 DISALLOW_COPY_AND_ASSIGN(NoOpGLSurface);
53 }; 50 };
54 51
55 // static
56 bool InitializeOneOffForSandbox() {
57 static bool initialized = false;
58 if (initialized)
59 return true;
60
61 // This is called from the sandbox warmup code on Mac OS X.
62 // GPU-related stuff is very slow without this, probably because
63 // the sandbox prevents loading graphics drivers or some such.
64 std::vector<CGLPixelFormatAttribute> attribs;
65 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) {
66 // Avoid switching to the discrete GPU just for this pixel
67 // format selection.
68 attribs.push_back(kCGLPFAAllowOfflineRenderers);
69 }
70 if (GetGLImplementation() == kGLImplementationAppleGL) {
71 attribs.push_back(kCGLPFARendererID);
72 attribs.push_back(static_cast<CGLPixelFormatAttribute>(
73 kCGLRendererGenericFloatID));
74 }
75 attribs.push_back(static_cast<CGLPixelFormatAttribute>(0));
76
77 CGLPixelFormatObj format;
78 GLint num_pixel_formats;
79 if (CGLChoosePixelFormat(&attribs.front(),
80 &format,
81 &num_pixel_formats) != kCGLNoError) {
82 LOG(ERROR) << "Error choosing pixel format.";
83 return false;
84 }
85 if (!format) {
86 LOG(ERROR) << "format == 0.";
87 return false;
88 }
89 CGLReleasePixelFormat(format);
90 DCHECK_NE(num_pixel_formats, 0);
91 initialized = true;
92 return true;
93 }
94
95 } // namespace 52 } // namespace
96 53
97 bool GLSurface::InitializeOneOffInternal() {
98 switch (GetGLImplementation()) {
99 case kGLImplementationDesktopGL:
100 case kGLImplementationDesktopGLCoreProfile:
101 case kGLImplementationAppleGL:
102 if (!InitializeOneOffForSandbox()) {
103 LOG(ERROR) << "GLSurfaceCGL::InitializeOneOff failed.";
104 return false;
105 }
106 break;
107 default:
108 break;
109 }
110 return true;
111 }
112
113 scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface( 54 scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface(
114 gfx::AcceleratedWidget window) { 55 gfx::AcceleratedWidget window) {
115 TRACE_EVENT0("gpu", "GLSurface::CreateViewGLSurface"); 56 TRACE_EVENT0("gpu", "GLSurface::CreateViewGLSurface");
116 switch (GetGLImplementation()) { 57 switch (GetGLImplementation()) {
117 case kGLImplementationDesktopGL: 58 case kGLImplementationDesktopGL:
118 case kGLImplementationDesktopGLCoreProfile: 59 case kGLImplementationDesktopGLCoreProfile:
119 case kGLImplementationAppleGL: { 60 case kGLImplementationAppleGL: {
120 NOTIMPLEMENTED() << "No onscreen support on Mac."; 61 NOTIMPLEMENTED() << "No onscreen support on Mac.";
121 return NULL; 62 return NULL;
122 } 63 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 } 98 }
158 case kGLImplementationMockGL: 99 case kGLImplementationMockGL:
159 return new GLSurfaceStub; 100 return new GLSurfaceStub;
160 default: 101 default:
161 NOTREACHED(); 102 NOTREACHED();
162 return NULL; 103 return NULL;
163 } 104 }
164 } 105 }
165 106
166 } // namespace gl 107 } // namespace gl
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_android.cc ('k') | ui/gl/gl_surface_ozone.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698