tools/pdbgen/pdb/progress.pdb applied slightly modified patch from

2006-02-20  Sven Neumann  <sven@gimp.org>

	* tools/pdbgen/pdb/progress.pdb
	* libgimp/gimpprogress.[ch]: applied slightly modified patch from
	Stephane Chauveau.  Wraps the gimp_progress_update() PDB call so
	that redundant progress updates are suppressed in libgimp.  This
	gives a noticeable speedup for all plug-ins that update the
	progress too often (bug #331470).

	* libgimp/gimpprogress_pdb.[ch]: regenerated.
This commit is contained in:
Sven Neumann 2006-02-20 07:35:42 +00:00 committed by Sven Neumann
parent ee34dfa57e
commit 37fdbeacad
6 changed files with 85 additions and 9 deletions

View File

@ -1,3 +1,15 @@
2006-02-20 Sven Neumann <sven@gimp.org>
* tools/pdbgen/pdb/progress.pdb
* libgimp/gimpprogress.[ch]: applied slightly modified patch from
Stephane Chauveau. Wraps the gimp_progress_update() PDB call so
that redundant progress updates are suppressed in libgimp. This
gives a noticeable speedup for all plug-ins that update the
progress too often (bug #331470).
* libgimp/gimpprogress_pdb.[ch]: regenerated.
2006-02-20 Sven Neumann <sven@gimp.org> 2006-02-20 Sven Neumann <sven@gimp.org>
* libgimp/gimpplugin.c (gimp_plugin_icon_register): added a cast to * libgimp/gimpplugin.c (gimp_plugin_icon_register): added a cast to

View File

@ -51,7 +51,10 @@ static void gimp_temp_progress_run (const gchar *name,
/* private variables */ /* private variables */
static GHashTable *gimp_progress_ht = NULL; static GHashTable * gimp_progress_ht = NULL;
static gdouble gimp_progress_current = 0.0;
static const gdouble gimp_progress_step = (1.0 / 300.0);
/* public functions */ /* public functions */
@ -214,6 +217,26 @@ gimp_progress_uninstall (const gchar *progress_callback)
return user_data; return user_data;
} }
/**
* gimp_progress_init:
* @message: Message to use in the progress dialog.
*
* Initializes the progress bar for the current plug-in.
*
* Initializes the progress bar for the current plug-in. It is only
* valid to call this procedure from a plug-in.
*
* Returns: TRUE on success.
*/
gboolean
gimp_progress_init (const gchar *message)
{
gimp_progress_current = 0.0;
return _gimp_progress_init (message);
}
/** /**
* gimp_progress_init_printf: * gimp_progress_init_printf:
* @format: a standard printf() format string * @format: a standard printf() format string
@ -285,6 +308,43 @@ gimp_progress_set_text_printf (const gchar *format,
return retval; return retval;
} }
/**
* gimp_progress_update:
* @percentage: Percentage of progress completed (in the range from 0.0 to 1.0).
*
* Updates the progress bar for the current plug-in.
*
* Returns: TRUE on success.
*/
gboolean
gimp_progress_update (gdouble percentage)
{
gboolean changed;
if (percentage <= 0.0)
{
changed = (gimp_progress_current != 0.0);
percentage = 0.0;
}
else if (percentage >= 1.0)
{
changed = (gimp_progress_current != 1.0);
percentage = 1.0;
}
else
{
changed =
(fabs (gimp_progress_current - percentage) > gimp_progress_step);
}
if (! changed)
return TRUE;
gimp_progress_current = percentage;
return _gimp_progress_update (gimp_progress_current);
}
/* private functions */ /* private functions */

View File

@ -57,11 +57,15 @@ const gchar * gimp_progress_install_vtable (const GimpProgressVtable *vtable,
gpointer user_data); gpointer user_data);
gpointer gimp_progress_uninstall (const gchar *progress_callback); gpointer gimp_progress_uninstall (const gchar *progress_callback);
gboolean gimp_progress_init (const gchar *message);
gboolean gimp_progress_init_printf (const gchar *format, gboolean gimp_progress_init_printf (const gchar *format,
...) G_GNUC_PRINTF (1, 2); ...) G_GNUC_PRINTF (1, 2);
gboolean gimp_progress_set_text_printf (const gchar *format, gboolean gimp_progress_set_text_printf (const gchar *format,
...) G_GNUC_PRINTF (1, 2); ...) G_GNUC_PRINTF (1, 2);
gboolean gimp_progress_update (gdouble percentage);
#ifndef GIMP_DISABLE_DEPRECATED #ifndef GIMP_DISABLE_DEPRECATED
typedef void (* GimpProgressStartCallback) (const gchar *message, typedef void (* GimpProgressStartCallback) (const gchar *message,

View File

@ -26,7 +26,7 @@
#include "gimp.h" #include "gimp.h"
/** /**
* gimp_progress_init: * _gimp_progress_init:
* @message: Message to use in the progress dialog. * @message: Message to use in the progress dialog.
* *
@ -38,7 +38,7 @@
* Returns: TRUE on success. * Returns: TRUE on success.
*/ */
gboolean gboolean
gimp_progress_init (const gchar *message) _gimp_progress_init (const gchar *message)
{ {
GimpParam *return_vals; GimpParam *return_vals;
gint nreturn_vals; gint nreturn_vals;
@ -58,7 +58,7 @@ gimp_progress_init (const gchar *message)
} }
/** /**
* gimp_progress_update: * _gimp_progress_update:
* @percentage: Percentage of progress completed which must be between 0.0 and 1.0. * @percentage: Percentage of progress completed which must be between 0.0 and 1.0.
* *
* Updates the progress bar for the current plug-in. * Updates the progress bar for the current plug-in.
@ -69,7 +69,7 @@ gimp_progress_init (const gchar *message)
* Returns: TRUE on success. * Returns: TRUE on success.
*/ */
gboolean gboolean
gimp_progress_update (gdouble percentage) _gimp_progress_update (gdouble percentage)
{ {
GimpParam *return_vals; GimpParam *return_vals;
gint nreturn_vals; gint nreturn_vals;

View File

@ -29,8 +29,8 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */ /* For information look into the C source or the html documentation */
gboolean gimp_progress_init (const gchar *message); gboolean _gimp_progress_init (const gchar *message) G_GNUC_INTERNAL;
gboolean gimp_progress_update (gdouble percentage); gboolean _gimp_progress_update (gdouble percentage) G_GNUC_INTERNAL;
gboolean gimp_progress_pulse (void); gboolean gimp_progress_pulse (void);
gboolean gimp_progress_set_text (const gchar *message); gboolean gimp_progress_set_text (const gchar *message);
gint gimp_progress_get_window_handle (void); gint gimp_progress_get_window_handle (void);

View File

@ -42,7 +42,7 @@ HELP
&std_pdb_misc; &std_pdb_misc;
@inargs = ( @inargs = (
{ name => 'message', type => 'string', null_ok => 1, { name => 'message', type => 'string', null_ok => 1, wrap => 1,
desc => 'Message to use in the progress dialog' }, desc => 'Message to use in the progress dialog' },
{ name => 'gdisplay', type => 'int32', { name => 'gdisplay', type => 'int32',
desc => 'GimpDisplay to update progressbar in, or -1 for a seperate desc => 'GimpDisplay to update progressbar in, or -1 for a seperate
@ -76,7 +76,7 @@ HELP
&std_pdb_misc; &std_pdb_misc;
@inargs = ( @inargs = (
{ name => 'percentage', type => 'float', { name => 'percentage', type => 'float', wrap => 1,
desc => 'Percentage of progress completed which must be between 0.0 and 1.0' } desc => 'Percentage of progress completed which must be between 0.0 and 1.0' }
); );