diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | examples/pangoft2topgm.c | 185 | ||||
-rw-r--r-- | examples/renderdemo.c | 3 | ||||
-rw-r--r-- | examples/renderdemo.h | 1 |
4 files changed, 107 insertions, 88 deletions
@@ -1,5 +1,11 @@ 2005-11-03 Behdad Esfahbod <behdad@gnome.org> + * examples/pangoft2pgm.c, renderdemo.c, renderdemo.h: Added a --runs + options, useful for profiling. Misc cleanup, freeing memory. (from + #170414) + +2005-11-03 Behdad Esfahbod <behdad@gnome.org> + Patches from #170414. Reviewed by Matthias Clasen. * pango/opentype/ftxgpos.c, pango/opentype/ftxgsub.c: Use call table diff --git a/examples/pangoft2topgm.c b/examples/pangoft2topgm.c index 46549947..f47e3a22 100644 --- a/examples/pangoft2topgm.c +++ b/examples/pangoft2topgm.c @@ -43,41 +43,48 @@ int main(int argc, char *argv[]) { PangoContext *context; - FILE *outfile; + FILE *outfile = NULL; PangoFontMap *fontmap; GError *error = NULL; gboolean do_convert = FALSE; int exit_status = 0; char *tmpfile_name; + gboolean gen_output = TRUE; g_type_init(); parse_options (argc, argv); - if (opt_output) - { - if (!(g_str_has_suffix (opt_output, ".pgm") || - g_str_has_suffix (opt_output, ".PGM"))) - do_convert = TRUE; - } + if (opt_output && !*opt_output) + gen_output = FALSE; - if (opt_output && !do_convert) + if (gen_output) { - outfile = fopen (opt_output, "wb"); + if (opt_output) + { + if (!(g_str_has_suffix (opt_output, ".pgm") || + g_str_has_suffix (opt_output, ".PGM"))) + do_convert = TRUE; + } - if (!outfile) - fail ("Cannot open output file %s: %s\n", - opt_output, g_strerror (errno)); - } - else /* --display */ - { - /* This may need to be G_OS_UNIX guarded for fdopen */ - int fd = g_file_open_tmp ("pangoft2pgmXXXXXX", &tmpfile_name, &error); - if (fd == 1) - fail ("Cannot open temporary file: %s\n", error->message); - outfile = fdopen (fd, "wb"); - if (!outfile) - fail ("Cannot open temporary file: %s\n", g_strerror (errno)); + if (opt_output && !do_convert) + { + outfile = fopen (opt_output, "wb"); + + if (!outfile) + fail ("Cannot open output file %s: %s\n", + opt_output, g_strerror (errno)); + } + else /* --display */ + { + /* This may need to be G_OS_UNIX guarded for fdopen */ + int fd = g_file_open_tmp ("pangoft2pgmXXXXXX", &tmpfile_name, &error); + if (fd == 1) + fail ("Cannot open temporary file: %s\n", error->message); + outfile = fdopen (fd, "wb"); + if (!outfile) + fail ("Cannot open temporary file: %s\n", g_strerror (errno)); + } } fontmap = pango_ft2_font_map_new (); @@ -88,12 +95,12 @@ main(int argc, char *argv[]) g_object_unref (fontmap); - /* Write contents as pgm file */ { FT_Bitmap bitmap; guchar *buf; int row; int width, height; + int run; do_output (context, NULL, NULL, NULL, &width, &height); @@ -105,80 +112,82 @@ main(int argc, char *argv[]) bitmap.pixel_mode = ft_pixel_mode_grays; memset (buf, 0x00, bitmap.pitch * bitmap.rows); - do_output (context, ft2_render, NULL, &bitmap, &width, &height); + for (run = 0; run < opt_runs; run++) + do_output (context, ft2_render, NULL, &bitmap, &width, &height); - /* Invert bitmap to get black text on white background */ - { - int pix_idx; - for (pix_idx=0; pix_idx<bitmap.pitch * bitmap.rows; pix_idx++) + if (gen_output) + { + /* Invert bitmap to get black text on white background */ { - buf[pix_idx] = 255-buf[pix_idx]; + int pix_idx; + for (pix_idx=0; pix_idx<bitmap.pitch * bitmap.rows; pix_idx++) + { + buf[pix_idx] = 255-buf[pix_idx]; + } } - } - - /* Write it as pgm to output */ - fprintf(outfile, - "P5\n" - "%d %d\n" - "255\n", bitmap.width, bitmap.rows); - for (row = 0; row < bitmap.rows; row++) - fwrite(bitmap.buffer + row * bitmap.pitch, - 1, bitmap.width, - outfile); - g_free (buf); - if (fclose(outfile) == EOF) - fail ("Error writing output file: %s\n", g_strerror (errno)); - - /* Convert to a different format, if necessary */ - if (do_convert) - { - gchar *command = g_strdup_printf ("convert %s %s", - tmpfile_name, - opt_output); - if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error)) - fail ("When running ImageMagick 'convert' command: %s\n", - error->message); - - g_free (command); - if (tmpfile_name) + /* Write it as pgm to output */ + fprintf(outfile, + "P5\n" + "%d %d\n" + "255\n", bitmap.width, bitmap.rows); + for (row = 0; row < bitmap.rows; row++) + fwrite(bitmap.buffer + row * bitmap.pitch, 1, bitmap.width, outfile); + g_free (buf); + if (fclose(outfile) == EOF) + fail ("Error writing output file: %s\n", g_strerror (errno)); + + /* Convert to a different format, if necessary */ + if (do_convert) { - remove (tmpfile_name); - g_free (tmpfile_name); - tmpfile_name = NULL; + gchar *command = g_strdup_printf ("convert %s %s", + tmpfile_name, + opt_output); + if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error)) + fail ("When running ImageMagick 'convert' command: %s\n", + error->message); + + g_free (command); + + if (tmpfile_name) + { + remove (tmpfile_name); + g_free (tmpfile_name); + tmpfile_name = NULL; + } + + if (exit_status) + goto done; } - if (exit_status) - goto done; - } - - if (opt_display) - { - gchar *title = get_options_string (); - gchar *title_quoted = g_shell_quote (title); - - gchar *command = g_strdup_printf ("display -title %s %s", - title_quoted, - opt_output ? opt_output: tmpfile_name); - if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error)) - fail ("When running ImageMagick 'display' command: %s\n", - error->message); - - g_free (command); - g_free (title); - g_free (title_quoted); - - if (tmpfile_name) + if (opt_display) { - remove (tmpfile_name); - g_free (tmpfile_name); - tmpfile_name = NULL; + gchar *title = get_options_string (); + gchar *title_quoted = g_shell_quote (title); + + gchar *command = g_strdup_printf ("display -title %s %s", + title_quoted, + opt_output ? opt_output: tmpfile_name); + if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error)) + fail ("When running ImageMagick 'display' command: %s\n", + error->message); + + g_free (command); + g_free (title); + g_free (title_quoted); + + if (tmpfile_name) + { + remove (tmpfile_name); + g_free (tmpfile_name); + tmpfile_name = NULL; + } + + if (exit_status) + goto done; } - - if (exit_status) - goto done; - } - } + } + } done: g_object_unref (context); diff --git a/examples/renderdemo.c b/examples/renderdemo.c index de324d79..a1225121 100644 --- a/examples/renderdemo.c +++ b/examples/renderdemo.c @@ -54,6 +54,7 @@ char *opt_text = NULL; gboolean opt_waterfall = FALSE; int opt_width = -1; int opt_indent = 0; +int opt_runs = 1; PangoEllipsizeMode opt_ellipsize = PANGO_ELLIPSIZE_NONE; HintMode opt_hinting = HINT_DEFAULT; @@ -411,6 +412,8 @@ parse_options (int argc, char *argv[]) ARG_INT, &opt_width }, { "indent", "Width in points to indent paragraphs", ARG_INT, &opt_indent }, + { "runs", "Render text this many times", + ARG_INT, &opt_runs }, { NULL } }; diff --git a/examples/renderdemo.h b/examples/renderdemo.h index 81fed921..db09dd23 100644 --- a/examples/renderdemo.h +++ b/examples/renderdemo.h @@ -68,5 +68,6 @@ extern char *opt_text; extern gboolean opt_waterfall; extern int opt_width; extern int opt_indent; +extern int opt_runs; extern PangoEllipsizeMode opt_ellipsize; extern HintMode opt_hinting; |