PFW: Improve login in PFW core and amixer plugin

BZ: 71914

Autolog adds a nesting log level. It is not always needed. For example in a
Debug context a lot of log can be expected, so this level is useful but not
otherwise.

Autolog nesting is now optional.
Add log during PFW structure loading.

Change-Id: I24e1f615e3032c70a3b8b85a1cc1804dc49b631c
Origin-Change-Id: I1f2c6c843e17595d4a81c1d2dfbff30d4187cdf8
Signed-off-by: Kevin Rocard <kevinx.rocard@intel.com>
Reviewed-on: http://android.intel.com:8080/81269
Reviewed-by: Barthes, FabienX <fabienx.barthes@intel.com>
Tested-by: Barthes, FabienX <fabienx.barthes@intel.com>
Reviewed-by: cactus <cactus@intel.com>
Tested-by: cactus <cactus@intel.com>
diff --git a/parameter/AutoLog.cpp b/parameter/AutoLog.cpp
index 629d57b..eb59b01 100644
--- a/parameter/AutoLog.cpp
+++ b/parameter/AutoLog.cpp
@@ -24,20 +24,23 @@
  */
 #include "AutoLog.h"
 
-CAutoLog::CAutoLog(const CElement* pElement, const string& strContext) : _pElement(pElement), _strContext(strContext)
+CAutoLog::CAutoLog(const CElement* pElement, const string& strContext, bool bLogOn)
+    : _pElement(pElement), _strContext(strContext), _bLogOn(bLogOn)
 {
-    // Log
-    _pElement->doLog(_strContext + " {");
-
-    // Nest
-    _pElement->nestLog();
+    if (_bLogOn) {
+        // Log
+        _pElement->doLog(_strContext + " {");
+        // Nest
+        _pElement->nestLog();
+    }
 }
 
 CAutoLog::~CAutoLog()
 {
-    // Unnest
-    _pElement->unnestLog();
-
-    // Log
-    _pElement->doLog( "} " + _strContext);
+    if (_bLogOn) {
+        // Unnest
+        _pElement->unnestLog();
+        // Log
+        _pElement->doLog( "} " + _strContext);
+    }
 }
diff --git a/parameter/AutoLog.h b/parameter/AutoLog.h
index c6a2a01..818b3c5 100644
--- a/parameter/AutoLog.h
+++ b/parameter/AutoLog.h
@@ -29,7 +29,7 @@
 class CAutoLog
 {
 public:
-    CAutoLog(const CElement* pElement, const string& strContext);
+    CAutoLog(const CElement* pElement, const string& strContext, bool bLogOn = true);
     ~CAutoLog();
 
 private:
@@ -39,5 +39,7 @@
     const CElement* _pElement;
     // Context
     string _strContext;
+    // Log on
+    bool _bLogOn;
 };
 
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp
index cff2b47..4e6e4da 100644
--- a/parameter/ParameterMgr.cpp
+++ b/parameter/ParameterMgr.cpp
@@ -332,19 +332,21 @@
     // Back synchronization for areas in parameter blackboard not covered by any domain
     CBackSynchronizer* pBackSynchronizer = createBackSynchronizer(strError);
 
-    log("Main blackboard back synchronization");
-
     // Back-synchronize
-    if (!pBackSynchronizer->sync()) {
+    {
+        CAutoLog autoLog(this, "Main blackboard back synchronization");
+
+        if (!pBackSynchronizer->sync()) {
+            // Get rid of back synchronizer
+            delete pBackSynchronizer;
+
+            strError = "Main blackboard back synchronization failed: " + strError;
+
+            return false;
+        }
         // Get rid of back synchronizer
         delete pBackSynchronizer;
-
-        strError = "Main blackboard back synchronization failed: " + strError;
-
-        return false;
     }
-    // Get rif of back synchronizer
-    delete pBackSynchronizer;
 
     // We're done loading the settings and back synchronizing
     CConfigurableDomains* pConfigurableDomains = getConfigurableDomains();
@@ -420,7 +422,7 @@
     // Parse Structure XML file
     CXmlParameterSerializingContext parameterBuildContext(strError);
 
-    log("Importing system structure from file %s", strXmlStructureFilePath.c_str());
+    CAutoLog autolog(pSystemClass, "Importing system structure from file " + strXmlStructureFilePath);
 
     if (!xmlParse(parameterBuildContext, pSystemClass, strXmlStructureFilePath, strXmlStructureFolder, EParameterCreationLibrary)) {
 
diff --git a/parameter/XmlFileIncluderElement.cpp b/parameter/XmlFileIncluderElement.cpp
index 4986758..06f64ff 100644
--- a/parameter/XmlFileIncluderElement.cpp
+++ b/parameter/XmlFileIncluderElement.cpp
@@ -27,6 +27,7 @@
 #include "XmlMemoryDocSink.h"
 #include "XmlElementSerializingContext.h"
 #include "ElementLibrary.h"
+#include "AutoLog.h"
 #include <assert.h>
 
 #define base CKindElement
@@ -53,41 +54,45 @@
     // Instantiate parser
     string strIncludedElementType = getIncludedElementType();
 
-    // Use a doc source that load data from a file
-    CXmlFileDocSource fileDocSource(strPath, elementSerializingContext.getXmlSchemaPathFolder() + "/" + strIncludedElementType + ".xsd", strIncludedElementType);
+    {
+        // Open a log section titled with loading file path
+        CAutoLog autolog(this, "Loading " + strPath);
 
-    if (!fileDocSource.isParsable(elementSerializingContext)) {
+        // Use a doc source that load data from a file
+        CXmlFileDocSource fileDocSource(strPath, elementSerializingContext.getXmlSchemaPathFolder() + "/" + strIncludedElementType + ".xsd", strIncludedElementType);
 
-        return false;
+        if (!fileDocSource.isParsable(elementSerializingContext)) {
+
+            return false;
+        }
+
+        // Get top level element
+        CXmlElement childElement;
+
+        fileDocSource.getRootElement(childElement);
+
+        // Create child element
+        CElement* pChild = elementSerializingContext.getElementLibrary()->createElement(childElement);
+
+        if (pChild) {
+
+            // Store created child!
+            getParent()->addChild(pChild);
+        } else {
+
+            elementSerializingContext.setError("Unable to create XML element " + childElement.getPath());
+
+            return false;
+        }
+
+        // Use a doc sink that instantiate the structure from the doc source
+        CXmlMemoryDocSink memorySink(pChild);
+
+        if (!memorySink.process(fileDocSource, elementSerializingContext)) {
+
+            return false;
+        }
     }
-
-    // Get top level element
-    CXmlElement childElement;
-
-    fileDocSource.getRootElement(childElement);
-
-    // Create child element
-    CElement* pChild = elementSerializingContext.getElementLibrary()->createElement(childElement);
-
-    if (pChild) {
-
-        // Store created child!
-        getParent()->addChild(pChild);
-    } else {
-
-        elementSerializingContext.setError("Unable to create XML element " + childElement.getPath());
-
-        return false;
-    }
-
-    // Use a doc sink that instantiate the structure from the doc source
-    CXmlMemoryDocSink memorySink(pChild);
-
-    if (!memorySink.process(fileDocSource, elementSerializingContext)) {
-
-        return false;
-    }
-
     // Detach from parent
     getParent()->removeChild(this);