Chromium Code Reviews| Index: tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp |
| diff --git a/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp b/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp |
| index c483fecabec5f751fef470cd2f3cce4d92f308a3..1da245d87c3264c0ea59c159de2f1b14f8557eaa 100644 |
| --- a/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp |
| +++ b/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp |
| @@ -4,7 +4,9 @@ |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| + |
| #include "gl/GLTestContext.h" |
| +#include "SkOnce.h" |
| #include <X11/Xlib.h> |
| #include <GL/glx.h> |
| @@ -69,12 +71,31 @@ private: |
| GLXPixmap fGlxPixmap; |
| }; |
| +static Display* get_display() { |
| + class AutoDisplay { |
| + public: |
| + AutoDisplay() { fDisplay = XOpenDisplay(nullptr); }; |
| + ~AutoDisplay() { |
| + if (fDisplay) { |
| + XCloseDisplay(fDisplay); |
|
csmartdalton
2016/08/11 21:29:05
This might not be necessary, I'd imagine it would
|
| + } |
| + } |
| + Display* display() const { return fDisplay; } |
| + private: |
| + Display* fDisplay; |
| + }; |
| + static std::unique_ptr<AutoDisplay> ad; |
| + static SkOnce once; |
| + once([] { ad.reset(new AutoDisplay{}); }); |
| + return ad->display(); |
| +} |
| + |
| GLXGLTestContext::GLXGLTestContext(GrGLStandard forcedGpuAPI, GLXGLTestContext* shareContext) |
| : fContext(nullptr) |
| , fDisplay(nullptr) |
| , fPixmap(0) |
| , fGlxPixmap(0) { |
| - fDisplay = XOpenDisplay(0); |
| + fDisplay = get_display(); |
| GLXContext glxShareContext = shareContext ? shareContext->fContext : nullptr; |
| @@ -239,7 +260,6 @@ void GLXGLTestContext::destroyGLContext() { |
| fPixmap = 0; |
| } |
| - XCloseDisplay(fDisplay); |
| fDisplay = nullptr; |
| } |
| } |