udapted vi.po
[rhythmbox.git] / tests / bench-rhythmdb-load.c
blob086d67a39524d2b18fafaeac0d9841576656335b
1 #include <gtk/gtk.h>
2 #include <string.h>
4 #include "rb-debug.h"
5 #include "rb-file-helpers.h"
6 #include "rb-util.h"
8 #include "rhythmdb.h"
9 #include "rhythmdb-tree.h"
11 /* test utils */
12 gboolean waiting, signaled;
13 char *sig_name;
16 static void
17 mark_signal (void)
19 if (signaled) {
20 rb_debug ("got signal '%s' multiple times", sig_name);
21 } else {
22 rb_debug ("got signal '%s'", sig_name);
23 signaled = TRUE;
24 if (waiting)
25 gtk_main_quit ();
29 static void
30 set_waiting_signal (GObject *o, const char *name)
32 signaled = FALSE;
33 waiting = FALSE;
34 sig_name = g_strdup (name);
35 g_signal_connect (o, sig_name, G_CALLBACK (mark_signal), NULL);
38 static void wait_for_signal (void)
40 if (!signaled) {
41 rb_debug ("waiting for signal '%s'", sig_name);
42 waiting = TRUE;
43 gtk_main ();
44 } else {
45 rb_debug ("no need to wait for signal '%s', already received", sig_name);
48 g_free (sig_name);
49 sig_name = NULL;
53 int
54 main (int argc, char **argv)
56 RhythmDB *db;
57 char *name;
58 int i;
60 if (argc < 2) {
61 g_print ("using ~/.gnome2/rhythmbox/rhythmdb.xml\n");
62 name = g_strdup_printf ("%s/rhythmdb.xml", rb_dot_dir ());
63 } else {
64 name = g_strdup (argv[1]);
67 rb_profile_start ("load test");
69 g_thread_init (NULL);
70 rb_threads_init ();
71 gtk_set_locale ();
72 gtk_init (&argc, &argv);
73 gnome_vfs_init ();
74 rb_debug_init (FALSE);
75 rb_refstring_system_init ();
76 rb_file_helpers_init ();
78 GDK_THREADS_ENTER ();
80 db = rhythmdb_tree_new ("test");
81 g_object_set (G_OBJECT (db), "name", name, NULL);
82 g_free (name);
84 for (i = 1; i <= 10; i++) {
85 int j;
86 rb_profile_start ("10 rhythmdb loads");
87 for (j = 1; j <= 10; j++) {
88 set_waiting_signal (G_OBJECT (db), "load-complete");
89 rhythmdb_load (db);
90 wait_for_signal ();
92 rhythmdb_entry_delete_by_type (db, RHYTHMDB_ENTRY_TYPE_SONG);
93 rhythmdb_entry_delete_by_type (db, rhythmdb_entry_type_get_by_name (db, "iradio"));
94 rhythmdb_entry_delete_by_type (db, RHYTHMDB_ENTRY_TYPE_PODCAST_FEED);
95 rhythmdb_entry_delete_by_type (db, RHYTHMDB_ENTRY_TYPE_PODCAST_POST);
97 rb_profile_end ("10 rhythmdb loads");
98 g_print ("completed %d loads\n", i * 10);
101 rhythmdb_shutdown (db);
102 g_object_unref (G_OBJECT (db));
103 db = NULL;
106 rb_file_helpers_shutdown ();
107 rb_refstring_system_shutdown ();
108 gnome_vfs_shutdown ();
111 rb_profile_end ("load test");
112 return 0;