Patch shortening GIMP startup time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I have made several optimizations in loading script-fu extension making the loading process a bit faster. It's the first time I change something in an open source program and don't know best way to "announce" it and get it reviewed, so I send a patch in a mail. 
The major speedup is caused by calling my function load_script_file instead of script_fu_run_command("(load ...."). Please review my changes and send an answer if the patch is OK. 

diff -rup /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/scheme-wrapper.c gimp/plug-ins/script-fu/scheme-wrapper.c
--- /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/scheme-wrapper.c 2010-08-24 17:49:15.000000000 +0200
+++ gimp/plug-ins/script-fu/scheme-wrapper.c 2010-08-24 22:47:21.000000000 +0200
@@ -298,6 +298,14 @@ ts_interpret_stdin (void)
   scheme_load_file (&sc, stdin);
 }
 
+/* ==== modified by Lukasz Czerwinski (lc277642@xxxxxxxxxxxxxxxxxxxxx) */
+
+int load_script_file(const char *fname) {
+  return scheme_file_push(&sc,fname);
+}
+
+/* ==== end of modification ==== */
+
 gint
 ts_interpret_string (const gchar *expr)
 {
diff -rup /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/scheme-wrapper.h gimp/plug-ins/script-fu/scheme-wrapper.h
--- /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/scheme-wrapper.h 2010-08-24 17:49:15.000000000 +0200
+++ gimp/plug-ins/script-fu/scheme-wrapper.h 2010-08-24 23:09:18.000000000 +0200
@@ -32,6 +32,10 @@ const gchar * ts_get_success_msg      (v
 
 void          ts_interpret_stdin      (void);
 
+/* ==== modified by Lukasz Czerwinski (lc277642@xxxxxxxxxxxxxxxxxxxxx) */
+int load_script_file(const char *fname);
+/* ==== end of modification ==== */
+
 /* if the return value is 0, success. error otherwise. */
 gint          ts_interpret_string     (const gchar  *expr);
 
diff -rup /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/script-fu-scripts.c gimp/plug-ins/script-fu/script-fu-scripts.c
--- /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/script-fu-scripts.c 2010-08-24 17:49:15.000000000 +0200
+++ gimp/plug-ins/script-fu/script-fu-scripts.c 2010-08-25 16:58:31.000000000 +0200
@@ -589,6 +589,7 @@ script_fu_run_command (const gchar  *com
   return success;
 }
 
+/* modified by Lukasz Czerwinski (lc277642@xxxxxxxxxxxxxxxxxxxxx) */
 static void
 script_fu_load_script (const GimpDatafileData *file_data,
                        gpointer                user_data)
@@ -602,13 +603,15 @@ script_fu_load_script (const GimpDatafil
       command = g_strdup_printf ("(load \"%s\")", escaped);
       g_free (escaped);
 
-      if (! script_fu_run_command (command, &error))
+//      if (! script_fu_run_command (command, &error))
+      if (! load_script_file(file_data->filename))
         {
           gchar *display_name = g_filename_display_name (file_data->filename);
           gchar *message      = g_strdup_printf (_("Error while loading %s:"),
                                                  display_name);
+          g_message (message);
 
-          g_message ("%s\n\n%s", message, error->message);
+//          g_message ("%s\n\n%s", message, error->message);
 
           g_clear_error (&error);
           g_free (message);
@@ -625,6 +628,7 @@ script_fu_load_script (const GimpDatafil
       g_free (command);
     }
 }
+/* end of modifications */
 
 /*
  *  The following function is a GTraverseFunction.
diff -rup /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/tinyscheme/scheme.c gimp/plug-ins/script-fu/tinyscheme/scheme.c
--- /home/lukasz/OPOS/SOURCE/gimp-git-original/gimp/plug-ins/script-fu/tinyscheme/scheme.c 2010-08-24 17:49:15.000000000 +0200
+++ gimp/plug-ins/script-fu/tinyscheme/scheme.c 2010-08-25 17:08:44.000000000 +0200
@@ -125,6 +125,21 @@ static int utf8_stricmp(const char *s1, 
   return result;
 }
 
+/* modified by Lukasz Czerwinski (lc277642@xxxxxxxxxxxxxxxxxxxxx) */
+#define stricmp_left_converted utf8_stricmp_left_converted
+static int utf8_stricmp_left_converted(const char *case_folded, const char *s2)
+{
+  char *t2a;
+  int result;
+
+  t2a = g_utf8_casefold(s2, -1);
+
+  result = strcmp(case_folded, t2a);
+  g_free(t2a);
+  return result;
+}
+/* end of modification */
+
 #define min(a, b)  ((a) <= (b) ? (a) : (b))
 
 #if USE_STRLWR
@@ -898,15 +913,18 @@ static INLINE pointer oblist_find_by_nam
   int location;
   pointer x;
   char *s;
+  gchar *name_case_folded = g_utf8_casefold(name, -1);
 
   location = hash_fn(name, ivalue_unchecked(sc->oblist));
   for (x = vector_elem(sc->oblist, location); x != sc->NIL; x = cdr(x)) {
     s = symname(car(x));
     /* case-insensitive, per R5RS section 2. */
-    if(stricmp(name, s) == 0) {
+    if(stricmp_left_converted(name_case_folded, s) == 0) {
+      g_free(name_case_folded);
       return car(x);
     }
   }
+  g_free(name_case_folded);
   return sc->NIL;
 }
 
@@ -1415,6 +1433,14 @@ static void finalize_cell(scheme *sc, po
 
 /* ========== Routines for Reading ========== */
 
+/* modified by Lukasz Czerwinski (lc277642@xxxxxxxxxxxxxxxxxxxxx) */
+int scheme_file_push(scheme *sc, const char *fname) {
+  int ret = file_push(sc, fname);
+  file_pop(sc);
+  return ret;
+}
+/* end of modification */
+
 static int file_push(scheme *sc, const char *fname) {
  FILE *fin = NULL;
  if (sc->file_i == MAXFIL-1)
diff -rup /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/tinyscheme/scheme.h gimp/plug-ins/script-fu/tinyscheme/scheme.h
--- /home/lukasz/OPOS/SOURCE/gimp-git-patched/gimp/plug-ins/script-fu/tinyscheme/scheme.h 2010-08-24 17:49:15.000000000 +0200
+++ gimp/plug-ins/script-fu/tinyscheme/scheme.h 2010-08-24 23:07:28.000000000 +0200
@@ -152,6 +152,11 @@ SCHEME_EXPORT pointer scheme_eval(scheme
 void scheme_set_external_data(scheme *sc, void *p);
 SCHEME_EXPORT void scheme_define(scheme *sc, pointer env, pointer symbol, pointer value);
 
+/* modified by Lukasz Czerwinski (lc277642@xxxxxxxxxxxxxxxxxxxxx) */
+SCHEME_EXPORT int scheme_file_push(scheme *sc, const char *fname);
+/* end of modification */
+
+
 typedef pointer (*foreign_func)(scheme *, pointer);
 
 pointer _cons(scheme *sc, pointer a, pointer b, int immutable);


Looking forward to your answer,
Łukasz Czerwiński


_______________________________________________
Gimp-developer mailing list
Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer

[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux