[tracker] tracker-store: Reduce amount of memory used for events



commit bdc04edcaf1d5eb470ab0a6bad3cbced1ea08e3a
Author: Jürg Billeter <j bitron ch>
Date:   Tue Feb 23 16:01:11 2010 +0100

    tracker-store: Reduce amount of memory used for events

 src/tracker-store/tracker-events.c    |   49 +++++++++++---------------------
 src/tracker-store/tracker-events.h    |   11 +++++++-
 src/tracker-store/tracker-resources.c |   14 ++++-----
 3 files changed, 33 insertions(+), 41 deletions(-)
---
diff --git a/src/tracker-store/tracker-events.c b/src/tracker-store/tracker-events.c
index 5dafc78..4402a6b 100644
--- a/src/tracker-store/tracker-events.c
+++ b/src/tracker-store/tracker-events.c
@@ -29,7 +29,7 @@
 
 typedef struct {
 	GHashTable *allowances;
-	GPtrArray *events;
+	GArray *events;
 } EventsPrivate;
 
 static GStaticPrivate private_key = G_STATIC_PRIVATE_INIT;
@@ -59,39 +59,18 @@ prepare_event_for_rdf_type (EventsPrivate *private,
                             TrackerDBusEventsType type,
                             const gchar *predicate)
 {
-	GValueArray *event;
-	GValue uri_value = { 0 , };
-	GValue rdfclass_value = { 0 , };
-	GValue type_value = { 0 , };
-	GValue predicate_value = { 0 , };
+	TrackerEvent event;
 
 	if (!private->events) {
-		private->events = g_ptr_array_new ();
+		private->events = g_array_new (TRUE, FALSE, sizeof (TrackerEvent));
 	}
 
-	g_value_init (&uri_value, G_TYPE_STRING);
-	g_value_init (&predicate_value, G_TYPE_STRING);
-	g_value_init (&rdfclass_value, G_TYPE_STRING);
-	g_value_init (&type_value, G_TYPE_INT);
+	event.type = type;
+	event.class = tracker_ontologies_get_class_by_uri (rdf_class);
+	event.predicate = tracker_ontologies_get_property_by_uri (predicate);
+	event.subject = g_strdup (uri);
 
-	event = g_value_array_new (4);
-
-	g_value_set_string (&uri_value, uri);
-	g_value_set_string (&predicate_value, predicate);
-	g_value_set_string (&rdfclass_value, rdf_class);
-	g_value_set_int (&type_value, type);
-
-	g_value_array_append (event, &uri_value);
-	g_value_array_append (event, &predicate_value);
-	g_value_array_append (event, &rdfclass_value);
-	g_value_array_append (event, &type_value);
-
-	g_ptr_array_add (private->events, event);
-
-	g_value_unset (&uri_value);
-	g_value_unset (&rdfclass_value);
-	g_value_unset (&type_value);
-	g_value_unset (&predicate_value);
+	g_array_append_val (private->events, event);
 }
 
 void
@@ -136,6 +115,12 @@ tracker_events_insert (const gchar *uri,
 	}
 }
 
+static void
+tracker_event_destroy (TrackerEvent *event)
+{
+	g_free (event->subject);
+}
+
 void
 tracker_events_reset (void)
 {
@@ -147,15 +132,15 @@ tracker_events_reset (void)
 
 	if (private->events) {
 		for (i = 0; i < private->events->len; i++) {
-			g_value_array_free (private->events->pdata[i]);
+			tracker_event_destroy (&g_array_index (private->events, TrackerEvent, i));
 		}
-		g_ptr_array_free (private->events, TRUE);
+		g_array_free (private->events, TRUE);
 
 		private->events = NULL;
 	}
 }
 
-GPtrArray *
+GArray *
 tracker_events_get_pending (void)
 {
 	EventsPrivate *private;
diff --git a/src/tracker-store/tracker-events.h b/src/tracker-store/tracker-events.h
index 6071661..3729c17 100644
--- a/src/tracker-store/tracker-events.h
+++ b/src/tracker-store/tracker-events.h
@@ -27,6 +27,15 @@
 
 G_BEGIN_DECLS
 
+typedef struct TrackerEvent TrackerEvent;
+
+struct TrackerEvent {
+	TrackerDBusEventsType type;
+	TrackerClass *class;
+	TrackerProperty *predicate;
+	gchar *subject;
+};
+
 typedef GStrv (*TrackerNotifyClassGetter) (void);
 
 void       tracker_events_init        (TrackerNotifyClassGetter  callback);
@@ -36,7 +45,7 @@ void       tracker_events_insert      (const gchar              *uri,
                                        const gchar              *object,
                                        GPtrArray                *rdf_types,
                                        TrackerDBusEventsType     type);
-GPtrArray *tracker_events_get_pending (void);
+GArray    *tracker_events_get_pending (void);
 void       tracker_events_reset       (void);
 
 G_END_DECLS
diff --git a/src/tracker-store/tracker-resources.c b/src/tracker-store/tracker-resources.c
index c4c86fa..c54fac2 100644
--- a/src/tracker-store/tracker-resources.c
+++ b/src/tracker-store/tracker-resources.c
@@ -450,7 +450,7 @@ static void
 on_statements_committed (gpointer user_data)
 {
 	TrackerResources *resources = user_data;
-	GPtrArray *events;
+	GArray *events;
 	GHashTable *writebacks;
 	TrackerResourcesPrivate *priv;
 
@@ -467,16 +467,14 @@ on_statements_committed (gpointer user_data)
 		event_sources = priv->event_sources;
 
 		for (i = 0; i < events->len; i++) {
-			GValueArray *event = events->pdata[i];
-			const gchar *uri = g_value_get_string (g_value_array_get_nth (event, 0));
-			const gchar *predicate = g_value_get_string (g_value_array_get_nth (event, 1));
-			const gchar *rdf_class = g_value_get_string (g_value_array_get_nth (event, 2));
-			TrackerDBusEventsType type = g_value_get_int (g_value_array_get_nth (event, 3));
+			TrackerEvent *event;
+
+			event = &g_array_index (events, TrackerEvent, i);
 
 			for (l = event_sources; l; l = l->next) {
 				TrackerResourceClass *class_ = l->data;
-				if (g_strcmp0 (rdf_class, tracker_resource_class_get_rdf_class (class_)) == 0) {
-					tracker_resource_class_add_event (class_, uri, predicate, type);
+				if (g_strcmp0 (tracker_class_get_uri (event->class), tracker_resource_class_get_rdf_class (class_)) == 0) {
+					tracker_resource_class_add_event (class_, event->subject, tracker_property_get_uri (event->predicate), event->type);
 					if (!to_emit) {
 						to_emit = g_hash_table_new (NULL, NULL);
 					}



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