summaryrefslogtreecommitdiffstats
path: root/parameter/ParameterMgr.cpp
diff options
context:
space:
mode:
authorGuillaume Denneulin <guillaumex.denneulin@intel.com>2012-02-17 14:38:14 +0100
committerDavid Wagner <david.wagner@intel.com>2014-02-10 17:15:02 +0100
commita4ec15d5d5e84fbee3faa46a66e7b1eb90816ce2 (patch)
treef9337905614685a6cc18036c56d477a5a6f83450 /parameter/ParameterMgr.cpp
parent19bb62917f765c3fa11d1d4c5f88c445e22f227a (diff)
downloadexternal_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.cpp35
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"));