[maemo-commits] [maemo-commits] r15967 - projects/haf/branches/hildon-thumbnail/daemonize/daemon
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue Sep 2 19:02:39 EEST 2008
- Previous message: [maemo-commits] r15966 - in projects/haf/branches/hildon-thumbnail/daemonize/daemon: . plugins
- Next message: [maemo-commits] r15968 - projects/haf/branches/hildon-thumbnail/daemonize/daemon
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: pvanhoof
Date: 2008-09-02 19:02:37 +0300 (Tue, 02 Sep 2008)
New Revision: 15967
Modified:
projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c
Log:
And now making it actually work too
Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c 2008-09-02 15:53:43 UTC (rev 15966)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c 2008-09-02 16:02:37 UTC (rev 15967)
@@ -155,6 +155,14 @@
g_thread_pool_push (priv->pool, task, NULL);
}
+/* This is the threadpool's function. This means that everything we do is
+ * asynchronous wrt to the mainloop (we aren't blocking it).
+ *
+ * Thanks to the pool_sort_compare sorter is this pool a LIFO, which means that
+ * new requests get a certain priority over older requests. Note that we are not
+ * canceling currently running requests. Also note that the thread count of the
+ * pool is set to one. We could increase this number to add some parallelism */
+
static void
do_the_work (WorkTask *task, gpointer user_data)
{
@@ -167,6 +175,8 @@
gpointer key, value;
gboolean had_error = FALSE;
+ /* We split the request into groups that all have the same mime-type */
+
while (urls[i] != NULL) {
GList *urls_for_mime;
gchar *mime_type = get_mime_type (urls[i]);
@@ -178,7 +188,10 @@
g_hash_table_iter_init (&iter, hash);
+ /* Foreach of those groups */
+
while (g_hash_table_iter_next (&iter, &key, &value) && !had_error) {
+
GList *urlm = value, *copy = urlm;
GStrv urlss = (GStrv) g_malloc0 (sizeof (gchar *) * (g_list_length (urlm) + 1));
DBusGProxy *proxy;
@@ -186,7 +199,7 @@
i = 0;
while (copy) {
- urlss[i] = g_strdup ((gchar *) copy->data);
+ urlss [i] = g_strdup ((gchar *) copy->data);
i++;
copy = g_list_next (copy);
}
@@ -194,6 +207,9 @@
g_list_free (urlm);
g_hash_table_iter_remove (&iter);
+ /* If we have a third party thumbnailer for this mime-type, we
+ * proxy the call */
+
proxy = manager_get_handler (priv->manager, key);
if (proxy) {
GError *error = NULL;
@@ -212,6 +228,9 @@
break;
}
+ /* If not if we have a plugin that can handle it, we let the
+ * plugin have a go at it */
+
} else {
GModule *module = g_hash_table_lookup (priv->plugins, key);
if (module) {
@@ -227,6 +246,8 @@
break;
}
+ /* And if even that is not the case, we are very sorry */
+
} else
g_message ("No handler for %s", (gchar*) key);
}
@@ -399,12 +420,13 @@
(GDestroyNotify) g_free,
NULL);
- priv->pool = g_thread_pool_new ((GFunc) do_the_work,
- NULL, 1, TRUE, NULL);
+ /* We could increase the amount of threads to add some parallelism */
- g_thread_pool_set_sort_function (priv->pool,
- pool_sort_compare, NULL);
+ priv->pool = g_thread_pool_new ((GFunc) do_the_work,NULL,1,TRUE,NULL);
+ /* This sort function makes the pool a LIFO */
+
+ g_thread_pool_set_sort_function (priv->pool, pool_sort_compare, NULL);
}
@@ -445,5 +467,4 @@
object);
*thumbnailer = THUMBNAILER (object);
-
}
- Previous message: [maemo-commits] r15966 - in projects/haf/branches/hildon-thumbnail/daemonize/daemon: . plugins
- Next message: [maemo-commits] r15968 - projects/haf/branches/hildon-thumbnail/daemonize/daemon
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
