author | mikek |
Sun, 27 Jun 2010 21:43:55 +0100 | |
branch | GCC_SURGE |
changeset 181 | bd8f1e65581b |
parent 0 | a41df078684a |
permissions | -rw-r--r-- |
// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "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: // e32utils\demandpaging\dptestcons.cpp // // #include <e32cons.h> #include <dptest.h> CConsoleBase* TheConsole; void doHelp() { TheConsole->Printf(_L("Usage: dptestcons [-h] [-o] [-f] [-sMIN,MAX]\n")); TheConsole->Printf(_L("\n")); TheConsole->Printf(_L("-h Prints this help information\n")); TheConsole->Printf(_L("-o Prints all DPTest information\n")); TheConsole->Printf(_L("-f Flushes the Demand Paging cache\n")); TheConsole->Printf(_L("-s Sets the Demand Paging cache size (MIN and MAX in bytes)\n")); } void doDPTestInformation() { TheConsole->Printf(_L("DPTest information\n==================\n")); TUint32 attribs = DPTest::Attributes(); _LIT(KOn, "ON"); _LIT(KOff, "OFF"); TheConsole->Printf(_L("ROM Paging: %S\n"), (attribs&DPTest::ERomPaging) ? &KOn : &KOff); TheConsole->Printf(_L("Code Paging: %S\n"), (attribs&DPTest::ECodePaging) ? &KOn : &KOff); TheConsole->Printf(_L("Data Paging: %S\n"), (attribs&DPTest::EDataPaging) ? &KOn : &KOff); TUint min; TUint max; TUint current; TInt err = DPTest::CacheSize(min, max, current); if (err == KErrNone) { TheConsole->Printf(_L("CacheSize: Min=%u, Max=%u, Current=%u\n"), min, max, current); } else { TheConsole->Printf(_L("CacheSize failed with err=%d\n"), err); } TPckgBuf<DPTest::TEventInfo> eventPckg; err = DPTest::EventInfo(eventPckg); if (err == KErrNone) { TheConsole->Printf(_L("EventInfo: PageFaultCount=%Lu, PageInCount=%Lu\n"), eventPckg().iPageFaultCount, eventPckg().iPageInReadCount); } else { TheConsole->Printf(_L("EventInfo failed with err=%d\n"), err); } TheConsole->Printf(_L("==================\n")); } void doFlushCache() { TInt err = DPTest::FlushCache(); TheConsole->Printf(_L("FlushCache completed with err=%d\n"), err); } void doSetCacheSize(const TDesC& aCacheSizes) { TLex lex(aCacheSizes); TChar c = lex.Peek(); while (c != 0 && c != ',') { lex.Inc(); c = lex.Peek(); } TPtrC valDes = lex.MarkedToken(); TUint min; if (TLex(valDes).Val(min) != KErrNone) { TheConsole->Printf(_L("Bad minimum value provided for SetCacheSize: %S\n"), &valDes); return; } if (c != 0) { lex.Inc(); } valDes.Set(lex.Remainder()); TUint max; if (TLex(valDes).Val(max) != KErrNone) { TheConsole->Printf(_L("Bad maximum value provided for SetCacheSize: %S\n"), &valDes); return; } TInt err = DPTest::SetCacheSize(min, max); TheConsole->Printf(_L("SetCacheSize (Min=%u, Max=%u) completed with err=%d\n"), min, max, err); } void processCommands(RArray<TPtrC> aArgArray) { const TInt count = aArgArray.Count(); if (count == 0) { doHelp(); return; } for (TInt ii=0; ii<count; ii++) { TPtrC current = aArgArray[ii]; if (current.Length() < 2 || current[0] != '-') { TheConsole->Printf(_L("Unknown command: %S\n"), ¤t); } switch (current[1]) { case 'h': doHelp(); break; case 'o': doDPTestInformation(); break; case 'f': doFlushCache(); break; case 's': doSetCacheSize(current.Mid(2)); break; default: TheConsole->Printf(_L("Unknown command: %S\n"), ¤t); break; } } } TInt E32Main() { // create console... TFileName exeFile = RProcess().FileName(); TRAPD(err, TheConsole = Console::NewL(exeFile,TSize(KConsFullScreen,KConsFullScreen))); TheConsole->Printf(_L("---DPTESTCONS---\n")); if (err != KErrNone) { return err; } // get command-line... RBuf clDes; if (clDes.Create(User::CommandLineLength()+1) != KErrNone) { return err; } User::CommandLine(clDes); // split up args... RArray<TPtrC> argArray; TLex lex(clDes); while (!lex.Eos()) { err = argArray.Append(lex.NextToken()); if (err != KErrNone) { return err; } } processCommands(argArray); TheConsole->Printf(_L("Press any key to continue.\n")); TheConsole->Getch(); return 0; }