Commit 76928f07 authored by Sam McNally's avatar Sam McNally Committed by Commit Bot

Use a single PrefStoreRegistryPtr for layered pref store registration.

On low-end devices, BindInterface can be quite expensive. This CL
improves startup performance on low-end devices by using a single
PrefStoreRegistryPtr for all layered pref stores to be registered with
the pref service.

Bug: 654988
Change-Id: I1536f69f7c1a959cb41ed2b728e995b0d5f7eb17
Reviewed-on: https://chromium-review.googlesource.com/494368
Commit-Queue: Sam McNally <sammc@chromium.org>
Reviewed-by: default avatarBernhard Bauer <bauerb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#468938}
parent b79cca12
...@@ -59,19 +59,17 @@ namespace { ...@@ -59,19 +59,17 @@ namespace {
// Expose the |backing_pref_store| through the prefs service. // Expose the |backing_pref_store| through the prefs service.
scoped_refptr<::PrefStore> CreateRegisteredPrefStore( scoped_refptr<::PrefStore> CreateRegisteredPrefStore(
service_manager::Connector* connector, prefs::mojom::PrefStoreRegistry* registry,
scoped_refptr<::PrefStore> backing_pref_store, scoped_refptr<::PrefStore> backing_pref_store,
PrefValueStore::PrefStoreType type) { PrefValueStore::PrefStoreType type) {
// If we're testing or if the prefs service feature flag is off we don't // If we're testing or if the prefs service feature flag is off we don't
// register. // register.
if (!connector || !backing_pref_store) if (!registry || !backing_pref_store)
return backing_pref_store; return backing_pref_store;
prefs::mojom::PrefStoreRegistryPtr registry_ptr;
connector->BindInterface(prefs::mojom::kServiceName, &registry_ptr);
return make_scoped_refptr(new prefs::PrefStoreAdapter( return make_scoped_refptr(new prefs::PrefStoreAdapter(
backing_pref_store, prefs::PrefStoreImpl::Create( backing_pref_store,
registry_ptr.get(), backing_pref_store, type))); prefs::PrefStoreImpl::Create(registry, backing_pref_store, type)));
} }
} // namespace } // namespace
...@@ -82,19 +80,23 @@ std::unique_ptr<PrefServiceSyncable> PrefServiceSyncableFactory::CreateSyncable( ...@@ -82,19 +80,23 @@ std::unique_ptr<PrefServiceSyncable> PrefServiceSyncableFactory::CreateSyncable(
TRACE_EVENT0("browser", "PrefServiceSyncableFactory::CreateSyncable"); TRACE_EVENT0("browser", "PrefServiceSyncableFactory::CreateSyncable");
PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); PrefNotifierImpl* pref_notifier = new PrefNotifierImpl();
prefs::mojom::PrefStoreRegistryPtr registry;
if (connector)
connector->BindInterface(prefs::mojom::kServiceName, &registry);
// Expose all read-only stores through the prefs service. // Expose all read-only stores through the prefs service.
auto managed = CreateRegisteredPrefStore(connector, managed_prefs_, auto managed = CreateRegisteredPrefStore(registry.get(), managed_prefs_,
PrefValueStore::MANAGED_STORE); PrefValueStore::MANAGED_STORE);
auto supervised = CreateRegisteredPrefStore( auto supervised =
connector, supervised_user_prefs_, PrefValueStore::SUPERVISED_USER_STORE); CreateRegisteredPrefStore(registry.get(), supervised_user_prefs_,
auto extension = CreateRegisteredPrefStore(connector, extension_prefs_, PrefValueStore::SUPERVISED_USER_STORE);
auto extension = CreateRegisteredPrefStore(registry.get(), extension_prefs_,
PrefValueStore::EXTENSION_STORE); PrefValueStore::EXTENSION_STORE);
auto command_line = CreateRegisteredPrefStore( auto command_line = CreateRegisteredPrefStore(
connector, command_line_prefs_, PrefValueStore::COMMAND_LINE_STORE); registry.get(), command_line_prefs_, PrefValueStore::COMMAND_LINE_STORE);
auto recommended = CreateRegisteredPrefStore( auto recommended = CreateRegisteredPrefStore(
connector, recommended_prefs_, PrefValueStore::RECOMMENDED_STORE); registry.get(), recommended_prefs_, PrefValueStore::RECOMMENDED_STORE);
// TODO(sammc): Register Mojo user pref store once implemented.
std::unique_ptr<PrefServiceSyncable> pref_service(new PrefServiceSyncable( std::unique_ptr<PrefServiceSyncable> pref_service(new PrefServiceSyncable(
pref_notifier, pref_notifier,
new PrefValueStore(managed.get(), supervised.get(), extension.get(), new PrefValueStore(managed.get(), supervised.get(), extension.get(),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment