hacks/profiling/startupprofiling.cpp
branchsystem_startup
changeset 37 b8aae0a088d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hacks/profiling/startupprofiling.cpp	Thu Oct 14 12:39:29 2010 +0100
@@ -0,0 +1,164 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+//************************************************************************************************************
+//#include <bautils.h>
+#include <profiler.h>
+#include <e32debug.h>
+
+
+
+
+
+//------------------------------------------------------------------------------------------------------------
+void startProfilerServer()
+   {
+	RDebug::Print(_L("Startup Profiling - startProfilerServer()"));
+	_LIT(KParam,"");
+	RProcess p;
+	TInt err;   
+	
+	// Run the Sampling Profiler
+	err=p.Create(KProfilerName,KParam);
+	if (err == KErrNone)
+		{
+		p.Resume();
+		p.Close();
+		User::After(1000000);
+		}
+	else
+		{
+		RDebug::Print(_L("Startup Profiling - ERROR %d: Unable to execute Sampling Profiler\n"), err);
+		}
+	}
+
+
+	
+//************************************************************************************************************
+// PARSE PARAMETER
+//************************************************************************************************************
+TInt parseNumberL(TDes &aArgs, const TDesC &aParam)
+   {
+   TInt     pos, num, ret;
+	TBuf<100> argsTmp;
+   TLex     lexArgs;	   
+   
+   pos = aArgs.Find(aParam);
+   if (pos == KErrNotFound)
+      User::Leave(KErrArgument);
+
+   argsTmp.Insert(0,aArgs);
+   argsTmp.Delete(0,pos + aParam.Length());
+   lexArgs=argsTmp;
+   ret=lexArgs.Val(num);
+   
+   if (ret != KErrNone)
+      User::Leave(KErrArgument);
+   
+   return num;
+   }
+
+
+
+   
+//************************************************************************************************************
+//************************************************************************************************************
+//  MAIN
+//************************************************************************************************************
+//************************************************************************************************************
+void doMainL()
+	{
+	RDebug::Print(_L("Startup Profiling - doMainL"));
+
+	TBuf<100>       buf, args;
+	TInt            waittime(300000000), err;
+
+   _LIT(KParamTime,	"time=");
+		
+   // Get and prepare Command Line
+#ifndef __SECURE_API__
+   RProcess().CommandLine(args);
+#else
+   User::CommandLine(args);   
+#endif
+   args.LowerCase();
+   
+
+   // Parse param and decide what to do  
+   if (args.Find(KParamTime) != KErrNotFound) 
+		{
+		waittime  = parseNumberL(args, KParamTime);  
+		RDebug::Print(_L("Starting Profiler - Wait time requested: %d"), waittime);
+		}
+/*		
+	// ECOM should be already running on a real phone. Does not in testshell mode
+	REComSession ecom;
+	ecom.OpenL();
+	User::After(2000000);	      
+*/
+	// Start the profiler server
+	startProfilerServer();
+	
+	
+	err=Profiler::Start();
+	if (err != KErrNone)
+		{
+		RDebug::Print(_L("Startup Profiling - ERROR %d : Unable to start Sampling Profiler.\n"),err);
+		User::Leave(err);
+		}
+	else
+		{
+		RDebug::Print(_L("Startup Profiling - Profiler Started OK"));
+		}
+		
+	// Now go to sleep until the alloted time (ie until we think boot-up should be complete)	
+	User::After(waittime);
+	RDebug::Print(_L("Startup Profiling - Time's Up, going to stop profiling now"));
+	
+	// Stop, close and unload the profiler properly
+	err=Profiler::Stop();
+	User::After(300000);
+	err=err | Profiler::Close();
+	User::After(300000);
+	err=err | Profiler::Unload();
+	User::After(300000);         
+	if (err != KErrNone)
+		{
+		RDebug::Print(_L("Startup Profiling - ERROR %d : Unable to Stop/Close/Unload Sampling Profiler\n"),err);
+		User::Leave(err);            
+		}
+	}
+
+
+
+//************************************************************************************************************
+//************************************************************************************************************
+// Program Entry
+//************************************************************************************************************
+//************************************************************************************************************
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+	CActiveScheduler* rootScheduler = new CActiveScheduler;
+	CActiveScheduler::Install(rootScheduler);
+	CTrapCleanup* theCleanup=CTrapCleanup::New();
+
+	TRAPD(ret,doMainL());	
+	
+	delete theCleanup;	
+	delete rootScheduler;
+	__UHEAP_MARKEND;
+	return(KErrNone);
+	}