[tracker] Avoid duplicate entries for SubjectsUpdated, performance
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] Avoid duplicate entries for SubjectsUpdated, performance
- Date: Tue, 11 Aug 2009 08:39:32 +0000 (UTC)
commit ce2835ff77deacff92a6037c7933994f6b89c56c
Author: Philip Van Hoof <philip codeminded be>
Date: Tue Aug 11 10:38:43 2009 +0200
Avoid duplicate entries for SubjectsUpdated, performance
src/tracker-store/tracker-events.c | 51 +++++++++++++++++++----------------
1 files changed, 28 insertions(+), 23 deletions(-)
---
diff --git a/src/tracker-store/tracker-events.c b/src/tracker-store/tracker-events.c
index 9d84812..10919e3 100644
--- a/src/tracker-store/tracker-events.c
+++ b/src/tracker-store/tracker-events.c
@@ -60,27 +60,14 @@ is_allowed (EventsPrivate *private, const gchar *rdf_class)
}
static void
-prepare_event_for_rdf_types (gpointer data, gpointer user_data)
+prepare_event_for_rdf_type (EventsPrivate *private, const gchar *rdf_class , const gchar *uri, TrackerDBusEventsType type, const gchar *predicate)
{
- const gchar *rdf_class = data;
- PreparableEvent *info = user_data;
- const gchar *uri = info->uri;
- const gchar *predicate = info->predicate;
- TrackerDBusEventsType type = info->type;
-
- EventsPrivate *private;
GValueArray *event;
GValue uri_value = { 0 , };
GValue rdfclass_value = { 0 , };
GValue type_value = { 0 , };
GValue predicate_value = { 0 , };
- private = g_static_private_get (&private_key);
- g_return_if_fail (private != NULL);
-
- if (!is_allowed (private, rdf_class))
- return;
-
if (!private->events) {
private->events = g_ptr_array_new ();
}
@@ -117,23 +104,41 @@ tracker_events_insert (const gchar *uri,
GPtrArray *rdf_types,
TrackerDBusEventsType type)
{
- PreparableEvent info;
+ EventsPrivate *private;
- info.uri = uri;
- info.type = type;
- info.predicate = predicate;
+ private = g_static_private_get (&private_key);
+ g_return_if_fail (private != NULL);
if (rdf_types && type == TRACKER_DBUS_EVENTS_TYPE_UPDATE) {
- /* object is not very important for updates (we don't expose
- * the value being set to the user's DBus API in tracker-store) */
- g_ptr_array_foreach (rdf_types, prepare_event_for_rdf_types, &info);
+ guint i;
+
+ for (i = 0; i < rdf_types->len; i++) {
+
+ /* object is not very important for updates (we don't expose
+ * the value being set to the user's DBus API in tracker-store) */
+ if (is_allowed (private, rdf_types->pdata[i])) {
+
+ prepare_event_for_rdf_type (private, rdf_types->pdata[i],
+ uri, type, predicate);
+
+ /* Only once match is needed */
+ break;
+ }
+ }
} else if (type == TRACKER_DBUS_EVENTS_TYPE_UPDATE) {
/* In this case we had an INSERT for a resource that didn't exist
* yet, but it was not the rdf:type predicate being inserted */
- prepare_event_for_rdf_types ((gpointer) TRACKER_RDFS_PREFIX "Resource", &info);
+ if (is_allowed (private, (gpointer) TRACKER_RDFS_PREFIX "Resource")) {
+ prepare_event_for_rdf_type (private,
+ (gpointer) TRACKER_RDFS_PREFIX "Resource",
+ uri, type, predicate);
+ }
} else {
/* In case of delete and create, object is the rdf:type */
- prepare_event_for_rdf_types ((gpointer) object, &info);
+ if (is_allowed (private, (gpointer) object)) {
+ prepare_event_for_rdf_type (private, (gpointer) object,
+ uri, type, predicate);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]