loadgen/engine/src/loadgen_applications.cpp
branchRCL_3
changeset 22 fad26422216a
parent 21 b3cee849fa46
child 23 f8280f3bfeb7
--- a/loadgen/engine/src/loadgen_applications.cpp	Tue Aug 31 15:15:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,686 +0,0 @@
-/*
-* 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 "loadgen_applications.h"
-#include "loadgen_utils.h"
-#include "loadgen.hrh"
-#include <loadgen.rsg>
-
-#include <e32math.h>
-#include "loadgen_traces.h"
-
-_LIT(KThreadName, "Applications %d");
-
-const TInt KDefaultStartDelay = 500;
-const TInt KThreadNameLength = 64;
-const TInt KDescriptorBufSize = 256;
-const TInt KPriorityBufSize = 16;
-const TInt KScanCodeStart = 32;
-    
-// ===================================== MEMBER FUNCTIONS =====================================
-
-CAppLauncher* CAppLauncher::NewL( TApplicationsAttributes& aAttributes, TInt aReferenceNumber )
-    {
-    CAppLauncher* self = new(ELeave) CAppLauncher( aAttributes, aReferenceNumber );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-CAppLauncher::~CAppLauncher()
-    {
-    Close();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-CAppLauncher::CAppLauncher(  
-           TApplicationsAttributes& aAttributes, TInt aReferenceNumber ) : 
-           iAttributes( aAttributes )
-    {
-    iAttributes.iId = aReferenceNumber;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CAppLauncher::ConstructL()
-    {
-    CLoadBase::ConstructL();
-    
-    iType = ELoadGenCmdNewLoadApplications;
-    
-    TBuf<KThreadNameLength> threadName;
-    threadName.Format( KThreadName, iAttributes.iId );
-    
-    // create a thread
-    User::LeaveIfError( iThread.Create( threadName, ThreadFunction, 
-                                        KDefaultStackSize*2, KMinHeapSize, 
-                                        KKilo * KMinHeapSize, (TAny*) &iAttributes ) );
-    
-    // set priority of the thread
-    SetPriority();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CAppLauncher::ThreadFunction( TAny* aThreadArg )
-    {
-    CTrapCleanup* pC = CTrapCleanup::New();
-    CActiveScheduler* pS = new CActiveScheduler;
-    CActiveScheduler::Install( pS );
-
-    // start generating load, pass pointer to arguments
-    GenerateLoad( *( ( TApplicationsAttributes* ) aThreadArg ) );
-
-    delete pS;
-    delete pC;
-    
-    return KErrNone;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CAppLauncher::GenerateLoad( TApplicationsAttributes& aAttributes )
-    {
-    CAppLauncherManager* appLauncherManager = NULL;
-    TRAPD( err, appLauncherManager = CAppLauncherManager::NewL( aAttributes ) );
-    if ( err == KErrNone ) 
-        {
-        CActiveScheduler::Start();
-        }
-    delete appLauncherManager;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CAppLauncher::Resume()
-    {
-    CLoadBase::Resume();
-    
-    iThread.Resume();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CAppLauncher::Suspend()
-    {
-    CLoadBase::Suspend();
-    
-    iThread.Suspend();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CAppLauncher::SetPriority()
-    {
-    CLoadBase::SetPriority();
-    
-    iThread.SetPriority( CLoadGenUtils::SettingItemToThreadPriority( iAttributes.iPriority ) );
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CAppLauncher::Close()
-    {
-    CLoadBase::Close();
-    
-    if ( iThread.ExitReason() == 0 ) // check if the thread is still alive
-        {
-        // signal the thread that it needs to close
-        iThread.RequestComplete( iAttributes.iDeathStatus, KErrCancel );
-
-        // wait the thread to die
-        TRequestStatus waiter;
-        iThread.Logon( waiter );
-        User::WaitForRequest( waiter );
-        iThread.Close();
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-TPtrC CAppLauncher::Description()
-    {
-    TBuf<KDescriptorBufSize> buf;
-    TBuf<KPriorityBufSize> prioBuf;
-    CLoadGenUtils::SettingItemToThreadDescription( iAttributes.iPriority, prioBuf );
-    
-    _LIT(KAppLauncherEntry, "[%d] Appls prio=%S max apps=%d heartbeat=%dms random=%d%%");
-    buf.Format( KAppLauncherEntry, iAttributes.iId, &prioBuf, iAttributes.iMaxOpen, 
-                iAttributes.iHeartBeat, iAttributes.iRandomVariance );
-   
-    return TPtrC( buf );
-    }               
-
-// --------------------------------------------------------------------------------------------
-// --------------------------------------------------------------------------------------------
-
-CAppLauncherManager* CAppLauncherManager::NewL( TApplicationsAttributes& aAttributes )
-    {
-    CAppLauncherManager* self = new(ELeave) CAppLauncherManager(aAttributes);
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-CAppLauncherManager::CAppLauncherManager( TApplicationsAttributes& aAttributes ) :
-            CActive( EPriorityStandard ), iAttributes( aAttributes )
-    {
-    iAppEventType = EApplicationsLaunchApplication;
-    }
-
-// --------------------------------------------------------------------------------------------
-    
-CAppLauncherManager::~CAppLauncherManager()
-    {
-    if ( iPeriodicTimer )
-        {
-        iPeriodicTimer->Cancel();
-        delete iPeriodicTimer;
-        }
-    delete iLauncherEngine;
-    Cancel();
-    
-    iWsSession.Close();
-    }
-
-// --------------------------------------------------------------------------------------------
- 
-void CAppLauncherManager::ConstructL()
-    {
-    CActiveScheduler::Add( this );
-    
-    // create instance to application launcher
-    iLauncherEngine = CLauncherEngine::NewL( iAttributes );
-    
-    // set the status as pending
-    iStatus = KRequestPending;
-    SetActive();
-    
-    // set the death status pointer point to the request status of this ao
-    iAttributes.iDeathStatus = &iStatus;
-    
-    // init
-    User::LeaveIfError( iWsSession.Connect() );
-    
-    // start timer    
-    iPeriodicTimer = CPeriodic::NewL( CActive::EPriorityStandard );
-    iPeriodicTimer->Start( KDefaultStartDelay, 
-                           CLoadGenUtils::MilliSecondsToMicroSeconds( 
-                               iAttributes.iLaunchingInterval, iAttributes.iRandomVariance ),
-                           TCallBack( PeriodicTimerCallBack, this ) );
-    }
-    
-// --------------------------------------------------------------------------------------------
- 
-void CAppLauncherManager::RunL()
-    {
-    // request status has completed by the main thread meaning that we need to stop now
-    CActiveScheduler::Stop();
-    }
-
-// --------------------------------------------------------------------------------------------
- 
-void CAppLauncherManager::DoCancel()
-    {
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CAppLauncherManager::PeriodicTimerCallBack( TAny* aAny )
-    {
-    CAppLauncherManager* self = static_cast<CAppLauncherManager*>( aAny );
-
-    TRAPD( err, self->SimulateEventL() );
-    if ( KErrNone != err )
-        {
-        return err;
-        }
-    return KErrNone;
-    }
-    
-// --------------------------------------------------------------------------------------------
- 
-void CAppLauncherManager::SimulateEventL()
-    {    
-    // Randomly start new applications.
-    // After maximum applications launched stop one application.
-    // And after that start launching again.
-    if ( iAppEventType == EApplicationsLaunchApplication && 
-         iAttributes.iMaxOpen == iLauncherEngine->AppLaunchCounter() )
-        {
-        iAppEventType = EApplicationsCloseApplication;
-        }
-    if ( iAppEventType == EApplicationsCloseApplication && 
-         iAttributes.iMaxOpen -1 == iLauncherEngine->AppLaunchCounter() )
-        {
-        iAppEventType = EApplicationsLaunchApplication;
-        }
-    
-    // Launch or stop
-    if ( iAppEventType == EApplicationsLaunchApplication )
-        {
-        iLauncherEngine->StartAppLaunchingL();
-        }  
-    else
-        {
-        iLauncherEngine->StopApplication( ETrue );
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-#include <avkon.hrh>
-#include <e32std.h>
-#include <w32std.h>
-#include <apgtask.h>
-#include <bautils.h>
-#include <s32file.h>
-#include <apgwgnam.h> 
-
-// ---------------------------------------------------------------------------
-
-CLauncherEngine* CLauncherEngine::NewL( TApplicationsAttributes& aAttributes )
-    {
-    CLauncherEngine* self = new(ELeave) CLauncherEngine( aAttributes );
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-
-CLauncherEngine::CLauncherEngine( TApplicationsAttributes& aAttributes ) : 
-                        iAttributes( aAttributes )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-
-void CLauncherEngine::ConstructL()
-    {
-    LOGSTRING("LoadGen: CLauncherEngine::ConstructL");
-    iAppKeyPressManager = CAppKeyPressManager::NewL( iAttributes );
-    iAppLaunchCounter = 0;
-    User::LeaveIfError( iTimer.CreateLocal() );
-
-    User::LeaveIfError( iLs.Connect() );
-    User::LeaveIfError( iWs.Connect() );
-
-    }
-
-// ---------------------------------------------------------------------------
-
-CLauncherEngine::~CLauncherEngine()
-    {
-    LOGSTRING("LoadGen: CLauncherEngine::~CLauncherEngine");
-    StopApplication( EFalse );
-    iWs.Close();
-    iLs.Close();
-    iTimer.Close();
-    delete iAppKeyPressManager;
-    }
-
-// ---------------------------------------------------------------------------
-
-void CLauncherEngine::StartAppLaunchingL()
-    {
-    LOGSTRING("LoadGen: CLauncherEngine::StartAppLaunchingL");
-    if ( iAppLaunchCounter == iAttributes.iMaxOpen )
-        {
-        return;
-        }
-
-    // start launching
-    TBool launched( EFalse );
-    while ( !launched )
-        {
-        launched = LaunchApplicationL();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-
-TBool CLauncherEngine::LaunchApplicationL()
-    {
-    LOGSTRING("LoadGen: CLauncherEngine::LaunchApplicationL");
-    TBool result( EFalse );
-    // get the uid of the current app
-    iCurrentAppUid = KNullUid;
-    TApaAppInfo appInfo;
-    
-    // get application list size
-    TInt appsListSize = iAttributes.iAppsArray->MdcaCount();
-    // get random application number in the list
-    TInt appTolaunch = CLoadGenUtils::RandomNumber( 0,  appsListSize - 1 );
-    // get file name of the application to be launched
-    TFileName launchFileName = iAttributes.iAppsArray->MdcaPoint( appTolaunch );
-    iLs.GetAllApps();
-    while ( iLs.GetNextApp( appInfo ) == KErrNone )
-        {
-        // get file name in  current appInfo
-        TFileName appFileName = appInfo.iFullName;
-        // get AppUid
-        if ( appFileName.CompareF( launchFileName ) == 0 )
-            {
-            iCurrentAppUid = appInfo.iUid;
-            break;
-            }
-        }
-
-    if ( iCurrentAppUid != KNullUid )
-        {        
-        // parse the filename
-        TParse nameParser;
-        nameParser.SetNoWild( iAttributes.iAppsArray->MdcaPoint( appTolaunch ), NULL, NULL );
-        iCurrentAppNameAndExt.Copy( nameParser.Drive() );
-        iCurrentAppNameAndExt.Append( nameParser.NameAndExt() );
-           
-        // do not try to launch these apps
-        if ( iCurrentAppUid != KNullUid &&
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch).FindF(_L("\\loadgen.")) == KErrNotFound &&
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\Phone." ) ) == KErrNotFound &&
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch).FindF( _L("\\Startup.") ) == KErrNotFound &&  
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\SplashScreen.") ) == KErrNotFound &&  
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\cameraapp.") ) == KErrNotFound &&
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\eshell.") ) == KErrNotFound &&
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\ConnTest.") ) == KErrNotFound &&
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\Launcher.") ) == KErrNotFound &&
-              
-#ifdef __WINS__
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\DebugAgent.") ) == KErrNotFound &&
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\redirect.") ) == KErrNotFound &&              
-#endif              
-              iAttributes.iAppsArray->MdcaPoint( appTolaunch ).FindF( _L("\\VoiceRecorder.") ) == KErrNotFound )            
-            {
-        
-            // check if the app is already running
-            TApaTaskList taskList( iWs );
-            TApaTask thisTask = taskList.FindApp( iCurrentAppUid );
-            if ( !thisTask.Exists( ))
-                {
-                // check the program's capabilities
-                TApaAppCapabilityBuf buf;
-                iLs.GetAppCapability( buf, iCurrentAppUid );
-                TApaAppCapability cap = buf();
-        
-                // if it's embeddable only, don't launch if setting is enabled
-                // if it's hidden, don't launch if setting is enabled
-                if ( cap.iEmbeddability != TApaAppCapability::EEmbeddableOnly &&
-                     !cap.iAppIsHidden )
-                    {
-                    LOGSTRING2("launchFileName = %S", &launchFileName);
-                    
-                    DoLaunchApplicationL();
-                    result = ETrue;
-                    }            
-                } 
-            }
-        }
-    return result;
-    }
-
-
-// ---------------------------------------------------------------------------
-
-void CLauncherEngine::DoLaunchApplicationL()
-    {
-    LOGSTRING("LoadGen: CLauncherEngine::DoLaunchApplicationL");
-
-    // Find the task with uid3
-    TApaTaskList tasklist( iWs );
-    TApaTask task=tasklist.FindApp( iCurrentAppUid );
-
-    if ( !task.Exists() )
-        // Task doesn't exist, launch a new instance of an application
-        {
-        TApaAppInfo appInfo;
-        User::LeaveIfError( iLs.GetAppInfo( appInfo, iCurrentAppUid ) );
-        TApaAppCapabilityBuf capBuf;
-        User::LeaveIfError( iLs.GetAppCapability( capBuf, iCurrentAppUid ) );
-        TApaAppCapability& caps = capBuf();
-
-        CApaCommandLine* cmdLine=CApaCommandLine::NewLC();
-        cmdLine->SetExecutableNameL( appInfo.iFullName );
-
-        // app is launched in background
-        cmdLine->SetCommandL( EApaCommandBackground );       
-
-        // start the app
-        User::LeaveIfError( iLs.StartApp( *cmdLine ) );
-        iAppKeyPressManager->AddNewApplicationUidToKeyEventsL( iCurrentAppUid );
-        iAppLaunchCounter++;
-
-        CleanupStack::PopAndDestroy( cmdLine );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-
-void CLauncherEngine::StopApplication( TBool aRandomApplication )
-    {
-    LOGSTRING("LoadGen: CLauncherEngine::StopApplication");
-
-    // remove key pressing instance
-    TUid appToDelete = iAppKeyPressManager->KillApplication( aRandomApplication );
-    if ( appToDelete != KNullUid )
-        {
-        TApaTaskList taskList( iWs );
-        TApaTask thisTask = taskList.FindApp( appToDelete );
-    
-        if ( thisTask.Exists() )
-            {
-            // since the application is still open, let's close it
-            thisTask.EndTask();
-            }
-        iAppLaunchCounter--;
-        }
-    
-    // return if only one application requested
-    if ( aRandomApplication )
-        {
-        return;
-        }
-    
-    // remove all launched applications because load is requested to be closed
-    while ( appToDelete != KNullUid )
-        {
-        appToDelete = iAppKeyPressManager->KillApplication( aRandomApplication );
-            
-        if ( appToDelete != KNullUid )
-            {
-            TApaTaskList taskList( iWs );
-            TApaTask thisTask = taskList.FindApp( appToDelete );
-        
-            if ( thisTask.Exists() )
-                {
-                // since the application is still open, let's close it
-                thisTask.EndTask();
-                }
-            iAppLaunchCounter--;
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-// --------------------------------------------------------------------------------------------
-
-CAppKeyPressManager* CAppKeyPressManager::NewL( TApplicationsAttributes& aAttributes )
-    {
-    LOGSTRING("LoadGen: CAppKeyPressManager::NewL");
-    CAppKeyPressManager* self = new(ELeave) CAppKeyPressManager( aAttributes );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-CAppKeyPressManager::CAppKeyPressManager( TApplicationsAttributes& aAttributes ) :
-                                            iAttributes( aAttributes )
-    {
-    LOGSTRING("LoadGen: CAppKeyPressManager::CAppKeyPressManager");
-    }
-
-// --------------------------------------------------------------------------------------------
-    
-CAppKeyPressManager::~CAppKeyPressManager()
-    {
-    LOGSTRING("LoadGen: CAppKeyPressManager::~CAppKeyPressManager");
-    if ( iKeyPresses.Count() != 0 )
-        {
-        iKeyPresses.ResetAndDestroy();
-        }
-
-    iKeyPresses.Close();
-    }
-
-// --------------------------------------------------------------------------------------------
- 
-void CAppKeyPressManager::ConstructL()
-    {
-    LOGSTRING("LoadGen: CAppKeyPressManager::ConstructL");
-    }
-    
-   
-// --------------------------------------------------------------------------------------------
-void CAppKeyPressManager::AddNewApplicationUidToKeyEventsL( TUid aUid )
-    {
-    LOGSTRING("LoadGen: CAppKeyPressManager::AddNewApplicationUidToKeyEventsL");
-    CApplicationKeyPresses* applicationKP = CApplicationKeyPresses::NewL( aUid,
-                                                                    iAttributes );
-    CleanupStack::PushL( applicationKP );
-    User::LeaveIfError( iKeyPresses.Append( applicationKP ) );
-    CleanupStack::Pop( applicationKP );
-    }
-
-// --------------------------------------------------------------------------------------------
-TUid CAppKeyPressManager::KillApplication( TBool aRandomApplication )
-    {
-    TUid applicationUid = KNullUid;
-    TInt appToDelete = iKeyPresses.Count() - 1 ;
-    // remove the newest application if not random 
-    if ( aRandomApplication )
-        {
-         appToDelete = CLoadGenUtils::RandomNumber( 0, iKeyPresses.Count() - 1 );
-        }
-    if ( iKeyPresses.Count() )
-        {
-        // get random application and delete it
-        
-        applicationUid = iKeyPresses[appToDelete]->ApplicationUid();
-        delete iKeyPresses[appToDelete];
-        iKeyPresses.Remove( appToDelete );
-        }
-    return applicationUid;
-    }
-// --------------------------------------------------------------------------------------------
-// --------------------------------------------------------------------------------------------
-
-CApplicationKeyPresses* CApplicationKeyPresses::NewL( TUid aUid, TApplicationsAttributes&  
-        aAttributes )
-    {
-    LOGSTRING("LoadGen: CApplicationKeyPresses::NewL");
-    CApplicationKeyPresses* self = new(ELeave) CApplicationKeyPresses( aUid, aAttributes );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-CApplicationKeyPresses::CApplicationKeyPresses( TUid aUid, 
-                                                        TApplicationsAttributes& aAttributes ) :
-                                                iUid( aUid ), iAttributes( aAttributes ) 
-    {
-    LOGSTRING("LoadGen: CApplicationKeyPresses::CApplicationKeyPresses");
-    }
-
-// --------------------------------------------------------------------------------------------
-    
-CApplicationKeyPresses::~CApplicationKeyPresses()
-    {
-    LOGSTRING("LoadGen: CApplicationKeyPresses::~CApplicationKeyPresses");
-    if ( iPeriodicTimer )
-        {
-        iPeriodicTimer->Cancel();
-        delete iPeriodicTimer;
-        }
-    
-    iWsSession.Close();
-    }
-
-// --------------------------------------------------------------------------------------------
- 
-void CApplicationKeyPresses::ConstructL()
-    {
-    LOGSTRING("LoadGen: CApplicationKeyPresses::ConstructL");
-    // init
-    User::LeaveIfError( iWsSession.Connect() );
-    
-    // start timer    
-    iPeriodicTimer = CPeriodic::NewL( CActive::EPriorityStandard );
-    if ( iAttributes.iKeyPressType )
-        {
-        iPeriodicTimer->Start( KDefaultStartDelay,
-                               CLoadGenUtils::MilliSecondsToMicroSeconds( 
-                                       iAttributes.iHeartBeat,
-                                       iAttributes.iRandomVariance ),
-                                TCallBack( PeriodicTimerCallBack, this ) );
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-TInt CApplicationKeyPresses::PeriodicTimerCallBack( TAny* aAny )
-    {
-    CApplicationKeyPresses* self = static_cast<CApplicationKeyPresses*>( aAny );
-    self->SimulateKeyEvent();
-    return KErrNone;
-    }
-    
-// --------------------------------------------------------------------------------------------
- 
-void CApplicationKeyPresses::SimulateKeyEvent()
-    {
-    LOGSTRING("LoadGen: CApplicationKeyPresses::SimulateKeyEvent");
-    // for arrow key events
-    
-    TInt wgId(0);
-    CApaWindowGroupName::FindByAppUid( iUid, iWsSession, wgId );
-    // generate a random arrow key event
-    TWsEvent event;
-    event.SetType( EEventKey );
-    event.Key()->iCode = CLoadGenUtils::RandomNumber( EKeyLeftArrow, EKeyDownArrow );
-    event.Key()->iScanCode = event.Key()->iCode - KScanCodeStart;
-    event.Key()->iModifiers = 0;
-    event.Key()->iRepeats = 0;
-    iWsSession.SendEventToWindowGroup( wgId, event );
-    }
-
-// End of File