perfsrv/piprofiler/engine/src/ProfilerEngine.cpp
changeset 62 1c2bb2fc7c87
parent 51 98307c651589
--- a/perfsrv/piprofiler/engine/src/ProfilerEngine.cpp	Fri Oct 08 14:56:39 2010 +0300
+++ b/perfsrv/piprofiler/engine/src/ProfilerEngine.cpp	Tue Oct 26 16:20:32 2010 +0300
@@ -95,17 +95,20 @@
  *
  */
 // --------------------------------------------------------------------------------------------
-CProfiler* CProfiler::NewLC(const TDesC& aSettingsFile)
+CProfiler* CProfiler::NewLC(const TDesC& aSettingsFile, TBool aBootMode)
     {
-	CProfiler* self = new(ELeave) CProfiler(aSettingsFile);
+	CProfiler* self = new(ELeave) CProfiler(aSettingsFile ,aBootMode);
 	CleanupStack::PushL(self);
 	self->ConstructL();
+	
+	LOGTEXT(_L("CProfiler::NewLC - done"));
 	return self;
     }
 
 // --------------------------------------------------------------------------------------------
-CProfiler::CProfiler(const TDesC& aSettingsFile) : 
-    iSettingsFileLocation(aSettingsFile)
+CProfiler::CProfiler(const TDesC& aSettingsFile, TBool aBootMode) : 
+    iSettingsFileLocation(aSettingsFile),
+    iBootMode(aBootMode)
 	{
 	// define property for Profiler Engine status, UI may read it for control purposes
 	if ( RProperty::Define(KEngineStatusPropertyCat, 
@@ -190,15 +193,18 @@
 
 	// close engine status property
 	iEngineStatus.Close();
-	if (RProperty::Delete(KEngineStatusPropertyCat, EProfilerEngineStatus) != KErrNotFound)
+	TInt ret = RProperty::Delete(KEngineStatusPropertyCat, EProfilerEngineStatus);
+	if ( ret != KErrNone)
 	    {
-	    LOGTEXT(_L("CProfiler::~CProfiler - cannot close status property"));
+	    LOGSTRING2("CProfiler::~CProfiler - cannot close status property %d", ret);
+
 	    }
     // close engine update property
     iUpdateStatus.Close();
-    if (RProperty::Delete(KEngineStatusPropertyCat, EProfilerErrorStatus) != KErrNotFound)
+    ret = RProperty::Delete(KEngineStatusPropertyCat, EProfilerErrorStatus); 
+    if (ret != KErrNone)
         {
-        LOGTEXT(_L("CProfiler::~CProfiler - cannot close update property"));
+        LOGSTRING2("CProfiler::~CProfiler - cannot close update property %d",ret);
         }
     
     // close server process
@@ -222,8 +228,17 @@
 void CProfiler::ConstructL()
     {
 	LOGTEXT(_L("CProfiler::ConstructL - Enter"));
-	TInt err(0);
+    TInt err(0);
 	TLex lex;
+
+	if(iBootMode)
+	    {
+        LOGSTRING("boot mode enabled");
+	    }
+	else
+	    {
+        LOGSTRING("normal mode enabled");
+	    }
 	
 	if ( iSettingsFileLocation.CompareF(KNullDesC) != 0 )
 	    {
@@ -236,15 +251,12 @@
             // there is another item in the list
             TPtrC filename = lex.MarkedToken();
             LOGSTRING2("filename %S", &filename);
-            lex.SkipSpace();
-            lex.Mark();
-            lex.SkipCharacters();
-            if(lex.TokenLength() != 0)
-                {
-                TPtrC boot = lex.MarkedToken();
-                LOGTEXT(_L("boot mode"));
-                }
-            }
+
+           }
+	    }
+	else
+	    {
+        LOGSTRING("CProfiler::ConstructL - Enter - settingsfilelocation null");
 	    }
 	
     // create new sampler stream instance
@@ -259,12 +271,13 @@
     iErrorChecker = CProfilerErrorChecker::NewL();
     iErrorChecker->SetObserver(this);
 
-	// create and initiate plug-in controller instances
-    iSamplerHandler = CSamplerController::NewL(*iUserStream);
-    iWriterHandler = CWriterController::NewL(*iUserStream);
-    
+    // create and initiate plug-in controller instances
+    iSamplerHandler = CSamplerController::NewL(*iUserStream, iBootMode);
+    LOGSTRING("CSamplerController started from ProfilerEngine");
+    iWriterHandler = CWriterController::NewL(*iUserStream, iBootMode);
+    LOGSTRING("CWriterController started from ProfilerEngine");
     iWriterHandler->InitialiseWriterListL();
-    
+    LOGSTRING("WriterList initialised started from ProfilerEngine");
     // set engine as an observer to sampler controller to get the notification of plugin load has ended
     iSamplerHandler->SetObserver(this);
     
@@ -299,6 +312,11 @@
 		else break;
 	    }
 
+	if(err != KErrNone) 
+	    {
+		User::Leave(err);
+	    }
+
 	// set settings file loading preferences
 	iSettingsFileLoaded = EFalse;
 
@@ -342,7 +360,7 @@
 
         iSettingsFileLoaded = ETrue;
         }
