[pango] Add test-pangocairo-threads.c
- From: Behdad Esfahbod <behdad src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango] Add test-pangocairo-threads.c
- Date: Thu, 3 Jan 2013 09:54:29 +0000 (UTC)
commit 00997204f7df5f4e2f75f8c1c2f72130f302e7c6
Author: Behdad Esfahbod <behdad behdad org>
Date: Thu Jan 3 03:51:10 2013 -0600
Add test-pangocairo-threads.c
Currently is not run automatically. But run it with args "10 100" and
see it crash...
tests/Makefile.am | 3 +-
tests/test-pangocairo-threads.c | 74 +++++++++++++++++++++++++++++++++++++++
2 files changed, 76 insertions(+), 1 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8531f0e..56a741a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -40,7 +40,7 @@ TESTS_ENVIRONMENT = \
srcdir=$(srcdir) \
PANGO_RC_FILE=./pangorc
-check_PROGRAMS = testboundaries testboundaries_ucd testcolor testscript
+check_PROGRAMS = testboundaries testboundaries_ucd testcolor testscript test-pangocairo-threads
if HAVE_CAIRO
check_PROGRAMS += testiter
@@ -60,6 +60,7 @@ testcolor_LDADD = $(TEST_PANGO_LIBS) $(GLIB_LIBS)
testiter_LDADD = $(TEST_PANGOCAIRO_LIBS) $(GLIB_LIBS)
testscript_LDADD = $(TEST_PANGO_LIBS) $(GLIB_LIBS)
test_ot_tags_LDADD = $(TEST_PANGOFT2_LIBS) $(GLIB_LIBS)
+test_pangocairo_threads_LDADD = $(TEST_PANGOCAIRO_LIBS) $(CAIRO_LIBS) $(GLIB_LIBS)
dump_boundaries_LDADD = $(TEST_PANGO_LIBS) $(GLIB_LIBS)
if HAVE_CXX
diff --git a/tests/test-pangocairo-threads.c b/tests/test-pangocairo-threads.c
new file mode 100644
index 0000000..29c6aa5
--- /dev/null
+++ b/tests/test-pangocairo-threads.c
@@ -0,0 +1,74 @@
+#include <stdlib.h>
+#include <pango/pango.h>
+#include <pango/pangocairo.h>
+
+const char *text = "The quick brown fox jumped over the lazy dog!";
+int num_iters = 100;
+
+static gpointer
+thread_func (gpointer data)
+{
+ int num = GPOINTER_TO_INT (data);
+ int i;
+ char *filename;
+
+ cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, 500, 300);
+ cairo_t *cr = cairo_create (surface);
+ PangoLayout *layout = pango_cairo_create_layout (cr);
+
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+ cairo_set_source_rgb (cr, 0, 0, 0);
+
+ pango_layout_set_text (layout, text, -1);
+ pango_layout_set_width (layout, 500 * PANGO_SCALE);
+
+ for (i = 0; i < num_iters; i++)
+ {
+ /* force a relayout */
+ PangoWrapMode wrap = pango_layout_get_wrap (layout);
+ wrap = wrap == PANGO_WRAP_WORD ? PANGO_WRAP_CHAR : PANGO_WRAP_WORD;
+ pango_layout_set_wrap (layout, wrap);
+
+ pango_cairo_show_layout (cr, layout);
+ }
+
+ filename = g_strdup_printf ("%d.png", num);
+ cairo_surface_write_to_png (surface, filename);
+ g_free (filename);
+
+ return 0;
+}
+
+static void
+join_thread (gpointer thread, gpointer self)
+{
+ if (thread != self)
+ g_thread_join (thread);
+}
+
+
+int
+main (int argc, char **argv)
+{
+ int num_threads = 2;
+ int i;
+
+ if (argc > 1)
+ num_threads = atoi (argv[1]);
+ if (argc > 2)
+ num_iters = atoi (argv[2]);
+
+ g_type_init ();
+ g_thread_init (NULL);
+
+ /* force pango module initializations */
+/* thread_func (GINT_TO_POINTER (0)); */
+
+ for (i = 0; i < num_threads; i++)
+ g_thread_create (thread_func, GINT_TO_POINTER (i+1), TRUE, NULL);
+
+ g_thread_foreach (join_thread, g_thread_self ());
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]