summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--examples/pangoft2topgm.c185
-rw-r--r--examples/renderdemo.c3
-rw-r--r--examples/renderdemo.h1
4 files changed, 107 insertions, 88 deletions
diff --git a/ChangeLog b/ChangeLog
index 40a1a454..7f23fa99 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;