-    
+    LOGSTRING("CProfiler::HandleSamplerControllerReadyL rendezvous");
     // notify engine's launcher(UI or PIProfilerLauncher) to continue launch
     RProcess::Rendezvous(KErrNone); 
     }
@@ -381,7 +399,7 @@
 // ----------------------------------------------------------------------------
 void CProfiler::DoGetValueFromSettingsArray(CDesC8ArrayFlat* aLineArray, const TDesC8& aAttribute, TDes8& aValue)
     {
-    LOGTEXT(_L("CProfiler::DoGetValueFromSettingsFile()"));
+    LOGTEXT(_L("CProfiler::DoGetValueFromSettingsArray()"));
     _LIT8(KSettingItemSeparator, "=");
     
     // read a line of given array
@@ -404,7 +422,7 @@
 
 void CProfiler::DoGetValueFromSettingsArray(CDesC8ArrayFlat* aLineArray, const TDesC8& aAttribute, TInt& aValue)
     {
-    LOGTEXT(_L("CProfiler::DoGetValueFromSettingsFile()"));
+    LOGTEXT(_L("CProfiler::DoGetValueFromSettingsFile() TLex"));
     _LIT8(KSettingItemSeparator, "=");
     
     // read a line of given array
@@ -686,6 +704,7 @@
 void CProfiler::UpdateSavedGeneralAttributes(CDesC8ArrayFlat* aSavedAttributes)
     {
     // get saved general settings
+    LOGSTRING("CProfiler::UpdateSavedGeneralAttributes");
     DoGetValueFromSettingsArray(aSavedAttributes, KGenericTraceOutput, iGeneralAttributes.iTraceOutput);
     DoGetValueFromSettingsArray(aSavedAttributes, KGenericTraceFilePrefix, iGeneralAttributes.iTraceFilePrefix);
     DoGetValueFromSettingsArray(aSavedAttributes, KGenericTraceFileSaveDrive, iGeneralAttributes.iSaveFileDrive);
@@ -896,10 +915,11 @@
     // connect to file server
     err = fs.Connect();
     if( err != KErrNone )
-        {
+    {
         // failed to write settings to settings file
+        RDebug::Printf("FS connect failed");
         return;
-        }
+    }
     
     // create and set the private path
     fs.CreatePrivatePath(EDriveC);
@@ -908,10 +928,12 @@
     // create the new settings file
     err = settingsFile.Replace(fs, iSettingsFileLocation, EFileWrite);
     if(err != KErrNone)
-        return;
+        {
+        RDebug::Printf("Settingsfile replace failed");
+        fs.Close();
+        return;     
+        }
     
-    CleanupClosePushL(settingsFile);  
-
     // write the header
     line.Copy(KPIProfilerSettingsHeader);
     line.Append(KNewLineSeparator);
@@ -996,7 +1018,7 @@
     // call CSamplerController to write all sampler settings
     iSamplerHandler->ComposeAttributesToSettingsFileFormat(settingsFile, iDefaultSamplerAttributesArray);
     
-    CleanupStack::PopAndDestroy(); //settingsFile
+    settingsFile.Close();
     // close file
     fs.Close();
     }
@@ -1394,7 +1416,7 @@
 	CleanupStack::PushL(self);
 	self->StartL(KProfilerName);
 	CleanupStack::Pop();
-	LOGTEXT(_L("CPSession::NewL - Exit"));
+	LOGTEXT(_L("CPServer::NewL - Exit "));
 	return self;
     }
 
@@ -1424,16 +1446,20 @@
  *
  */
 // --------------------------------------------------------------------------------------------
-static void RunEngineServerL(const TDesC& aSettingsFile)
+static void RunEngineServerL(const TDesC& aSettingsFile, TBool aBoot)
     {
-	RDebug::Print(_L("Profiler: RunEngineServerL() - Install active scheduler"));
+	LOGSTRING("Profiler: RunEngineServerL() - Install active scheduler");
 	CActiveScheduler* pS = new CActiveScheduler;
 	CActiveScheduler::Install(pS);
-	CProfiler* p = CProfiler::NewLC(aSettingsFile);
+	CProfiler* p = CProfiler::NewLC(aSettingsFile, aBoot);
+	
+	LOGSTRING("Profiler: RunEngineServerL() - Starting active scheduler");
 	CActiveScheduler::Start();
 	p->Finalise();
+	LOGSTRING("Profiler: RunEngineServerL() - profiler finalised");
 	CleanupStack::PopAndDestroy(p);
 	delete pS;
+	LOGSTRING("Profiler: RunEngineServerL() - done");
     }
 
 // --------------------------------------------------------------------------------------------
@@ -1477,35 +1503,74 @@
 // --------------------------------------------------------------------------------------------
 GLDEF_C TInt E32Main()
     {
+    LOGSTRING("Profiler: E32Main()");
     // parse command line arguments 
     TBuf<256> c;
     TInt err(KErrNone);
+    _LIT(KBootMeasurement,"*boot");
     
+    TBool myBoot(EFalse);
     // copy the full command line with arguments into a buffer
     User::CommandLine(c);
 
+    // parse command line for boot mode. filename boot
+    
+            
+    if (c.Match(KBootMeasurement) != KErrNotFound)
+       {
+       LOGTEXT(_L("ParseCommandAndExecute Found keyword boot"));
+       myBoot = ETrue;
+       }    
+    
+    TBuf<256> temp;
+    temp.Append(c);
+    TLex lex(temp);
+    lex.Mark();
+    lex.SkipCharacters();
+    
+    TPtrC token;
     TBuf<256> fileName;
-    fileName.Append(c); // only one settings param should be
-    LOGSTRING3("Filename is %S, response %d 1", &fileName, err);
-    err = TestSettingsFile(fileName);
-    if(err != KErrNone)
+    
+    if(lex.TokenLength() != 0)
         {
-        LOGSTRING3("Filename is %S, response %d 2", &fileName, err);
-        // settings file does not exist, copy null desc to file name
-        fileName.Copy(KNullDesC);
+        TPtrC token = lex.MarkedToken();
+        LOGSTRING2("E32 Main Token 1 %S",&token);
+        fileName.Append(token); // only one settings param should be
+        LOGSTRING3("Filename is #%S#, response %d 1", &fileName, err);
+        err = TestSettingsFile(fileName);
+        if(err != KErrNone)
+            {
+            LOGSTRING3("Filename is #%S#, response %d 2", &fileName, err);
+            // settings file does not exist, copy null desc to file name
+            fileName.Copy(KNullDesC);
+            }
+        }
+    else
+        {
+        LOGTEXT(_L("E32 Main Problem 1 in parsing command line"));
         }
 
-    LOGSTRING3("Filename is %S, response %d 3", &fileName, err);
-    
     // if no command line arguments found just start the profiler process
     __UHEAP_MARK;
     CTrapCleanup* cleanup = CTrapCleanup::New();
     TInt ret(KErrNoMemory);
+    err = KErrNoMemory;
     if( cleanup )
         {
-        TRAPD( ret, RunEngineServerL(fileName) );
-        RDebug::Print(_L("Profiler: E32Main() - ret %d"), ret);
-        delete cleanup;
+        TRAPD(err ,RunEngineServerL(fileName, myBoot));
+        LOGSTRING3("Profiler: E32Main() - ret %d err %d", ret,err);
+        if(err != KErrNone)
+            {
+            RDebug::Print(_L("if Profiler: E32Main() - ret %d err %d"), ret,err);
+            ret = err;
+            delete cleanup;
+            }
+        else
+            {
+            LOGSTRING3("else Profiler: E32Main() - ret %d err %d", ret,err);
+            ret = err;
+            delete cleanup;    
+            }
         } 
     __UHEAP_MARKEND;