Only open X Display once for all test GLX contexts

Saves about 4 seconds of runtime for 'dm --src gm --config gpu' on my system.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2240673002

Review-Url: https://codereview.chromium.org/2240673002
This commit is contained in:
bsalomon 2016-08-11 14:58:34 -07:00 committed by Commit bot
parent d22a817ff5
commit 300178b1c8

View File

@ -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);
}
}
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;
}
}