[GNOME VFS] mime info parsing patch ...
Michael Meeks <[email protected]> 11 Jul 2002 12:13:27 +0100
| Newsgroups | gmane.comp.gnome.vfs |
|---|---|
| Message-ID | <[email protected]> |
Hi there, This patch gets mime parsing down to ~33ms on my machine down from 51ms by doing some simple things, That doesn't sound much, but on my Ultra 2 it takes ~ 380ms to parse, hopefully this will get it down to 250 or so. May I commit ? Regards, Michael. Index: ChangeLog =================================================================== RCS file: /cvs/gnome/gnome-vfs/ChangeLog,v retrieving revision 1.1334.2.12 diff -u -p -u -r1.1334.2.12 ChangeLog --- ChangeLog 9 Jul 2002 13:40:49 -0000 1.1334.2.12 +++ ChangeLog 11 Jul 2002 11:09:52 -0000 @@ -1,4 +1,15 @@ +2002-07-11 Michael Meeks <[email protected]> + + * libgnomevfs/gnome-vfs-mime-info.c + (load_type_info_from): use g_string_truncate + for a 20% speedup. + (APPEND_CHAR): inline more for another 20%. + + * test/test-mime.c (main): add --speedTest + for mime info reloading. + 2002-07-05 Stephen Browne <[email protected]> + * modules/cdemenu-desktop-method.c Patch from [email protected] modified the code so that the function create_cde_icon_name_cache Index: libgnomevfs/gnome-vfs-mime-info.c =================================================================== RCS file: /cvs/gnome/gnome-vfs/libgnomevfs/gnome-vfs-mime-info.c,v retrieving revision 1.63.2.1 diff -u -p -u -r1.63.2.1 gnome-vfs-mime-info.c --- libgnomevfs/gnome-vfs-mime-info.c 26 Jun 2002 02:33:32 -0000 1.63.2.1 +++ libgnomevfs/gnome-vfs-mime-info.c 11 Jul 2002 11:09:53 -0000 @@ -303,7 +303,17 @@ typedef enum { STATE_ON_VALUE } ParserState; -#define APPEND_CHAR(gstr,c) g_string_insert_c ((gstr), -1, (c)) +/* #define APPEND_CHAR(gstr,c) g_string_insert_c ((gstr), -1, (c)) */ + +#define APPEND_CHAR(gstr,c) \ + G_STMT_START { \ + if (gstr->len + 1 < gstr->allocated_len) { \ + gstr->str [gstr->len++] = c; \ + gstr->str [gstr->len] = '\0'; \ + } else { \ + g_string_insert_c (gstr, -1, c); \ + } \ + } G_STMT_END typedef enum { FORMAT_MIME, @@ -352,7 +362,7 @@ load_type_info_from (const char *filenam if (c == '\n') { skip_line = FALSE; column = -1; - g_string_assign (line, ""); + g_string_truncate (line, 0); key = lang = last_str_end = 0; } continue; @@ -374,7 +384,7 @@ load_type_info_from (const char *filenam line->str + last_str_end); key = lang = 0; } - g_string_assign (line, ""); + g_string_truncate (line, 0); last_str_end = 0; state = STATE_LOOKING_FOR_KEY; continue; @@ -478,7 +488,7 @@ load_type_info_from (const char *filenam language_level (line->str + lang) < 0) { skip_line = TRUE; key = lang = last_str_end = 0; - g_string_assign (line, ""); + g_string_truncate (line, 0); state = STATE_LOOKING_FOR_KEY; } } else { Index: test/test-mime.c =================================================================== RCS file: /cvs/gnome/gnome-vfs/test/test-mime.c,v retrieving revision 1.13 diff -u -p -u -r1.13 test-mime.c --- test/test-mime.c 17 May 2002 11:00:18 -0000 1.13 +++ test/test-mime.c 11 Jul 2002 11:09:53 -0000 @@ -26,6 +26,7 @@ #include <libgnomevfs/gnome-vfs-init.h> #include <libgnomevfs/gnome-vfs-mime-magic.h> #include <libgnomevfs/gnome-vfs-mime-utils.h> +#include <libgnomevfs/gnome-vfs-mime-info.h> #include <libgnomevfs/gnome-vfs-mime.h> #include <libgnomevfs/gnome-vfs-utils.h> @@ -66,16 +67,20 @@ main (int argc, char **argv) gboolean magic_only; gboolean suffix_only; gboolean dump_table; + gboolean speed_test; const char *result; const char *table_path; char *uri_string; char *curdir; char *path; struct stat tmp; + GTimer *timer; + int i; table_path = NULL; magic_only = FALSE; dump_table = FALSE; + speed_test = FALSE; suffix_only = FALSE; if (!gnome_vfs_init ()) { @@ -98,6 +103,8 @@ main (int argc, char **argv) suffix_only = TRUE; } else if (strcmp (*argv, "--dumpTable") == 0) { dump_table = TRUE; + } else if (strcmp (*argv, "--speedTest") == 0) { + speed_test = TRUE; } else if (strcmp (*argv, "--loadTable") == 0) { ++argv; if (!*argv) { @@ -121,6 +128,16 @@ main (int argc, char **argv) if (dump_table) { gnome_vfs_mime_dump_magic_table (); + } + + if (speed_test) { + timer = g_timer_new (); + g_timer_start (timer); + for (i = 0; i < 100; i++) { + gnome_vfs_mime_info_reload (); + } + fprintf (stderr, "Mime reload took %g(ms)\n", + g_timer_elapsed (timer, NULL) * 10.0); } for (; *argv != NULL; argv++) { -- [email protected] <><, Pseudo Engineer, itinerant idiot _______________________________________________ gnome-vfs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/gnome-vfs