diff -r ec9266033bd7 -r b8aae0a088d8 hacks/profiling/startupprofiling.cpp --- /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 +#include +#include + + + + + +//------------------------------------------------------------------------------------------------------------ +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); + }