[tracker/events] tracker-store: Reduce amount of memory used for events
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/events] tracker-store: Reduce amount of memory used for events
- Date: Tue, 23 Feb 2010 15:02:28 +0000 (UTC)
commit 1295b957ac2b16eaf74bfb88acb222fd0e1f2f7a
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]