[folks] eds: Share a single E.SourceRegistry between all Edsf.PersonaStores
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [folks] eds: Share a single E.SourceRegistry between all Edsf.PersonaStores
- Date: Wed, 27 Jun 2012 19:39:18 +0000 (UTC)
commit 09c1736bceb33722139704f71bad40ec7b070177
Author: Philip Withnall <philip tecnocode co uk>
Date: Sun Jun 24 18:33:49 2012 +0100
eds: Share a single E.SourceRegistry between all Edsf.PersonaStores
Turns out a single E.SourceRegistry takes about 200ms to construct, due to
involving D-Bus round trips, so sharing the existing SourceRegistry from the
Eds.Backend to all its Edsf.PersonaStores is a big win.
backends/eds/eds-backend.vala | 3 +-
backends/eds/lib/edsf-persona-store.vala | 38 ++++++++++++++++++++++++++----
2 files changed, 35 insertions(+), 6 deletions(-)
---
diff --git a/backends/eds/eds-backend.vala b/backends/eds/eds-backend.vala
index bdf9b3b..1acf38f 100644
--- a/backends/eds/eds-backend.vala
+++ b/backends/eds/eds-backend.vala
@@ -236,7 +236,8 @@ public class Folks.Backends.Eds.Backend : Folks.Backend
debug ("Adding address book '%s'.", uid);
- var store = new Edsf.PersonaStore (s);
+ var store =
+ new Edsf.PersonaStore.with_source_registry (this._ab_sources, s);
store.removed.connect (this._store_removed_cb);
diff --git a/backends/eds/lib/edsf-persona-store.vala b/backends/eds/lib/edsf-persona-store.vala
index 81814c8..d9f5fd9 100644
--- a/backends/eds/lib/edsf-persona-store.vala
+++ b/backends/eds/lib/edsf-persona-store.vala
@@ -222,14 +222,42 @@ public class Edsf.PersonaStore : Folks.PersonaStore
* @param s the e-d-s source being represented by the persona store
*
* @since 0.6.0
+ * @deprecated UNRELEASED Use { link Edsf.PersonaStore.with_source_registry}
*/
- public PersonaStore (E.Source s)
+ [Deprecated (since = "UNRELEASED",
+ replacement = "Edsf.PersonaStore.with_source_registry()")]
+ public PersonaStore (E.SourceRegistry r, E.Source s)
{
string eds_uid = s.get_uid ();
string eds_name = s.get_display_name ();
Object (id: eds_uid,
display_name: eds_name,
source: s);
+
+ this._source_registry = null; /* created in prepare() */
+ }
+
+ /**
+ * Create a new PersonaStore.
+ *
+ * Create a new persona store to store the { link Persona}s for the contacts
+ * in `s`. Passing a re-used source registry to the constructor (compared to
+ * the old { link Edsf.PersonaStore} constructor) saves a lot of time and
+ * D-Bus round trips.
+ *
+ * @param r the EDS source registry giving access to all EDS sources
+ * @param s the EDS source being represented by the persona store
+ *
+ * @since UNRELEASED
+ */
+ public PersonaStore.with_source_registry (E.SourceRegistry r, E.Source s)
+ {
+ string eds_uid = s.get_uid ();
+ Object (id: eds_uid,
+ display_name: eds_uid,
+ source: s);
+
+ this._source_registry = r;
}
construct
@@ -630,10 +658,10 @@ public class Edsf.PersonaStore : Folks.PersonaStore
/* Listen for removal signals for the address book. There's no
* need to check if we still exist in the list, as
* addressbook.open() will fail if we don't. */
- this._source_registry = yield create_source_registry ();
-
- Internal.profiling_point ("created SourceRegistry in " +
- "Edsf.PersonaStore (ID: %s)", this.id);
+ if (this._source_registry == null)
+ {
+ this._source_registry = yield create_source_registry ();
+ }
/* We know _source_registry != null because otherwise
* create_source_registry() would've thrown an error. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]