diff options
author | Guillaume Denneulin <guillaumex.denneulin@intel.com> | 2012-02-17 14:38:14 +0100 |
---|---|---|
committer | David Wagner <david.wagner@intel.com> | 2014-02-10 17:15:02 +0100 |
commit | a4ec15d5d5e84fbee3faa46a66e7b1eb90816ce2 (patch) | |
tree | f9337905614685a6cc18036c56d477a5a6f83450 /parameter/ParameterMgr.cpp | |
parent | 19bb62917f765c3fa11d1d4c5f88c445e22f227a (diff) | |
download | external_parameter-framework-a4ec15d5d5e84fbee3faa46a66e7b1eb90816ce2.zip external_parameter-framework-a4ec15d5d5e84fbee3faa46a66e7b1eb90816ce2.tar.gz external_parameter-framework-a4ec15d5d5e84fbee3faa46a66e7b1eb90816ce2.tar.bz2 |
PFW: Enhance subsytem libraries load mechanism
BZ: 24093
If a subsystem library depends on another one, the libraries have to be loaded
in a predefined order.
the previous recovery mechanism on PFW was: When a subsystem library does not
load because of a missing dependency, it tries to load all the other subsystems
before trying one more time to load the failing library.
Unfortunately, Android linker does not allow several try when loading a
library.
In consequence, this patch implements a new mechanism to load its subsystem
libraries.
For this new mechanism, the PFW will load the subsystem libraries in the order
they are disposed in the file ParameterFrameworkConfiguration.xml
Change-Id: I39b97e33c77a6b4392c3813cd3d780e10e3b60f8
Signed-off-by: Guillaume Denneulin <guillaumex.denneulin@intel.com>
Reviewed-on: http://android.intel.com:8080/35903
Reviewed-by: Barthes, FabienX <fabienx.barthes@intel.com>
Tested-by: Barthes, FabienX <fabienx.barthes@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
Diffstat (limited to 'parameter/ParameterMgr.cpp')
-rw-r--r-- | parameter/ParameterMgr.cpp | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp index 6ef37bb..3b6447a 100644 --- a/parameter/ParameterMgr.cpp +++ b/parameter/ParameterMgr.cpp @@ -54,6 +54,8 @@ #include "XmlFileIncluderElement.h" #include "ParameterFrameworkConfiguration.h" #include "FrameworkConfigurationGroup.h" +#include "PluginLocation.h" +#include "SubsystemPlugins.h" #include "FrameworkConfigurationLocation.h" #include "ConfigurableDomains.h" #include "ConfigurableDomain.h" @@ -182,6 +184,7 @@ CParameterMgr::CParameterMgr(const string& strConfigurationFilePath) : _pMainParameterBlackboard(new CParameterBlackboard), _pElementLibrarySet(new CElementLibrarySet), _strXmlConfigurationFilePath(strConfigurationFilePath), + _pSubsystemPlugins(NULL), _uiStructureChecksum(0), _pRemoteProcessorServer(NULL), _uiMaxCommandUsageLength(0), @@ -307,7 +310,7 @@ bool CParameterMgr::load(string& strError) } // Load subsystems - if (!getSystemClass()->loadSubsystems(strError, _astrPluginFolderPaths)) { + if (!getSystemClass()->loadSubsystems(strError, _pSubsystemPlugins)) { return false; } @@ -373,33 +376,15 @@ bool CParameterMgr::loadFrameworkConfiguration(string& strError) getSystemClass()->setName(getConstFrameworkConfiguration()->getSystemClassName()); getConfigurableDomains()->setName(getConstFrameworkConfiguration()->getSystemClassName()); - // Get subsystem plugins folders element - const CFrameworkConfigurationGroup* pSubsystemPluginFolders = static_cast<const CFrameworkConfigurationGroup*>(getConstFrameworkConfiguration()->findChild("SubsystemPluginFolders")); + // Get subsystem plugins elements + _pSubsystemPlugins = static_cast<const CSubsystemPlugins*>(getConstFrameworkConfiguration()->findChild("SubsystemPlugins")); - if (!pSubsystemPluginFolders) { + if (!_pSubsystemPlugins) { - strError = "Parameter Framework Configuration: couldn't find SubsystemPluginFolders element"; + strError = "Parameter Framework Configuration: couldn't find SubsystemPlugins element"; return false; } - // Get plugin locations - uint32_t uiPluginFolderLocation; - uint32_t uiNbPluginFolderLocations = pSubsystemPluginFolders->getNbChildren(); - - if (!uiNbPluginFolderLocations) { - - strError = "Parameter Framework Configuration: couldn't find any PluginFolderLocation element"; - - return false; - } - - // Collect plugin paths - for (uiPluginFolderLocation = 0; uiPluginFolderLocation < uiNbPluginFolderLocations; uiPluginFolderLocation++) { - - const CFrameworkConfigurationLocation* pSubsystemPluginLocation = static_cast<const CFrameworkConfigurationLocation*>(pSubsystemPluginFolders->getChild(uiPluginFolderLocation)); - - _astrPluginFolderPaths.push_back(pSubsystemPluginLocation->getFilePath(_strXmlConfigurationFilePath)); - } // Log tuning availability log("Tuning %s", getConstFrameworkConfiguration()->isTuningAllowed() ? "allowed" : "prohibited"); @@ -1736,8 +1721,8 @@ void CParameterMgr::feedElementLibraries() CElementLibrary* pFrameworkConfigurationLibrary = new CElementLibrary; pFrameworkConfigurationLibrary->addElementBuilder(new TElementBuilderTemplate<CParameterFrameworkConfiguration>("ParameterFrameworkConfiguration")); - pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationGroup>("SubsystemPluginFolders")); - pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>("PluginFolderLocation")); + pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CSubsystemPlugins>("SubsystemPlugins")); + pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CPluginLocation>("Location")); pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>("StructureDescriptionFileLocation")); pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationGroup>("SettingsConfiguration")); pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>("ConfigurableDomainsFileLocation")); |