[gjs] cairo: enable multithreading for cairo-xlib
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs] cairo: enable multithreading for cairo-xlib
- Date: Wed, 25 Jun 2014 18:49:43 +0000 (UTC)
commit 3f09daa34e56ab79e43233e8aaae3e353a508210
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Mon May 12 23:08:34 2014 +0200
cairo: enable multithreading for cairo-xlib
We want to be able to free cairo objects from the background thread,
and that means we must be able to make xlib calls from multiple
threads. Which is ok, if we initialize xlib beforehand.
We don't have a good place to initialize gjs, where we're sure to
be called before the first XOpenDisplay(), so just stuff it into
a constructor.
https://bugzilla.gnome.org/show_bug.cgi?id=730030
Makefile-modules.am | 4 ++--
configure.ac | 1 +
modules/cairo.cpp | 13 +++++++++++++
3 files changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/Makefile-modules.am b/Makefile-modules.am
index d17ca6d..20bbd44 100644
--- a/Makefile-modules.am
+++ b/Makefile-modules.am
@@ -27,8 +27,8 @@ CLEANFILES += $(nodist_libmodules_resources_la_SOURCES)
libmodules_resources_la_CPPFLAGS = $(JS_NATIVE_MODULE_CFLAGS)
libmodules_resources_la_LIBADD = $(JS_NATIVE_MODULE_LIBADD)
-libcairoNative_la_CPPFLAGS = $(JS_NATIVE_MODULE_CFLAGS) $(GJS_CAIRO_CFLAGS)
-libcairoNative_la_LIBADD = $(JS_NATIVE_MODULE_LIBADD) $(GJS_CAIRO_LIBS)
+libcairoNative_la_CPPFLAGS = $(JS_NATIVE_MODULE_CFLAGS) $(GJS_CAIRO_CFLAGS) $(GJS_CAIRO_XLIB_CFLAGS)
+libcairoNative_la_LIBADD = $(JS_NATIVE_MODULE_LIBADD) $(GJS_CAIRO_LIBS) $(GJS_CAIRO_XLIB_LIBS)
libcairoNative_la_SOURCES = \
modules/cairo-private.h \
modules/cairo-module.h \
diff --git a/configure.ac b/configure.ac
index 8281308..819abb2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -98,6 +98,7 @@ AM_CONDITIONAL(ENABLE_CAIRO, test x$have_cairo = xyes)
AS_IF([test x$have_cairo = xyes], [
AC_DEFINE([ENABLE_CAIRO],[1],[Define if you want to build with cairo support])
])
+PKG_CHECK_MODULES([GJS_CAIRO_XLIB], [cairo-xlib], , )
# Optional GTK+ dep (enabled by default)
AC_ARG_WITH(gtk,
diff --git a/modules/cairo.cpp b/modules/cairo.cpp
index 1fd51b6..b5dab64 100644
--- a/modules/cairo.cpp
+++ b/modules/cairo.cpp
@@ -27,6 +27,19 @@
#include "cairo-private.h"
+#if CAIRO_HAS_XLIB_SURFACE
+#include "cairo-xlib.h"
+
+class XLibConstructor {
+ public:
+ XLibConstructor() {
+ XInitThreads();
+ }
+};
+
+static XLibConstructor constructor;
+#endif
+
JSBool
gjs_cairo_check_status(JSContext *context,
cairo_status_t status,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]