test/api/test-multithread.c | 75 ++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 30 deletions(-)
New commits: commit 7e6e094abd27fd022fe9aea1872ef82f6a0cdcec Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri Sep 28 08:45:57 2018 -0400 [test-multithread] Install ot funcs before filling ref buffer diff --git a/test/api/test-multithread.c b/test/api/test-multithread.c index 2dbecc9b..a75feffa 100644 --- a/test/api/test-multithread.c +++ b/test/api/test-multithread.c @@ -147,12 +147,13 @@ main (int argc, char **argv) hb_face_t *face = hb_face_create (blob, 0); font = hb_font_create (face); + hb_ot_font_set_funcs (font); + ref_buffer = hb_buffer_create (); fill_the_buffer (ref_buffer); - hb_ft_font_set_funcs (font); test_body (); - hb_ot_font_set_funcs (font); + hb_ft_font_set_funcs (font); test_body (); hb_buffer_destroy (ref_buffer); commit 21fbee831e0eab2c2f4513825c939158f4578156 Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri Sep 28 08:43:37 2018 -0400 [test-multithread] Take num-threads and num-iters from command-line diff --git a/test/api/test-multithread.c b/test/api/test-multithread.c index 898f19a0..2dbecc9b 100644 --- a/test/api/test-multithread.c +++ b/test/api/test-multithread.c @@ -134,6 +134,11 @@ test_body () int main (int argc, char **argv) { + if (argc > 1) + num_threads = atoi (argv[1]); + if (argc > 2) + num_iters = atoi (argv[2]); + // Dummy call to alleviate _guess_segment_properties thread safety-ness // https://github.com/harfbuzz/harfbuzz/issues/1191 hb_language_get_default (); commit 598be3bb38fd11a288f8155b8c27ffef4ebdd8b9 Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri Sep 28 08:33:26 2018 -0400 Minor diff --git a/test/api/test-multithread.c b/test/api/test-multithread.c index 6881a00f..898f19a0 100644 --- a/test/api/test-multithread.c +++ b/test/api/test-multithread.c @@ -135,6 +135,7 @@ int main (int argc, char **argv) { // Dummy call to alleviate _guess_segment_properties thread safety-ness + // https://github.com/harfbuzz/harfbuzz/issues/1191 hb_language_get_default (); hb_blob_t *blob = hb_blob_create_from_file (path); commit c09bf3d50589c8eb95b322ef3e4eb8a288dacebe Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Fri Sep 28 16:13:01 2018 +0330 test-multithread, check the results on every iteration (#1194) diff --git a/test/api/test-multithread.c b/test/api/test-multithread.c index 65718825..6881a00f 100644 --- a/test/api/test-multithread.c +++ b/test/api/test-multithread.c @@ -43,9 +43,11 @@ const char *path = "/Library/Fonts/Tahoma.ttf"; #endif +int num_threads = 30; int num_iters = 200; hb_font_t *font; +hb_buffer_t *ref_buffer; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; @@ -57,6 +59,29 @@ fill_the_buffer (hb_buffer_t *buffer) hb_shape (font, buffer, NULL, 0); } +static void +validity_check (hb_buffer_t *buffer) { + if (hb_buffer_diff (ref_buffer, buffer, (hb_codepoint_t) -1, 0)) + { + fprintf (stderr, "One of the buffers was different from the reference.\n"); + char out[255]; + + hb_buffer_serialize_glyphs (buffer, 0, hb_buffer_get_length (ref_buffer), + out, sizeof (out), NULL, + font, HB_BUFFER_SERIALIZE_FORMAT_TEXT, + HB_BUFFER_SERIALIZE_FLAG_DEFAULT); + fprintf (stderr, "Actual: %s\n", out); + + hb_buffer_serialize_glyphs (ref_buffer, 0, hb_buffer_get_length (ref_buffer), + out, sizeof (out), NULL, + font, HB_BUFFER_SERIALIZE_FORMAT_TEXT, + HB_BUFFER_SERIALIZE_FLAG_DEFAULT); + fprintf (stderr, "Expected: %s\n", out); + + exit (1); + } +} + static void * thread_func (void *data) { @@ -70,6 +95,7 @@ thread_func (void *data) { hb_buffer_clear_contents (buffer); fill_the_buffer (buffer); + validity_check (buffer); } return 0; @@ -95,38 +121,12 @@ test_body () /* Let them loose! */ pthread_mutex_unlock (&mutex); - hb_buffer_t *ref_buffer = hb_buffer_create (); - fill_the_buffer (ref_buffer); - for (i = 0; i < num_threads; i++) { pthread_join (threads[i], NULL); - hb_buffer_t *buffer = buffers[i]; - hb_buffer_diff_flags_t diff = hb_buffer_diff (ref_buffer, buffer, (hb_codepoint_t) -1, 0); - if (diff) - { - fprintf (stderr, "One of the buffers (%d) was different from the reference.\n", i); - char out[255]; - - hb_buffer_serialize_glyphs (buffer, 0, hb_buffer_get_length (ref_buffer), - out, sizeof (out), NULL, - font, HB_BUFFER_SERIALIZE_FORMAT_TEXT, - HB_BUFFER_SERIALIZE_FLAG_DEFAULT); - fprintf (stderr, "Actual: %s\n", out); - - hb_buffer_serialize_glyphs (ref_buffer, 0, hb_buffer_get_length (ref_buffer), - out, sizeof (out), NULL, - font, HB_BUFFER_SERIALIZE_FORMAT_TEXT, - HB_BUFFER_SERIALIZE_FLAG_DEFAULT); - fprintf (stderr, "Expected: %s\n", out); - - exit (1); - } - hb_buffer_destroy (buffer); + hb_buffer_destroy (buffers[i]); } - hb_buffer_destroy (ref_buffer); - free (buffers); free (threads); } @@ -141,11 +141,16 @@ main (int argc, char **argv) hb_face_t *face = hb_face_create (blob, 0); font = hb_font_create (face); + ref_buffer = hb_buffer_create (); + fill_the_buffer (ref_buffer); + hb_ft_font_set_funcs (font); test_body (); hb_ot_font_set_funcs (font); test_body (); + hb_buffer_destroy (ref_buffer); + hb_font_destroy (font); hb_face_destroy (face); hb_blob_destroy (blob); commit dbc3070a15290310bb5aade11d04eb24fe958094 Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Fri Sep 28 16:01:15 2018 +0330 Make test-multithread pass the tsan bot test (#1193) diff --git a/test/api/test-multithread.c b/test/api/test-multithread.c index c87da3c0..65718825 100644 --- a/test/api/test-multithread.c +++ b/test/api/test-multithread.c @@ -50,7 +50,7 @@ hb_font_t *font; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static void -fill_the_buffer(hb_buffer_t *buffer) +fill_the_buffer (hb_buffer_t *buffer) { hb_buffer_add_utf8 (buffer, text, sizeof (text), 0, sizeof (text)); hb_buffer_guess_segment_properties (buffer); @@ -134,6 +134,9 @@ test_body () int main (int argc, char **argv) { + // Dummy call to alleviate _guess_segment_properties thread safety-ness + hb_language_get_default (); + hb_blob_t *blob = hb_blob_create_from_file (path); hb_face_t *face = hb_face_create (blob, 0); font = hb_font_create (face); _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz