diff -r 48060abbbeaf -r b3cee849fa46 loadgen/ui/hb/src/engine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loadgen/ui/hb/src/engine.cpp Tue Aug 31 15:15:20 2010 +0300 @@ -0,0 +1,1240 @@ +/* +* Copyright (c) 2010 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 FILES +#include "engine.h" +#include "enginewrapper.h" +#include "settingsview.h" +#include "loadgen_utils.h" +#include "loadgen_cpuload.h" +#include "loadgen_memoryeat.h" +#include "loadgen_phonecall.h" +//#include "loadgen_netconn.h" +#include "loadgen_keypress.h" +#include "loadgen_pointerevent.h" +#include "loadgen_messages.h" +#include "loadgen_applications.h" +#include "loadgen_photocapture.h" +#include "loadgen_bluetooth.h" +#include "loadgen_traces.h" +#include "loadgen_loadattributes.h" +#include "loadgen.hrh" + +//#include "loadgen_editors.h" +//#include "loadgen_app.h" +//#include "loadgen_settingsviewdlg.h" +//#include "loadgen_maincontainer.h" + +//#include + +#include +#include +#include +//#include +#include +#include +#include +#include + +#include +//#include +#include + +const TInt KZeroIndex = 0; + +// ===================================== MEMBER FUNCTIONS ===================================== + +CEngine* CEngine::NewL(EngineWrapper *aEngineWrapper) + { + CEngine* self = new(ELeave) CEngine; + CleanupStack::PushL(self); + self->ConstructL(aEngineWrapper); + CleanupStack::Pop(); + return self; + } + +// -------------------------------------------------------------------------------------------- + +CEngine::CEngine() : CActive(EPriorityStandard) + { + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ConstructL(EngineWrapper *aEngineWrapper) + { + iEngineWrapper = aEngineWrapper; + + iReferenceNumber = 0; + iCurrentItemIndex = 0; + iEditExistingLoad = EFalse; + + iEnv = CEikonEnv::Static(); + User::LeaveIfError(iLs.Connect()); + + iLoadItemList = new(ELeave) CLoadItemList(64); + + User::LeaveIfError(iTimer.CreateLocal()); + CActiveScheduler::Add(this); + + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ActivateEngineL() + { + // load settings + //TRAP_IGNORE(LoadSettingsL()); + + // RAM + TMemoryInfoV1Buf ramMemory; + UserHal::MemoryInfo(ramMemory); + + TInt freeRam = ramMemory().iFreeRamInBytes; + + + // set defaults to attributes + iCpuLoadAttributes.iId = 0; + iCpuLoadAttributes.iPriority = EThreadPriorityTypeNormal; + iCpuLoadAttributes.iMode = ECpuLoadModeYielding; + iCpuLoadAttributes.iType = ECpuLoadTypePeriodic; + iCpuLoadAttributes.iLength = 4000; + iCpuLoadAttributes.iIdle = 2000; + iCpuLoadAttributes.iRandomVariance = 0; + iCpuLoadAttributes.iCpu = KCPUSelection_FreeScheduling; // set CPU as "undefined" (can be >= 0 only in SMP environments) + iCpuLoadAttributes.iCpuCount = UserSvr::HalFunction(EHalGroupKernel, KHalFunction_EKernelHalNumLogicalCpus, 0, 0); + if( iCpuLoadAttributes.iCpuCount < 1 || iCpuLoadAttributes.iCpuCount > KMaxCPUs ) + { + // HAL may not support this function, so let's use CPU count 1: + iCpuLoadAttributes.iCpuCount = 1; + } + iMemoryEatAttributes.iId = 0; + iMemoryEatAttributes.iPriority = EThreadPriorityTypeNormal; + iMemoryEatAttributes.iSource = 0; + iMemoryEatAttributes.iType = EMemoryEatTypeMemoryToBeLeft; + iMemoryEatAttributes.iBuffer = 16*1024; + iMemoryEatAttributes.iIdle = 0; + iMemoryEatAttributes.iAmount = freeRam;//0; + iMemoryEatAttributes.iRandomMin = 1000000; + iMemoryEatAttributes.iRandomMax = 1500000; + iMemoryEatAttributes.iAmountDes.Copy(KNullDesC); + iMemoryEatAttributes.iRandomMinDes.Copy(KNullDesC); + iMemoryEatAttributes.iRandomMaxDes.Copy(KNullDesC); + iMemoryEatAttributes.iRandomVariance = 0; + + iPhoneCallAttributes.iId = 0; + iPhoneCallAttributes.iPriority = EThreadPriorityTypeNormal; + iPhoneCallAttributes.iDestination.Copy(_L("+358")); + iPhoneCallAttributes.iLength = 60000; + iPhoneCallAttributes.iIdle = 10000; + iPhoneCallAttributes.iRandomVariance = 0; + + iNetConnAttributes.iId = 0; + iNetConnAttributes.iPriority = EThreadPriorityTypeNormal; + iNetConnAttributes.iDestination.Copy(_L("http://www.nokia.com")); + iNetConnAttributes.iIdle = 10000; + iNetConnAttributes.iRandomVariance = 0; + + iKeyPressAttributes.iId = 0; + iKeyPressAttributes.iPriority = EThreadPriorityTypeNormal; + iKeyPressAttributes.iHeartBeat = 100; + iKeyPressAttributes.iRandomVariance = 0; + + iPointerEventAttributes.iId = 0; + iPointerEventAttributes.iPriority = EThreadPriorityTypeNormal; + iPointerEventAttributes.iHeartBeat = 1000; + iPointerEventAttributes.iRandomVariance = 0; + + iMessageAttributes.iId = 0; + iMessageAttributes.iPriority = EThreadPriorityTypeNormal; + iMessageAttributes.iMessageType = EMessageTypeSMS; + iMessageAttributes.iDestination.Copy(_L("+358")); + iMessageAttributes.iAmount = 5; + iMessageAttributes.iLength = 160; + iMessageAttributes.iIdle = 15000; + iMessageAttributes.iRandomVariance = 0; + + iApplicationsAttributes.iId = 0; + iApplicationsAttributes.iLaunchingInterval = 2000; + iApplicationsAttributes.iPriority = EThreadPriorityTypeNormal; + iApplicationsAttributes.iKeyPressType = EApplicationsKeyPressTypeNone; + iApplicationsAttributes.iMaxOpen = 20; + iApplicationsAttributes.iHeartBeat = 50; + iApplicationsAttributes.iRandomVariance = 0; + + iPhotoCaptureAttributes.iId = 0; + iPhotoCaptureAttributes.iPriority = EThreadPriorityTypeNormal; + iPhotoCaptureAttributes.iIdle = 10000; + iPhotoCaptureAttributes.iRandomVariance = 0; + iPhotoCaptureAttributes.iCameraCount = CCamera::CamerasAvailable(); + if(iPhotoCaptureAttributes.iCameraCount > 0) + { + iPhotoCaptureAttributes.iCamera = 0; // Main camera + } + else + { + iPhotoCaptureAttributes.iCamera = -1; + } + + iBluetoothAttributes.iId = 0; + iBluetoothAttributes.iPriority = EThreadPriorityTypeNormal; + iBluetoothAttributes.iIdle = 10000; + iBluetoothAttributes.iRandomVariance = 0; + iBluetoothAttributes.iBluetoothSupported = CFeatureDiscovery::IsFeatureSupportedL(KFeatureIdBt); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::DeActivateEngineL() + { + Cancel(); + + // for a faster exit, send the application to background + TApaTask selfTask(iEnv->WsSession()); + selfTask.SetWgId(iEnv->RootWin().Identifier()); + selfTask.SendToBackground(); + } + +// -------------------------------------------------------------------------------------------- + +CEngine::~CEngine() + { + if (iLoadItemList) + { + DeleteAllLoadItems(); + delete iLoadItemList; + } + if ( iApplicationsAttributes.iAppsArray ) + { + delete iApplicationsAttributes.iAppsArray; + } + iTimer.Close(); + iLs.Close(); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::DoCancel() + { + iTimer.Cancel(); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::RunL() + { + // continue + //iTimer.After(iStatus, 400000); + //SetActive(); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::StartNewLoadL(TInt aCommand) + { + // show new load query + //CLoadGenLoadTypeEditorBase* dlg = NULL; + + if(aCommand == ELoadGenCmdNewLoadPhotoCaptures && + iPhotoCaptureAttributes.iCameraCount == 0) + { + _LIT(message, "Cameras not available"); + iEngineWrapper->ShowNote(message); + return; + } + if(aCommand == ELoadGenCmdNewLoadBluetooth && + iBluetoothAttributes.iBluetoothSupported == EFalse) + { + _LIT(message, "Bluetooth device not available"); + iEngineWrapper->ShowNote(message); + return; + } + /* + switch ( aCommand ) + { + case ELoadGenCmdNewLoadCPULoad: + { + //dlg = CLoadGenCPULoadEditor::NewL(iCpuLoadAttributes); + break; + } + case ELoadGenCmdNewLoadEatMemory: + { + //dlg = CLoadGenMemoryEatEditor::NewL(iMemoryEatAttributes); + break; + } + case ELoadGenCmdNewLoadPhoneCall: + { + //dlg = CLoadGenPhoneCallEditor::NewL(iPhoneCallAttributes); + break; + } + case ELoadGenCmdNewLoadNetConn: + { + //dlg = CLoadGenNetConnEditor::NewL(iNetConnAttributes); + break; + } + case ELoadGenCmdNewLoadKeyPress: + { + //dlg = CLoadGenKeyPressEditor::NewL(iKeyPressAttributes); + break; + } + case ELoadGenCmdNewLoadMessages: + { + //dlg = CLoadGenMessagesEditor::NewL( iMessageAttributes ); + break; + } + case ELoadGenCmdNewLoadApplications: + { + //dlg = CLoadGenApplicationsEditor::NewL( iApplicationsAttributes ); + break; + } + case ELoadGenCmdNewLoadPhotoCaptures: + { + if( iPhotoCaptureAttributes.iCameraCount > 0 ) + { + //dlg = CLoadGenPhotoCaptureEditor::NewL( iPhotoCaptureAttributes ); + } + else + { + _LIT(message, "Cameras not available"); + iEngineWrapper->ShowNote(message); + //CAknErrorNote* errorNote = new(ELeave) CAknErrorNote; + //errorNote->ExecuteLD(message); + return; + } + break; + } + case ELoadGenCmdNewLoadBluetooth: + { + if( iBluetoothAttributes.iBluetoothSupported ) + { + //dlg = CLoadGenBluetoothEditor::NewL(iBluetoothAttributes); + } + else + { + _LIT(message, "Bluetooth device not available"); + iEngineWrapper->ShowNote(message); + //CAknErrorNote* errorNote = new(ELeave) CAknErrorNote; + //errorNote->ExecuteLD(message); + return; + } + break; + } + case ELoadGenCmdNewLoadPointerEvent: + { + //dlg = CLoadGenPointerEventEditor::NewL(iPointerEventAttributes); + break; + } + + default: + { + User::Panic(_L("Wrong new load"), 111); + break; + } + } + */ + iEditExistingLoad = EFalse; + iEngineWrapper->OpenLoadSettings(aCommand, EFalse); // = dlg->RunQueryLD(); + + // set back title + + //if (iMainContainer) + // iMainContainer->SetDefaultTitlePaneTextL(); + + // start creating new load if dialog accepted + //if (dlgResult) + // { + // DoStartNewLoadL(aCommand); + // } + // DoStartNewLoadL() called from engine wrapper slot function newLoadAdded() after + // load settings closed by user select: ok. + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::EditLoadL(TInt aIndex) + { + CLoadBase* aItem = iLoadItemList->At(aIndex); + iCurrentItemIndex = aIndex; + iEditExistingLoad = ETrue; + // suspend current + if (aItem->State() == CLoadBase::ELoadStateRunning) + { + iLoadStatusBeforeEdit = CLoadBase::ELoadStateRunning; + aItem->Suspend(); + } + + // show new load query + + /* CLoadGenLoadTypeEditorBase* dlg = NULL; + + + switch ( aItem->Type() ) + { + case ELoadGenCmdNewLoadCPULoad: + { + //dlg = CLoadGenCPULoadEditor::NewL(static_cast(aItem)->Attributes(), ETrue); + break; + } + case ELoadGenCmdNewLoadEatMemory: + { + //dlg = CLoadGenMemoryEatEditor::NewL(static_cast(aItem)->Attributes(), ETrue); + break; + } + case ELoadGenCmdNewLoadPhoneCall: + { + //dlg = CLoadGenPhoneCallEditor::NewL(static_cast(aItem)->Attributes(), ETrue); + break; + } + case ELoadGenCmdNewLoadNetConn: + { + //dlg = CLoadGenNetConnEditor::NewL(static_cast(aItem)->Attributes(), ETrue); + break; + } + case ELoadGenCmdNewLoadKeyPress: + { + //dlg = CLoadGenKeyPressEditor::NewL(static_cast(aItem)->Attributes(), ETrue); + break; + } + case ELoadGenCmdNewLoadMessages: + { + //dlg = CLoadGenMessagesEditor::NewL(static_cast(aItem)->Attributes(), ETrue); + break; + } + case ELoadGenCmdNewLoadApplications: + { + //dlg = CLoadGenApplicationsEditor::NewL( static_cast(aItem)->Attributes(), ETrue ); + break; + } + case ELoadGenCmdNewLoadPhotoCaptures: + { + //dlg = CLoadGenPhotoCaptureEditor::NewL( static_cast(aItem)->Attributes(), ETrue ); + break; + } + case ELoadGenCmdNewLoadBluetooth: + { + //dlg = CLoadGenBluetoothEditor::NewL( static_cast(aItem)->Attributes(), ETrue ); + break; + } + case ELoadGenCmdNewLoadPointerEvent: + { + //dlg = CLoadGenPointerEventEditor::NewL(static_cast(aItem)->Attributes(), ETrue); + break; + } + default: + { + User::Panic(_L("Wrong edit load"), 114); + break; + } + } + */ + iEngineWrapper->OpenLoadSettings(aItem->Type(), iEditExistingLoad); + // ExistingLoadEditedL method called from engine wrapper when load settings view close signal received. + + //TBool dlgResult = ETrue; //dlg->RunQueryLD(); + + // set back title + // TODO: check this. + //if (iMainContainer) + // iMainContainer->SetDefaultTitlePaneTextL(); + + // change priority of the load item + //aItem->SetPriority(); + + // resume execution the item + //aItem->Resume(); + + //if (dlgResult) + // RefreshViewL(EFalse); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ExistingLoadEditedL() + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + // change priority of the load item + aItem->SetPriority(); + if (iLoadStatusBeforeEdit == CLoadBase::ELoadStateRunning) + { + // resume execution the item + aItem->Resume(); + RefreshViewL(EFalse); + } + // cancel: + + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ExistingLoadEditCancelled() + { + if (iLoadStatusBeforeEdit == CLoadBase::ELoadStateRunning) + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + // resume execution due to suspend action before edit started: + aItem->Resume(); + } + RefreshViewL(EFalse); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::DoStartNewLoadL(TInt aCommand) + { + CLoadBase* item = NULL; + + switch ( aCommand ) + { + case ELoadGenCmdNewLoadCPULoad: + { + if( iCpuLoadAttributes.iCpu == KCPUSelection_AllCPUs ) + { + // Call this function recursively for all CPUs: + for( TUint i = 0; i < iCpuLoadAttributes.iCpuCount; ++i ) + { + iCpuLoadAttributes.iCpu = i; + DoStartNewLoadL(aCommand); + } + // And finally set user selection back to "All CPUs" + iCpuLoadAttributes.iCpu = KCPUSelection_AllCPUs; + return; + } + else + { + item = CCPULoad::NewL(iCpuLoadAttributes, iReferenceNumber); + } + break; + } + case ELoadGenCmdNewLoadEatMemory: + { + item = CMemoryEat::NewL(iMemoryEatAttributes, iReferenceNumber); + break; + } + case ELoadGenCmdNewLoadPhoneCall: + { + item = CPhoneCall::NewL(iPhoneCallAttributes, iReferenceNumber); + break; + } +/* case ELoadGenCmdNewLoadNetConn: + { + item = CNetConn::NewL(iNetConnAttributes, iReferenceNumber); + break; + } +*/ + case ELoadGenCmdNewLoadKeyPress: + { + item = CKeyPress::NewL(iKeyPressAttributes, iReferenceNumber); + break; + } + case ELoadGenCmdNewLoadMessages: + { + item = CMessages::NewL( iMessageAttributes, iReferenceNumber ); + break; + } + case ELoadGenCmdNewLoadApplications: + { + iApplicationsAttributes.iAppsArray = ListOfAllAppsL(); + item = CAppLauncher::NewL( iApplicationsAttributes, iReferenceNumber ); + break; + } + case ELoadGenCmdNewLoadPhotoCaptures: + { + item = CPhotoCapture::NewL( iPhotoCaptureAttributes, iReferenceNumber); + break; + } + case ELoadGenCmdNewLoadBluetooth: + { + item = CBluetooth::NewL( iBluetoothAttributes, iReferenceNumber); + break; + } + case ELoadGenCmdNewLoadPointerEvent: + { + item = CPointerEvent::NewL(iPointerEventAttributes, iReferenceNumber); + break; + } + + default: + { + User::Panic(_L("Wrong new load"), 112); + break; + } + } + + iReferenceNumber++; + + // add item to the array + AppendToLoadItemListL(item); + + // update the listbox + RefreshViewL(EFalse); + + // set item index to the end + // Check this feature to be done in Orbit UI. + // iMainContainer->ListBox()->SetCurrentItemIndexAndDraw( iMainContainer->ListBox()->Model()->NumberOfItems()-1 ); + + // start the load + item->Resume(); + + // refresh again + RefreshViewL(EFalse); + } + +// -------------------------------------------------------------------------------------------- + + +void CEngine::StopAllLoadItemsL() + { + DeleteAllLoadItems(); + + RefreshViewL(); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::SuspendAllLoadItemsL() + { + for (TInt i=0; iAt(i) ) + { + iLoadItemList->At(i)->Suspend(); + } + } + + RefreshViewL(); + } +// -------------------------------------------------------------------------------------------- + +void CEngine::ResumeAllLoadItemsL() + { + for (TInt i=0; iAt(i) ) + { + iLoadItemList->At(i)->Resume(); + } + } + + RefreshViewL(); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::RefreshViewL(TBool aClearSelection) + { + // clear selections if any + iEngineWrapper->ClearSelection(); + if (aClearSelection) + { + iEngineWrapper->SetCurrentItemIndex(KZeroIndex); + } + iEngineWrapper->ReFreshView(GenerateListBoxItemTextArrayL()); + } + +// -------------------------------------------------------------------------------------------- + +CDesCArray* CEngine::GenerateListBoxItemTextArrayL() + { + CDesCArray* textArray = new(ELeave) CDesCArrayFlat(64); + CleanupStack::PushL(textArray); + + _LIT(KEntryTemplateRedIcon, "1\t%S\t\t"); + _LIT(KEntryTemplateGreenIcon, "2\t%S\t\t"); + TInt cnt = LoadItemCount(); + for (TInt i=0; i< cnt; i++) + { + // add description from each entry + TBuf<256> textEntry; + TBuf<256> description = iLoadItemList->At(i)->Description(); + + if (iLoadItemList->At(i)->State() == CLoadBase::ELoadStateRunning) + textEntry.Format(KEntryTemplateGreenIcon, &description); + else + textEntry.Format(KEntryTemplateRedIcon, &description); + + textArray->AppendL(textEntry); + } + + CleanupStack::Pop(); //textArray + return textArray; + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::AppendToLoadItemListL(CLoadBase* aItem) + { + if (iLoadItemList) + iLoadItemList->AppendL( aItem ); + else + User::Leave(KErrNotReady); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::DeleteFromLoadItemListL(TInt aIndex) + { + if (iLoadItemList) + { + if (iLoadItemList->Count() > aIndex && aIndex >= 0) + { + // first call delete on the item + if (iLoadItemList->At(aIndex)) + { + delete iLoadItemList->At(aIndex); + iLoadItemList->At(aIndex) = NULL; + } + + // and them remove the array entry + iLoadItemList->Delete(aIndex); + iLoadItemList->Compress(); + } + else + User::Leave(KErrNotFound); + } + else + User::Leave(KErrNotReady); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::SuspendOrResumeFromLoadItemListL(TInt aIndex) + { + if (iLoadItemList) + { + if (iLoadItemList->Count() > aIndex && aIndex >= 0) + { + if (iLoadItemList->At(aIndex)) + { + if (iLoadItemList->At(aIndex)->State() == CLoadBase::ELoadStateRunning) + { + iLoadItemList->At(aIndex)->Suspend(); + } + else if (iLoadItemList->At(aIndex)->State() == CLoadBase::ELoadStateSuspended) + { + iLoadItemList->At(aIndex)->Resume(); + } + } + } + else + User::Leave(KErrNotFound); + } + else + User::Leave(KErrNotReady); + } + +// -------------------------------------------------------------------------------------------- + +TInt CEngine::LoadItemCount() const + { + TInt count(0); + + if (iLoadItemList) + count = iLoadItemList->Count(); + + return count; + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::DeleteAllLoadItems() + { + // call delete for each entry and free memory allocated for the array + for (TInt i=0; iAt(i) ) + { + delete iLoadItemList->At(i); + iLoadItemList->At(i) = NULL; + } + } + + iLoadItemList->Reset(); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::StopSelectedOrHighlightedItemsL(const CArrayFix* aSelectionIndexes) + { + TInt err(KErrNone); + + // by default use selected items + if (aSelectionIndexes && aSelectionIndexes->Count() > 0) + { + TInt deleteIndexCounter(0); + TInt ref(0); + TKeyArrayFix key(0, ECmpTUint16); + TInt index(0); + + TInt loadCount = LoadItemCount(); + + for (TInt i=0; iFind(ref, key, index) == 0) + { + TRAP(err, DeleteFromLoadItemListL(i-deleteIndexCounter)); + deleteIndexCounter++; // amount of indexes decreases after each delete + } + } + + RefreshViewL(); + User::LeaveIfError(err); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::SuspendOrResumeSelectedOrHighlightedItemsL() + { + const CArrayFix* selectionIndexes = iEngineWrapper->QueryListSelectedIndexesOrCurrentItemL(); //iMainContainer->ListBoxSelectionIndexes(); + + // by default use selected items + if (selectionIndexes && selectionIndexes->Count() > 0) + { + TInt ref(0); + TKeyArrayFix key(0, ECmpTUint16); + TInt index(0); + + for (TInt i=0; iFind(ref, key, index) == 0) + { + SuspendOrResumeFromLoadItemListL(i); + } + } + + RefreshViewL(EFalse); + } + } +// -------------------------------------------------------------------------------------------- + +void CEngine::LoadSettingsL() + { + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::SaveSettingsL() + { + } + +// -------------------------------------------------------------------------------------------- + +TInt CEngine::LaunchSettingsDialogL() + { + return 0; + } + +// -------------------------------------------------------------------------------------------- +CDesCArray* CEngine::ListOfAllAppsL() + { + const TInt KMaxAppsArraySize=250; + RApaLsSession ls; + CleanupClosePushL(ls); + + User::LeaveIfError( ls.Connect() ); + CDesCArray* allAppsArray = new(ELeave) CDesCArrayFlat( KMaxAppsArraySize ); + CleanupStack::PushL( allAppsArray ); + // reset the apps list + allAppsArray->Reset(); + + // search all apps + TApaAppInfo appInfo; + User::LeaveIfError(ls.GetAllApps()); + + + while ( ls.GetNextApp( appInfo ) == KErrNone ) + { + allAppsArray->AppendL( appInfo.iFullName ); + } + CleanupStack::Pop( allAppsArray ); + CleanupStack::PopAndDestroy( &ls ); + + + // remove loadgen.* from the list + for ( TInt i = 0; i < allAppsArray->MdcaCount(); i++ ) + { + if ( allAppsArray->MdcaPoint(i).FindF( _L("\\loadgen.") ) != KErrNotFound ) + { + allAppsArray->Delete(i); + allAppsArray->Compress(); + break; + } + } + + // sort the elements + allAppsArray->Sort(); + + return allAppsArray; // ownership transferred + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::LaunchPerfMonL() + { + // launch Performance Monitor + const TUid KUidPerfMon = { 0x20011385 }; + + RWsSession ws; + User::LeaveIfError( ws.Connect() ); + CleanupClosePushL(ws); + + RApaLsSession ls; + User::LeaveIfError( ls.Connect() ); + CleanupClosePushL(ls); + + + // try to find the task of PerfMon + TApaTaskList tasklist(ws); + TApaTask task = tasklist.FindApp(KUidPerfMon); + + if (task.Exists()) + { + // task exists, bring it to foreground + task.BringToForeground(); + } + else + { + TApaAppInfo appInfo; + User::LeaveIfError(ls.GetAppInfo(appInfo, KUidPerfMon)); + + CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); + cmdLine->SetExecutableNameL(appInfo.iFullName); + cmdLine->SetCommandL(EApaCommandBackground); + + // start the app + User::LeaveIfError(ls.StartApp(*cmdLine)); + + CleanupStack::PopAndDestroy(); //cmdLine + } + + CleanupStack::PopAndDestroy(2); //ws,ls + } + +// -------------------------------------------------------------------------------------------- + +TCPULoadAttributes CEngine::GetCPULoadAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iCpuLoadAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeCPULoadAttributes(TCPULoadAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iCpuLoadAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TMemoryEatAttributes CEngine::GetMemoryEatAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iMemoryEatAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeMemoryEatAttributes(TMemoryEatAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iMemoryEatAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TPhoneCallAttributes CEngine::GetPhoneCallAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iPhoneCallAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangePhoneCallAttributes(TPhoneCallAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iPhoneCallAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TNetConnAttributes CEngine::GetNetConnAttributes() + { +/* + if (iEditExistingLoad == EFalse) + { + return iNetConnAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } +*/ + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeNetConnAttributes(TNetConnAttributes aAttributes) + { +/* + if (iEditExistingLoad == EFalse) + { + iNetConnAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } +*/ + } + +// -------------------------------------------------------------------------------------------- + +TKeyPressAttributes CEngine::GetKeyPressAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iKeyPressAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeKeyPressAttributes(TKeyPressAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iKeyPressAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TMessageAttributes CEngine::GetMessageAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iMessageAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeMessageAttributes(TMessageAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iMessageAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TApplicationsAttributes CEngine::GetApplicationsAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iApplicationsAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeApplicationsAttributes(TApplicationsAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iApplicationsAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TPhotoCaptureAttributes CEngine::GetPhotoCaptureAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iPhotoCaptureAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangePhotoCaptureAttributes(TPhotoCaptureAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iPhotoCaptureAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TBluetoothAttributes CEngine::GetBluetoothAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iBluetoothAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeBluetoothAttributes(TBluetoothAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iBluetoothAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TPointerEventAttributes CEngine::GetPointerEventAttributes() + { + if (iEditExistingLoad == EFalse) + { + return iPointerEventAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + return (static_cast(aItem)->Attributes()); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangePointerEventAttributes(TPointerEventAttributes aAttributes) + { + if (iEditExistingLoad == EFalse) + { + iPointerEventAttributes = aAttributes; + } + else + { + CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex); + static_cast(aItem)->SetAttributes(aAttributes); + } + } + +// -------------------------------------------------------------------------------------------- + +// End of File