uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfapptestcaseexecutionview.cpp
author hgs
Wed, 03 Nov 2010 19:29:22 +0200
changeset 64 9f8c0686fb49
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  CAlfPerfAppTestCaseExecutionView implementation.
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include <AknUtils.h>
hgs
parents:
diff changeset
    20
#include <aknViewAppUi.h>
hgs
parents:
diff changeset
    21
#include <alfperfapp.rsg>
hgs
parents:
diff changeset
    22
#include <alf/alfenv.h>
hgs
parents:
diff changeset
    23
#include <hal.h>
hgs
parents:
diff changeset
    24
#include "alfperfapptestcaseexecutionview.h"
hgs
parents:
diff changeset
    25
#include "alfperfappconstants.h"
hgs
parents:
diff changeset
    26
#include "alfperfapptestcasefactory.h"
hgs
parents:
diff changeset
    27
#include "alfperfapptestcase.h"
hgs
parents:
diff changeset
    28
#include "alfperfappmodel.h"
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include "../../alfdebugextension/inc/alfdebug.h"
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
/**
hgs
parents:
diff changeset
    33
 * Client-server interface for daemon.
hgs
parents:
diff changeset
    34
 */
hgs
parents:
diff changeset
    35
class RAlfPerfAppDaemon : public RApaAppServiceBase
hgs
parents:
diff changeset
    36
    {
hgs
parents:
diff changeset
    37
public:
hgs
parents:
diff changeset
    38
    /**
hgs
parents:
diff changeset
    39
     * Constructor.
hgs
parents:
diff changeset
    40
     */
hgs
parents:
diff changeset
    41
    RAlfPerfAppDaemon();
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
    /**
hgs
parents:
diff changeset
    44
     * Connects to daemon.
hgs
parents:
diff changeset
    45
     * @return error code, KErrNone upon success.
hgs
parents:
diff changeset
    46
     */
hgs
parents:
diff changeset
    47
    TInt Connect();
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
    /**
hgs
parents:
diff changeset
    50
     * Gets measurements.
hgs
parents:
diff changeset
    51
     * @param aMeasurements this will contain measurements.
hgs
parents:
diff changeset
    52
     * @return error code.
hgs
parents:
diff changeset
    53
     */
hgs
parents:
diff changeset
    54
    TInt GetMeasurements( TAlfDebugServerMeasurements& aMeasurements );
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
    /**
hgs
parents:
diff changeset
    57
     * Enables activity polling. 
hgs
parents:
diff changeset
    58
     * @param aEnable ETrue if enabled, EFalse if disabled.
hgs
parents:
diff changeset
    59
     * @return error code.
hgs
parents:
diff changeset
    60
     */
hgs
parents:
diff changeset
    61
    TInt EnableActivityPoll( TBool aEnable );
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
private:
hgs
parents:
diff changeset
    64
    /**
hgs
parents:
diff changeset
    65
     * From RApaAppServiceBase, returns service UID.
hgs
parents:
diff changeset
    66
     * @return service UID.
hgs
parents:
diff changeset
    67
     */
hgs
parents:
diff changeset
    68
    virtual TUid ServiceUid() const;
hgs
parents:
diff changeset
    69
    };
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
/**
hgs
parents:
diff changeset
    72
 * CAlfPerfAppTestCaseExecutionView::CContainer container class.
hgs
parents:
diff changeset
    73
 */
hgs
parents:
diff changeset
    74
class CAlfPerfAppTestCaseExecutionView::CContainer : public CCoeControl
hgs
parents:
diff changeset
    75
    {
hgs
parents:
diff changeset
    76
    public:
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
        CContainer( CAlfPerfAppTestCaseExecutionView& aView );
hgs
parents:
diff changeset
    79
        void ConstructL();
hgs
parents:
diff changeset
    80
        ~CContainer();
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
        // From base class CCoeControl    
hgs
parents:
diff changeset
    83
        virtual TKeyResponse OfferKeyEventL( 
hgs
parents:
diff changeset
    84
                const TKeyEvent& aKeyEvent, TEventCode aType );
hgs
parents:
diff changeset
    85
        virtual void HandleResourceChange( TInt aType );
hgs
parents:
diff changeset
    86
        virtual void Draw(const TRect& aRect) const;
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
    private:
hgs
parents:
diff changeset
    89
        /**
hgs
parents:
diff changeset
    90
         * Reference to execution view.
hgs
parents:
diff changeset
    91
         * Now owned.
hgs
parents:
diff changeset
    92
         */
hgs
parents:
diff changeset
    93
        CAlfPerfAppTestCaseExecutionView& iView;
hgs
parents:
diff changeset
    94
    };
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
/**
hgs
parents:
diff changeset
    97
 * Active object to execute test cases.
hgs
parents:
diff changeset
    98
 */
hgs
parents:
diff changeset
    99
class CAlfPerfAppTestCaseExecutionView::CActiveExecuter 
hgs
parents:
diff changeset
   100
: public CActive, private MAlfPerfAppTestCaseInterface
hgs
parents:
diff changeset
   101
    {
hgs
parents:
diff changeset
   102
    public:
hgs
parents:
diff changeset
   103
        CActiveExecuter( 
hgs
parents:
diff changeset
   104
                CAlfPerfAppTestCaseExecutionView& aView,
hgs
parents:
diff changeset
   105
                CAlfPerfAppTestCaseFactory& aFactory,
hgs
parents:
diff changeset
   106
                CAlfPerfAppModel& aModel,
hgs
parents:
diff changeset
   107
                RAlfPerfAppDaemon& aDaemon,
hgs
parents:
diff changeset
   108
                TBool aUseContinuousRun = EFalse);
hgs
parents:
diff changeset
   109
        ~CActiveExecuter();
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
        /**
hgs
parents:
diff changeset
   112
         * Starts executing test cases.
hgs
parents:
diff changeset
   113
         */
hgs
parents:
diff changeset
   114
        void StartNextCase();
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
        /**
hgs
parents:
diff changeset
   117
         * Sets visible area.
hgs
parents:
diff changeset
   118
         * @param aRect new visible area.
hgs
parents:
diff changeset
   119
         */ 
hgs
parents:
diff changeset
   120
        void SetVisibleArea( const TRect& aRect );
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
        /**
hgs
parents:
diff changeset
   123
         * Ends the continuous run if it was on, otherwise does nothing.
hgs
parents:
diff changeset
   124
         */
hgs
parents:
diff changeset
   125
        void EndContinuousRun();
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    private:
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
        // From base class CActive
hgs
parents:
diff changeset
   130
        virtual void RunL();
hgs
parents:
diff changeset
   131
        virtual void DoCancel();
hgs
parents:
diff changeset
   132
        virtual TInt RunError( TInt aError );
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
        // From base class MAlfPerfAppTestCaseInterface
hgs
parents:
diff changeset
   135
        virtual void MeasureNow();
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
    private:
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
        /**
hgs
parents:
diff changeset
   140
         * Gets next test case.
hgs
parents:
diff changeset
   141
         * @return ETrue if test case received ok.
hgs
parents:
diff changeset
   142
         */
hgs
parents:
diff changeset
   143
        TBool GetNextTestCaseL();
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
        /**
hgs
parents:
diff changeset
   146
         * Reports error. Calls DoReportErrorL in TRAP harness.
hgs
parents:
diff changeset
   147
         * @param aErrorCode error code.
hgs
parents:
diff changeset
   148
         */
hgs
parents:
diff changeset
   149
        void ReportError( TInt aErrorCode );
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
        /**
hgs
parents:
diff changeset
   152
         * Reports error to model.
hgs
parents:
diff changeset
   153
         * @param aErrorCode error code.
hgs
parents:
diff changeset
   154
         */
hgs
parents:
diff changeset
   155
        void DoReportErrorL( TInt aErrorCode );
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
        /**
hgs
parents:
diff changeset
   158
         * Reports error and continues to next case.
hgs
parents:
diff changeset
   159
         * @param aErrorCode error code.
hgs
parents:
diff changeset
   160
         */
hgs
parents:
diff changeset
   161
        void ReportErrorAndContinue( TInt aErrorCode );
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
        /**
hgs
parents:
diff changeset
   164
         * Resets current state.
hgs
parents:
diff changeset
   165
         */
hgs
parents:
diff changeset
   166
        void Reset( TBool aOkToCallObserver );
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
        /**
hgs
parents:
diff changeset
   169
         * Completes request status with specified error code.
hgs
parents:
diff changeset
   170
         * @param aErrorCode error code.
hgs
parents:
diff changeset
   171
         */
hgs
parents:
diff changeset
   172
        void CompleteNow( TInt aErrorCode );
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
        /**
hgs
parents:
diff changeset
   175
         * Determine next state based on current state.
hgs
parents:
diff changeset
   176
         * It's expected that current state has been completed
hgs
parents:
diff changeset
   177
         * successfully.
hgs
parents:
diff changeset
   178
         */
hgs
parents:
diff changeset
   179
        void DetermineNextState();
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
        /**
hgs
parents:
diff changeset
   182
         * Creates alf environment and initializes
hgs
parents:
diff changeset
   183
         * debug extension plugin.
hgs
parents:
diff changeset
   184
         */
hgs
parents:
diff changeset
   185
        void CreateEnvL();
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
        /**
hgs
parents:
diff changeset
   188
         * Deletes alf environment.
hgs
parents:
diff changeset
   189
         */
hgs
parents:
diff changeset
   190
        void DeleteEnv();
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
        /**
hgs
parents:
diff changeset
   193
         * Performs measurements.
hgs
parents:
diff changeset
   194
         */
hgs
parents:
diff changeset
   195
        void PerformMeasurementsL();
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
    private:
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
        /**
hgs
parents:
diff changeset
   200
         * Reference to execution view.
hgs
parents:
diff changeset
   201
         * Not owned.
hgs
parents:
diff changeset
   202
         */
hgs
parents:
diff changeset
   203
        CAlfPerfAppTestCaseExecutionView& iView;
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
        /**
hgs
parents:
diff changeset
   206
         * Reference to test case factory.
hgs
parents:
diff changeset
   207
         * Not owned.
hgs
parents:
diff changeset
   208
         */
hgs
parents:
diff changeset
   209
        CAlfPerfAppTestCaseFactory& iFactory;
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
        /**
hgs
parents:
diff changeset
   212
         * Reference to model.
hgs
parents:
diff changeset
   213
         * Not owned.
hgs
parents:
diff changeset
   214
         */
hgs
parents:
diff changeset
   215
        CAlfPerfAppModel& iModel;
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
        /**
hgs
parents:
diff changeset
   218
         * Reference to daemon.
hgs
parents:
diff changeset
   219
         * Not owned.
hgs
parents:
diff changeset
   220
         */
hgs
parents:
diff changeset
   221
        RAlfPerfAppDaemon& iDaemon;
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
        /**
hgs
parents:
diff changeset
   224
         * Visible area rect.
hgs
parents:
diff changeset
   225
         */
hgs
parents:
diff changeset
   226
        TRect iVisibleArea;
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
        /**
hgs
parents:
diff changeset
   229
         * Current test case id.
hgs
parents:
diff changeset
   230
         */
hgs
parents:
diff changeset
   231
        TInt iCaseId;
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
        /*
hgs
parents:
diff changeset
   234
         *  Current cases place in the sequence
hgs
parents:
diff changeset
   235
         */
hgs
parents:
diff changeset
   236
        TInt iSequenceIndex;
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
        /**
hgs
parents:
diff changeset
   239
         * Enumerates different possibilities for current state.
hgs
parents:
diff changeset
   240
         */
hgs
parents:
diff changeset
   241
        enum TCurrentState
hgs
parents:
diff changeset
   242
            {
hgs
parents:
diff changeset
   243
            EStateIdle,
hgs
parents:
diff changeset
   244
            EStateCreateTestCase,
hgs
parents:
diff changeset
   245
            EStateSetupTestCase,
hgs
parents:
diff changeset
   246
            EStateExecuteTestCase,
hgs
parents:
diff changeset
   247
            EStateTearDownTestCase
hgs
parents:
diff changeset
   248
            };
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
        /**
hgs
parents:
diff changeset
   251
         * Current state.
hgs
parents:
diff changeset
   252
         */
hgs
parents:
diff changeset
   253
        TCurrentState iCurrentState;
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
        /**
hgs
parents:
diff changeset
   256
         * Alf environment.
hgs
parents:
diff changeset
   257
         * Owned.
hgs
parents:
diff changeset
   258
         */
hgs
parents:
diff changeset
   259
        CAlfEnv* iEnv;
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
        /**
hgs
parents:
diff changeset
   262
         * Current test case under execution.
hgs
parents:
diff changeset
   263
         * Owned.
hgs
parents:
diff changeset
   264
         */      
hgs
parents:
diff changeset
   265
        CAlfPerfAppTestCase* iCurrentTestCase;
hgs
parents:
diff changeset
   266
hgs
parents:
diff changeset
   267
        /**
hgs
parents:
diff changeset
   268
         * NTickCount tick period.
hgs
parents:
diff changeset
   269
         */
hgs
parents:
diff changeset
   270
        TInt iTickPeriod;  
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
        /**
hgs
parents:
diff changeset
   273
         * Tells if the continuous run is enabled.
hgs
parents:
diff changeset
   274
         */
hgs
parents:
diff changeset
   275
        TBool iContinuousRunOngoing;
hgs
parents:
diff changeset
   276
hgs
parents:
diff changeset
   277
        /**
hgs
parents:
diff changeset
   278
         * Tells if this is the last case. Used only to end continuous run correctly.
hgs
parents:
diff changeset
   279
         */
hgs
parents:
diff changeset
   280
        TBool iFinalCase;
hgs
parents:
diff changeset
   281
    };
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
   284
hgs
parents:
diff changeset
   285
CAlfPerfAppTestCaseExecutionView* CAlfPerfAppTestCaseExecutionView::NewLC(
hgs
parents:
diff changeset
   286
        CAlfPerfAppModel& aModel )
hgs
parents:
diff changeset
   287
    {
hgs
parents:
diff changeset
   288
    CAlfPerfAppTestCaseExecutionView* self = 
hgs
parents:
diff changeset
   289
    new (ELeave) CAlfPerfAppTestCaseExecutionView( aModel );
hgs
parents:
diff changeset
   290
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   291
    self->ConstructL();
hgs
parents:
diff changeset
   292
    return self;
hgs
parents:
diff changeset
   293
    }
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
CAlfPerfAppTestCaseExecutionView::~CAlfPerfAppTestCaseExecutionView()
hgs
parents:
diff changeset
   296
    {
hgs
parents:
diff changeset
   297
    delete iExecuter;
hgs
parents:
diff changeset
   298
    delete iFactory;
hgs
parents:
diff changeset
   299
hgs
parents:
diff changeset
   300
    if ( iDaemon )
hgs
parents:
diff changeset
   301
        {
hgs
parents:
diff changeset
   302
        iDaemon->Close();
hgs
parents:
diff changeset
   303
        delete iDaemon;
hgs
parents:
diff changeset
   304
        }
hgs
parents:
diff changeset
   305
    }
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
void CAlfPerfAppTestCaseExecutionView::NotifyLayoutChange( 
hgs
parents:
diff changeset
   308
        const TRect& aRect )
hgs
parents:
diff changeset
   309
    {
hgs
parents:
diff changeset
   310
    if ( iExecuter )
hgs
parents:
diff changeset
   311
        {
hgs
parents:
diff changeset
   312
        iExecuter->SetVisibleArea( aRect );
hgs
parents:
diff changeset
   313
        }
hgs
parents:
diff changeset
   314
    }
hgs
parents:
diff changeset
   315
hgs
parents:
diff changeset
   316
void CAlfPerfAppTestCaseExecutionView::NotifyExecutionCompletedL()
hgs
parents:
diff changeset
   317
    {
hgs
parents:
diff changeset
   318
    AppUi()->ActivateLocalViewL( KAlfPerfAppTestCaseResultsViewId );
hgs
parents:
diff changeset
   319
    }
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
void CAlfPerfAppTestCaseExecutionView::NotifyTestCaseVisible( TBool aVisible )
hgs
parents:
diff changeset
   322
    {
hgs
parents:
diff changeset
   323
    if ( iContainer )
hgs
parents:
diff changeset
   324
        {
hgs
parents:
diff changeset
   325
        if ( iDaemon )
hgs
parents:
diff changeset
   326
            {
hgs
parents:
diff changeset
   327
            // Call User::ResetInactivityTime periodically if test case
hgs
parents:
diff changeset
   328
            // is visible. This ensures that screensaver is not activated
hgs
parents:
diff changeset
   329
            // and thus test case execution is not disturbed.
hgs
parents:
diff changeset
   330
            (void)iDaemon->EnableActivityPoll( aVisible );
hgs
parents:
diff changeset
   331
            }
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
        iContainer->MakeVisible( !aVisible );
hgs
parents:
diff changeset
   334
        }
hgs
parents:
diff changeset
   335
    }
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
CAlfPerfAppTestCaseExecutionView::CAlfPerfAppTestCaseExecutionView(
hgs
parents:
diff changeset
   338
        CAlfPerfAppModel& aModel )
hgs
parents:
diff changeset
   339
: iModel( aModel )
hgs
parents:
diff changeset
   340
            {
hgs
parents:
diff changeset
   341
            }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
#include <apgcli.h>
hgs
parents:
diff changeset
   344
#include <apacmdln.h>
hgs
parents:
diff changeset
   345
#include "alfperfapp.hrh"
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
        static void StartDaemonL()
hgs
parents:
diff changeset
   348
            {
hgs
parents:
diff changeset
   349
            _LIT( KAlfPerfAppDaemonExe, "alfperfappdaemon.exe" );
hgs
parents:
diff changeset
   350
            const TUid KAlfPerfAppDaemonUid = { KAlfPerfAppDaemonUidValue };
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
            RApaLsSession apa;
hgs
parents:
diff changeset
   353
            User::LeaveIfError(apa.Connect());
hgs
parents:
diff changeset
   354
            CleanupClosePushL(apa);
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
            CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
hgs
parents:
diff changeset
   357
            cmdLine->SetExecutableNameL( KAlfPerfAppDaemonExe );
hgs
parents:
diff changeset
   358
            cmdLine->SetServerRequiredL( KAlfPerfAppDaemonUid.iUid );
hgs
parents:
diff changeset
   359
            cmdLine->SetCommandL( EApaCommandBackground );
hgs
parents:
diff changeset
   360
            TThreadId dummy;
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
            TRequestStatus requestStatusForRendezvous;
hgs
parents:
diff changeset
   363
            User::LeaveIfError( apa.StartApp(*cmdLine, dummy, &requestStatusForRendezvous) );
hgs
parents:
diff changeset
   364
            User::WaitForRequest( requestStatusForRendezvous );
hgs
parents:
diff changeset
   365
            User::LeaveIfError( requestStatusForRendezvous.Int() );
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
            CleanupStack::PopAndDestroy(2, &apa);   
hgs
parents:
diff changeset
   368
            }
hgs
parents:
diff changeset
   369
hgs
parents:
diff changeset
   370
        void CAlfPerfAppTestCaseExecutionView::ConstructL()
hgs
parents:
diff changeset
   371
            {
hgs
parents:
diff changeset
   372
            BaseConstructL( R_ALFPERFAPP_TEST_CASE_EXECUTION_VIEW );
hgs
parents:
diff changeset
   373
            iFactory = CAlfPerfAppTestCaseFactory::NewL();
hgs
parents:
diff changeset
   374
hgs
parents:
diff changeset
   375
            iDaemon = new (ELeave) RAlfPerfAppDaemon;
hgs
parents:
diff changeset
   376
            TInt err = iDaemon->Connect();
hgs
parents:
diff changeset
   377
            if ( err == KErrNotFound )
hgs
parents:
diff changeset
   378
                {
hgs
parents:
diff changeset
   379
                TRAP( err, StartDaemonL() );
hgs
parents:
diff changeset
   380
                if ( err == KErrNone ||
hgs
parents:
diff changeset
   381
                        err == KErrAlreadyExists )
hgs
parents:
diff changeset
   382
                    {
hgs
parents:
diff changeset
   383
                    err = iDaemon->Connect();
hgs
parents:
diff changeset
   384
                    }
hgs
parents:
diff changeset
   385
                }
hgs
parents:
diff changeset
   386
            if ( err != KErrNotFound )
hgs
parents:
diff changeset
   387
                {
hgs
parents:
diff changeset
   388
                User::LeaveIfError( err );
hgs
parents:
diff changeset
   389
                }
hgs
parents:
diff changeset
   390
            }
hgs
parents:
diff changeset
   391
hgs
parents:
diff changeset
   392
        TUid CAlfPerfAppTestCaseExecutionView::Id() const
hgs
parents:
diff changeset
   393
        {
hgs
parents:
diff changeset
   394
        return KAlfPerfAppTestCaseExecutionViewId;
hgs
parents:
diff changeset
   395
        }
hgs
parents:
diff changeset
   396
hgs
parents:
diff changeset
   397
        // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   398
        // Handles view activation
hgs
parents:
diff changeset
   399
        // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   400
        //
hgs
parents:
diff changeset
   401
        void CAlfPerfAppTestCaseExecutionView::DoActivateL(
hgs
parents:
diff changeset
   402
                const TVwsViewId& /*aPrevViewId*/,
hgs
parents:
diff changeset
   403
                TUid /*aCustomMessageId*/,
hgs
parents:
diff changeset
   404
                const TDesC8& aCustomMessage )
hgs
parents:
diff changeset
   405
            {
hgs
parents:
diff changeset
   406
            CContainer* container = new (ELeave) CContainer( *this );
hgs
parents:
diff changeset
   407
            CleanupStack::PushL( container );
hgs
parents:
diff changeset
   408
            container->ConstructL();
hgs
parents:
diff changeset
   409
            AppUi()->AddToStackL( *this, container );
hgs
parents:
diff changeset
   410
            CleanupStack::Pop( container );
hgs
parents:
diff changeset
   411
            iContainer = container;
hgs
parents:
diff changeset
   412
hgs
parents:
diff changeset
   413
            if(aCustomMessage == _L8("UseContinuousRun"))
hgs
parents:
diff changeset
   414
                {
hgs
parents:
diff changeset
   415
                // If we should use the continuous run, use it (the ETrue in the end)
hgs
parents:
diff changeset
   416
                iExecuter = new (ELeave) CActiveExecuter( *this, *iFactory, iModel, *iDaemon, ETrue );
hgs
parents:
diff changeset
   417
                Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OK_EMPTY);
hgs
parents:
diff changeset
   418
                Cba()->DrawDeferred();
hgs
parents:
diff changeset
   419
                }
hgs
parents:
diff changeset
   420
            else
hgs
parents:
diff changeset
   421
                {
hgs
parents:
diff changeset
   422
                // If not, then just use the default parameters
hgs
parents:
diff changeset
   423
                iExecuter = new (ELeave) CActiveExecuter( *this, *iFactory, iModel, *iDaemon);
hgs
parents:
diff changeset
   424
                Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY);
hgs
parents:
diff changeset
   425
                Cba()->DrawDeferred();
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
                }
hgs
parents:
diff changeset
   428
            iExecuter->SetVisibleArea( 
hgs
parents:
diff changeset
   429
                    TRect( container->Position(), container->Size() ) );
hgs
parents:
diff changeset
   430
            iExecuter->StartNextCase();
hgs
parents:
diff changeset
   431
            }
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
        // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   434
        // Handles view deactivation
hgs
parents:
diff changeset
   435
        // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   436
        //
hgs
parents:
diff changeset
   437
        void CAlfPerfAppTestCaseExecutionView::DoDeactivate()
hgs
parents:
diff changeset
   438
            {
hgs
parents:
diff changeset
   439
            if ( iContainer )
hgs
parents:
diff changeset
   440
                {
hgs
parents:
diff changeset
   441
                AppUi()->RemoveFromStack( iContainer );
hgs
parents:
diff changeset
   442
                delete iContainer;
hgs
parents:
diff changeset
   443
                iContainer = NULL;
hgs
parents:
diff changeset
   444
                }
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
            delete iExecuter;
hgs
parents:
diff changeset
   447
            iExecuter = NULL;
hgs
parents:
diff changeset
   448
            }
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
        // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   451
        // Handles test case selection view specific commands.
hgs
parents:
diff changeset
   452
        // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   453
        //
hgs
parents:
diff changeset
   454
        void CAlfPerfAppTestCaseExecutionView::HandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
   455
            {
hgs
parents:
diff changeset
   456
            if(aCommand == EAknSoftkeyOk) // For some reason, switch didn't catch this
hgs
parents:
diff changeset
   457
                {
hgs
parents:
diff changeset
   458
                iExecuter->EndContinuousRun();
hgs
parents:
diff changeset
   459
                return;
hgs
parents:
diff changeset
   460
                }
hgs
parents:
diff changeset
   461
            switch ( aCommand )
hgs
parents:
diff changeset
   462
                {
hgs
parents:
diff changeset
   463
                default:
hgs
parents:
diff changeset
   464
                    AppUi()->HandleCommandL( aCommand );
hgs
parents:
diff changeset
   465
                    break;
hgs
parents:
diff changeset
   466
                }
hgs
parents:
diff changeset
   467
            }
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
        //
hgs
parents:
diff changeset
   470
        // Implementation of CAlfPerfAppTestCaseExecutionView::CContainer:
hgs
parents:
diff changeset
   471
        //
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
        CAlfPerfAppTestCaseExecutionView::CContainer::CContainer(
hgs
parents:
diff changeset
   474
                CAlfPerfAppTestCaseExecutionView& aView )
hgs
parents:
diff changeset
   475
        : iView( aView )
hgs
parents:
diff changeset
   476
            {
hgs
parents:
diff changeset
   477
            }
hgs
parents:
diff changeset
   478
hgs
parents:
diff changeset
   479
                void CAlfPerfAppTestCaseExecutionView::CContainer::ConstructL()
hgs
parents:
diff changeset
   480
                    {
hgs
parents:
diff changeset
   481
                    CreateWindowL();
hgs
parents:
diff changeset
   482
hgs
parents:
diff changeset
   483
                    TRect rect;
hgs
parents:
diff changeset
   484
                    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect );
hgs
parents:
diff changeset
   485
                    SetRect( rect );
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
                    ActivateL();
hgs
parents:
diff changeset
   488
                    }
hgs
parents:
diff changeset
   489
hgs
parents:
diff changeset
   490
                CAlfPerfAppTestCaseExecutionView::CContainer::~CContainer()
hgs
parents:
diff changeset
   491
                    {
hgs
parents:
diff changeset
   492
                    }
hgs
parents:
diff changeset
   493
hgs
parents:
diff changeset
   494
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
                TKeyResponse CAlfPerfAppTestCaseExecutionView::CContainer::OfferKeyEventL( 
hgs
parents:
diff changeset
   497
                        const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/ )
hgs
parents:
diff changeset
   498
                    {
hgs
parents:
diff changeset
   499
                    TKeyResponse resp = EKeyWasNotConsumed;
hgs
parents:
diff changeset
   500
                    if ( IsVisible() )
hgs
parents:
diff changeset
   501
                        {
hgs
parents:
diff changeset
   502
                        resp = EKeyWasConsumed;
hgs
parents:
diff changeset
   503
                        }
hgs
parents:
diff changeset
   504
                    return resp;
hgs
parents:
diff changeset
   505
                    }
hgs
parents:
diff changeset
   506
hgs
parents:
diff changeset
   507
                void CAlfPerfAppTestCaseExecutionView::CContainer::HandleResourceChange( TInt aType )
hgs
parents:
diff changeset
   508
                    {
hgs
parents:
diff changeset
   509
                    CCoeControl::HandleResourceChange( aType );
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
                    if ( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
   512
                        {
hgs
parents:
diff changeset
   513
                        TRect rect;
hgs
parents:
diff changeset
   514
                        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect );
hgs
parents:
diff changeset
   515
                        SetRect( rect );
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
                        iView.NotifyLayoutChange( rect );
hgs
parents:
diff changeset
   518
                        }
hgs
parents:
diff changeset
   519
                    }
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
                void CAlfPerfAppTestCaseExecutionView::CContainer::Draw( 
hgs
parents:
diff changeset
   522
                        const TRect& /*aRect*/ ) const
hgs
parents:
diff changeset
   523
                        {
hgs
parents:
diff changeset
   524
                        CWindowGc& gc = SystemGc();
hgs
parents:
diff changeset
   525
                        gc.SetPenStyle( CGraphicsContext::ENullPen );
hgs
parents:
diff changeset
   526
                        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
hgs
parents:
diff changeset
   527
                        gc.SetBrushColor( TRgb( 128, 0, 0 ) ); // red color
hgs
parents:
diff changeset
   528
                        gc.DrawRect( Rect() );
hgs
parents:
diff changeset
   529
                        gc.SetBrushStyle( CGraphicsContext::ENullBrush );
hgs
parents:
diff changeset
   530
                        }
hgs
parents:
diff changeset
   531
hgs
parents:
diff changeset
   532
                //    
hgs
parents:
diff changeset
   533
                // Implementation of CAlfPerfAppTestCaseExecutionView::CActiveExecuter:
hgs
parents:
diff changeset
   534
                //
hgs
parents:
diff changeset
   535
                CAlfPerfAppTestCaseExecutionView::CActiveExecuter::CActiveExecuter( 
hgs
parents:
diff changeset
   536
                        CAlfPerfAppTestCaseExecutionView& aView,
hgs
parents:
diff changeset
   537
                        CAlfPerfAppTestCaseFactory& aFactory,
hgs
parents:
diff changeset
   538
                        CAlfPerfAppModel& aModel,
hgs
parents:
diff changeset
   539
                        RAlfPerfAppDaemon& aDaemon,
hgs
parents:
diff changeset
   540
                        TBool aUseContinuousRun)
hgs
parents:
diff changeset
   541
                : CActive( CActive::EPriorityHigh ),
hgs
parents:
diff changeset
   542
                iView( aView ),
hgs
parents:
diff changeset
   543
                iFactory( aFactory ),
hgs
parents:
diff changeset
   544
                iModel( aModel ),
hgs
parents:
diff changeset
   545
                iDaemon( aDaemon ),
hgs
parents:
diff changeset
   546
                iCurrentState( EStateIdle ),
hgs
parents:
diff changeset
   547
                iContinuousRunOngoing( aUseContinuousRun ),
hgs
parents:
diff changeset
   548
                iFinalCase(EFalse),
hgs
parents:
diff changeset
   549
                iSequenceIndex(0)
hgs
parents:
diff changeset
   550
            {
hgs
parents:
diff changeset
   551
            CActiveScheduler::Add( this );
hgs
parents:
diff changeset
   552
hgs
parents:
diff changeset
   553
            TInt err = HAL::Get( HAL::ENanoTickPeriod, iTickPeriod );
hgs
parents:
diff changeset
   554
            if ( err != KErrNone )
hgs
parents:
diff changeset
   555
                {
hgs
parents:
diff changeset
   556
                iTickPeriod = 1000; // assume 1ms
hgs
parents:
diff changeset
   557
                }
hgs
parents:
diff changeset
   558
            }
hgs
parents:
diff changeset
   559
hgs
parents:
diff changeset
   560
                        CAlfPerfAppTestCaseExecutionView::CActiveExecuter::~CActiveExecuter()
hgs
parents:
diff changeset
   561
                            {
hgs
parents:
diff changeset
   562
                            Reset( EFalse ); // calls Cancel()
hgs
parents:
diff changeset
   563
                            }
hgs
parents:
diff changeset
   564
hgs
parents:
diff changeset
   565
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::StartNextCase()
hgs
parents:
diff changeset
   566
                            {
hgs
parents:
diff changeset
   567
                            Reset( ETrue ); // reset sets current state to idle
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
                            CompleteNow( KErrNone );
hgs
parents:
diff changeset
   570
                            SetActive();
hgs
parents:
diff changeset
   571
                            }
hgs
parents:
diff changeset
   572
hgs
parents:
diff changeset
   573
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::SetVisibleArea(
hgs
parents:
diff changeset
   574
                                const TRect& aRect )
hgs
parents:
diff changeset
   575
                            {
hgs
parents:
diff changeset
   576
                            iVisibleArea = aRect;
hgs
parents:
diff changeset
   577
hgs
parents:
diff changeset
   578
                            if ( iCurrentTestCase )
hgs
parents:
diff changeset
   579
                                {
hgs
parents:
diff changeset
   580
                                iCurrentTestCase->HandleVisibleAreaChange( aRect );
hgs
parents:
diff changeset
   581
                                }
hgs
parents:
diff changeset
   582
                            }
hgs
parents:
diff changeset
   583
hgs
parents:
diff changeset
   584
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::EndContinuousRun()
hgs
parents:
diff changeset
   585
                            {
hgs
parents:
diff changeset
   586
                            if(iContinuousRunOngoing)
hgs
parents:
diff changeset
   587
                                {
hgs
parents:
diff changeset
   588
                                iFinalCase = ETrue;
hgs
parents:
diff changeset
   589
                                }
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
                            iContinuousRunOngoing = EFalse;
hgs
parents:
diff changeset
   592
                            }
hgs
parents:
diff changeset
   593
hgs
parents:
diff changeset
   594
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::RunL()
hgs
parents:
diff changeset
   595
                            {
hgs
parents:
diff changeset
   596
                            const TInt errorCode = iStatus.Int();
hgs
parents:
diff changeset
   597
hgs
parents:
diff changeset
   598
                            if ( errorCode != KErrNone )
hgs
parents:
diff changeset
   599
                                {
hgs
parents:
diff changeset
   600
                                // If current test step failed, report and continue to next
hgs
parents:
diff changeset
   601
                                // test case.
hgs
parents:
diff changeset
   602
                                __ASSERT_ALWAYS( iCurrentState != EStateIdle, User::Invariant() );
hgs
parents:
diff changeset
   603
                                ReportErrorAndContinue( errorCode );
hgs
parents:
diff changeset
   604
                                return;
hgs
parents:
diff changeset
   605
                                }
hgs
parents:
diff changeset
   606
hgs
parents:
diff changeset
   607
                            if ( iCurrentState == EStateIdle )
hgs
parents:
diff changeset
   608
                                {
hgs
parents:
diff changeset
   609
                                // When current state is idle and RunL is reached,
hgs
parents:
diff changeset
   610
                                // it's time to take next case from queue and start
hgs
parents:
diff changeset
   611
                                // execution.
hgs
parents:
diff changeset
   612
                                if ( iFinalCase || !GetNextTestCaseL())
hgs
parents:
diff changeset
   613
                                    {
hgs
parents:
diff changeset
   614
                                    // No more test cases - stop.
hgs
parents:
diff changeset
   615
                                    iView.NotifyExecutionCompletedL();
hgs
parents:
diff changeset
   616
                                    return;
hgs
parents:
diff changeset
   617
                                    }
hgs
parents:
diff changeset
   618
                                }
hgs
parents:
diff changeset
   619
hgs
parents:
diff changeset
   620
                            if(iCurrentTestCase && iContinuousRunOngoing && iCurrentState == EStateExecuteTestCase)
hgs
parents:
diff changeset
   621
                                {
hgs
parents:
diff changeset
   622
                                TInt CaseID = iCurrentTestCase->CaseID();
hgs
parents:
diff changeset
   623
                                iModel.AddToExecuteArrayL(CaseID);
hgs
parents:
diff changeset
   624
                                }
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
                            // Perform measurements before switching to next state
hgs
parents:
diff changeset
   627
                            switch ( iCurrentState )
hgs
parents:
diff changeset
   628
                                {
hgs
parents:
diff changeset
   629
                                case EStateSetupTestCase:
hgs
parents:
diff changeset
   630
                                case EStateExecuteTestCase:
hgs
parents:
diff changeset
   631
                                    // Going to execution or teardown phase.
hgs
parents:
diff changeset
   632
                                    PerformMeasurementsL();
hgs
parents:
diff changeset
   633
                                    break;           
hgs
parents:
diff changeset
   634
                                case EStateCreateTestCase:
hgs
parents:
diff changeset
   635
                                case EStateTearDownTestCase:
hgs
parents:
diff changeset
   636
                                case EStateIdle:
hgs
parents:
diff changeset
   637
                                default:
hgs
parents:
diff changeset
   638
                                    // Either these do not contain any activity or
hgs
parents:
diff changeset
   639
                                    // then it's performed synchronously.
hgs
parents:
diff changeset
   640
                                    break;
hgs
parents:
diff changeset
   641
                                }
hgs
parents:
diff changeset
   642
hgs
parents:
diff changeset
   643
                            DetermineNextState();
hgs
parents:
diff changeset
   644
hgs
parents:
diff changeset
   645
                            // Execute according to current state
hgs
parents:
diff changeset
   646
                            switch ( iCurrentState )
hgs
parents:
diff changeset
   647
                                {   
hgs
parents:
diff changeset
   648
                                case EStateCreateTestCase:
hgs
parents:
diff changeset
   649
                                    __ASSERT_ALWAYS( !iCurrentTestCase, User::Invariant() );
hgs
parents:
diff changeset
   650
                                    iCurrentTestCase = iFactory.CreateL( iCaseId, iSequenceIndex);
hgs
parents:
diff changeset
   651
hgs
parents:
diff changeset
   652
                                    iStatus = KRequestPending;
hgs
parents:
diff changeset
   653
                                    CompleteNow( KErrNone );
hgs
parents:
diff changeset
   654
                                    SetActive();
hgs
parents:
diff changeset
   655
                                    break;
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
                                case EStateSetupTestCase:
hgs
parents:
diff changeset
   658
                                    __ASSERT_ALWAYS( iCurrentTestCase, User::Invariant() );
hgs
parents:
diff changeset
   659
                                    // Make sure test case is visible.
hgs
parents:
diff changeset
   660
                                    // NotifyTestCaseVisible is called with EFalse in Reset().
hgs
parents:
diff changeset
   661
                                    iView.NotifyTestCaseVisible( ETrue );
hgs
parents:
diff changeset
   662
hgs
parents:
diff changeset
   663
                                    PerformMeasurementsL();
hgs
parents:
diff changeset
   664
                                    CreateEnvL();
hgs
parents:
diff changeset
   665
hgs
parents:
diff changeset
   666
                                    iStatus = KRequestPending;
hgs
parents:
diff changeset
   667
                                    iCurrentTestCase->SetInterface( this );
hgs
parents:
diff changeset
   668
                                    iCurrentTestCase->SetupL( *iEnv, iVisibleArea, iStatus );
hgs
parents:
diff changeset
   669
                                    SetActive();
hgs
parents:
diff changeset
   670
                                    break;
hgs
parents:
diff changeset
   671
hgs
parents:
diff changeset
   672
                                case EStateExecuteTestCase:
hgs
parents:
diff changeset
   673
                                    __ASSERT_ALWAYS( iCurrentTestCase, User::Invariant() );
hgs
parents:
diff changeset
   674
                                    PerformMeasurementsL();
hgs
parents:
diff changeset
   675
hgs
parents:
diff changeset
   676
                                    iStatus = KRequestPending;
hgs
parents:
diff changeset
   677
                                    iCurrentTestCase->ExecuteL( iStatus );
hgs
parents:
diff changeset
   678
                                    SetActive();
hgs
parents:
diff changeset
   679
                                    break;
hgs
parents:
diff changeset
   680
hgs
parents:
diff changeset
   681
                                case EStateTearDownTestCase:
hgs
parents:
diff changeset
   682
                                    __ASSERT_ALWAYS( iCurrentTestCase, User::Invariant() );
hgs
parents:
diff changeset
   683
                                    PerformMeasurementsL();
hgs
parents:
diff changeset
   684
hgs
parents:
diff changeset
   685
                                    iCurrentTestCase->TearDown();
hgs
parents:
diff changeset
   686
hgs
parents:
diff changeset
   687
                                    PerformMeasurementsL();
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
                                    // Perform some reset actions. Cancel() is not
hgs
parents:
diff changeset
   690
                                    // needed, because we are in RunL method.
hgs
parents:
diff changeset
   691
                                    iCurrentTestCase->SetInterface( NULL );
hgs
parents:
diff changeset
   692
                                    delete iCurrentTestCase;
hgs
parents:
diff changeset
   693
                                    iCurrentTestCase = NULL;
hgs
parents:
diff changeset
   694
                                    DeleteEnv();
hgs
parents:
diff changeset
   695
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
                                    Reset( ETrue );
hgs
parents:
diff changeset
   698
hgs
parents:
diff changeset
   699
                                    iStatus = KRequestPending;
hgs
parents:
diff changeset
   700
                                    CompleteNow( KErrNone );
hgs
parents:
diff changeset
   701
                                    SetActive();
hgs
parents:
diff changeset
   702
                                    break;
hgs
parents:
diff changeset
   703
hgs
parents:
diff changeset
   704
                                case EStateIdle:
hgs
parents:
diff changeset
   705
                                    break;
hgs
parents:
diff changeset
   706
hgs
parents:
diff changeset
   707
                                default:
hgs
parents:
diff changeset
   708
                                    break;
hgs
parents:
diff changeset
   709
                                }
hgs
parents:
diff changeset
   710
                            }
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::DoCancel()
hgs
parents:
diff changeset
   713
                            {
hgs
parents:
diff changeset
   714
                            delete iCurrentTestCase;
hgs
parents:
diff changeset
   715
                            iCurrentTestCase = NULL;
hgs
parents:
diff changeset
   716
                            }
hgs
parents:
diff changeset
   717
hgs
parents:
diff changeset
   718
                        TInt CAlfPerfAppTestCaseExecutionView::CActiveExecuter::RunError( 
hgs
parents:
diff changeset
   719
                                TInt aError )
hgs
parents:
diff changeset
   720
                            {
hgs
parents:
diff changeset
   721
                            if ( iCurrentState != EStateIdle )
hgs
parents:
diff changeset
   722
                                {
hgs
parents:
diff changeset
   723
                                if(iCurrentTestCase)
hgs
parents:
diff changeset
   724
                                    {
hgs
parents:
diff changeset
   725
                                    iCurrentTestCase->TearDown();
hgs
parents:
diff changeset
   726
                                    iCurrentTestCase->SetInterface( NULL );
hgs
parents:
diff changeset
   727
                                    }
hgs
parents:
diff changeset
   728
                                ReportErrorAndContinue( aError );
hgs
parents:
diff changeset
   729
                                }
hgs
parents:
diff changeset
   730
hgs
parents:
diff changeset
   731
                            return KErrNone;
hgs
parents:
diff changeset
   732
                            }
hgs
parents:
diff changeset
   733
hgs
parents:
diff changeset
   734
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::MeasureNow()
hgs
parents:
diff changeset
   735
                            {
hgs
parents:
diff changeset
   736
                            TRAP_IGNORE( PerformMeasurementsL() );
hgs
parents:
diff changeset
   737
                            }
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
                        TBool CAlfPerfAppTestCaseExecutionView::CActiveExecuter::GetNextTestCaseL()
hgs
parents:
diff changeset
   740
                            {
hgs
parents:
diff changeset
   741
                            TBool casesLeft = iModel.GetFromExecuteArray( iCaseId );
hgs
parents:
diff changeset
   742
hgs
parents:
diff changeset
   743
                            if(casesLeft)
hgs
parents:
diff changeset
   744
                                {
hgs
parents:
diff changeset
   745
                                if(iCaseId < 0)
hgs
parents:
diff changeset
   746
                                    {
hgs
parents:
diff changeset
   747
                                    iSequenceIndex++;
hgs
parents:
diff changeset
   748
                                    }
hgs
parents:
diff changeset
   749
                                else
hgs
parents:
diff changeset
   750
                                    {
hgs
parents:
diff changeset
   751
                                    iSequenceIndex = 1;
hgs
parents:
diff changeset
   752
                                    }
hgs
parents:
diff changeset
   753
                                }
hgs
parents:
diff changeset
   754
                            
hgs
parents:
diff changeset
   755
                            return casesLeft;
hgs
parents:
diff changeset
   756
                            }
hgs
parents:
diff changeset
   757
hgs
parents:
diff changeset
   758
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::ReportError( 
hgs
parents:
diff changeset
   759
                                TInt aErrorCode )
hgs
parents:
diff changeset
   760
                            {
hgs
parents:
diff changeset
   761
                            TRAP_IGNORE( DoReportErrorL( aErrorCode ) );
hgs
parents:
diff changeset
   762
                            }
hgs
parents:
diff changeset
   763
hgs
parents:
diff changeset
   764
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::DoReportErrorL( 
hgs
parents:
diff changeset
   765
                                TInt aErrorCode )
hgs
parents:
diff changeset
   766
                            {
hgs
parents:
diff changeset
   767
                            _LIT( KAlfPerfAppErrorMessage, "0x%x failed with %d (state:%d)" );
hgs
parents:
diff changeset
   768
                            HBufC* messageBuffer = HBufC::NewLC( 128 );
hgs
parents:
diff changeset
   769
hgs
parents:
diff changeset
   770
                            messageBuffer->Des().Format(
hgs
parents:
diff changeset
   771
                                    KAlfPerfAppErrorMessage,
hgs
parents:
diff changeset
   772
                                    iCaseId,
hgs
parents:
diff changeset
   773
                                    aErrorCode,
hgs
parents:
diff changeset
   774
                                    iCurrentState );
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
                            iModel.AddToErrorArrayL( *messageBuffer );    
hgs
parents:
diff changeset
   777
                            CleanupStack::PopAndDestroy( messageBuffer );
hgs
parents:
diff changeset
   778
                            }
hgs
parents:
diff changeset
   779
hgs
parents:
diff changeset
   780
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::ReportErrorAndContinue( 
hgs
parents:
diff changeset
   781
                                TInt aErrorCode )
hgs
parents:
diff changeset
   782
                            {
hgs
parents:
diff changeset
   783
                            ReportError( aErrorCode );
hgs
parents:
diff changeset
   784
                            StartNextCase();
hgs
parents:
diff changeset
   785
                            }
hgs
parents:
diff changeset
   786
hgs
parents:
diff changeset
   787
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::Reset(
hgs
parents:
diff changeset
   788
                                TBool aOkToCallObserver )
hgs
parents:
diff changeset
   789
                            {
hgs
parents:
diff changeset
   790
                            Cancel();
hgs
parents:
diff changeset
   791
hgs
parents:
diff changeset
   792
                            delete iCurrentTestCase;
hgs
parents:
diff changeset
   793
                            iCurrentTestCase = NULL;
hgs
parents:
diff changeset
   794
hgs
parents:
diff changeset
   795
                            DeleteEnv();
hgs
parents:
diff changeset
   796
hgs
parents:
diff changeset
   797
                            iCaseId = 0;
hgs
parents:
diff changeset
   798
                            iCurrentState = EStateIdle;
hgs
parents:
diff changeset
   799
hgs
parents:
diff changeset
   800
                            if ( aOkToCallObserver )
hgs
parents:
diff changeset
   801
                                {
hgs
parents:
diff changeset
   802
                                iView.NotifyTestCaseVisible( EFalse );
hgs
parents:
diff changeset
   803
                                }
hgs
parents:
diff changeset
   804
                            }
hgs
parents:
diff changeset
   805
hgs
parents:
diff changeset
   806
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::CompleteNow( 
hgs
parents:
diff changeset
   807
                                TInt aErrorCode )
hgs
parents:
diff changeset
   808
                            {
hgs
parents:
diff changeset
   809
                            TRequestStatus* status = &iStatus;
hgs
parents:
diff changeset
   810
                            User::RequestComplete( status, aErrorCode );   
hgs
parents:
diff changeset
   811
                            }
hgs
parents:
diff changeset
   812
hgs
parents:
diff changeset
   813
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::DetermineNextState()
hgs
parents:
diff changeset
   814
                            {
hgs
parents:
diff changeset
   815
                            // Determine next state after step has been completed.
hgs
parents:
diff changeset
   816
                            switch ( iCurrentState )
hgs
parents:
diff changeset
   817
                                {
hgs
parents:
diff changeset
   818
                                case EStateIdle:
hgs
parents:
diff changeset
   819
                                    iCurrentState = EStateCreateTestCase;
hgs
parents:
diff changeset
   820
                                    break;
hgs
parents:
diff changeset
   821
hgs
parents:
diff changeset
   822
                                case EStateCreateTestCase:
hgs
parents:
diff changeset
   823
                                    iCurrentState = EStateSetupTestCase;
hgs
parents:
diff changeset
   824
                                    break;
hgs
parents:
diff changeset
   825
hgs
parents:
diff changeset
   826
                                case EStateSetupTestCase:
hgs
parents:
diff changeset
   827
                                    iCurrentState = EStateExecuteTestCase;
hgs
parents:
diff changeset
   828
                                    break;
hgs
parents:
diff changeset
   829
hgs
parents:
diff changeset
   830
                                case EStateExecuteTestCase:
hgs
parents:
diff changeset
   831
                                    iCurrentState = EStateTearDownTestCase;
hgs
parents:
diff changeset
   832
                                    break;
hgs
parents:
diff changeset
   833
hgs
parents:
diff changeset
   834
                                case EStateTearDownTestCase:
hgs
parents:
diff changeset
   835
                                    iCurrentState = EStateIdle;
hgs
parents:
diff changeset
   836
                                    break;
hgs
parents:
diff changeset
   837
hgs
parents:
diff changeset
   838
                                default:
hgs
parents:
diff changeset
   839
                                    break;
hgs
parents:
diff changeset
   840
                                }
hgs
parents:
diff changeset
   841
                            }
hgs
parents:
diff changeset
   842
hgs
parents:
diff changeset
   843
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::CreateEnvL()
hgs
parents:
diff changeset
   844
                            {
hgs
parents:
diff changeset
   845
                            __ASSERT_ALWAYS( !iEnv, User::Invariant() );
hgs
parents:
diff changeset
   846
                            iEnv = CAlfEnv::NewL();
hgs
parents:
diff changeset
   847
                            iEnv->SetMaxFrameRate(100);
hgs
parents:
diff changeset
   848
                            }
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::DeleteEnv()
hgs
parents:
diff changeset
   851
                            {
hgs
parents:
diff changeset
   852
                            delete iEnv;
hgs
parents:
diff changeset
   853
                            iEnv = NULL;
hgs
parents:
diff changeset
   854
                            }
hgs
parents:
diff changeset
   855
hgs
parents:
diff changeset
   856
                        void CAlfPerfAppTestCaseExecutionView::CActiveExecuter::PerformMeasurementsL()
hgs
parents:
diff changeset
   857
                            {
hgs
parents:
diff changeset
   858
                            CAlfPerfAppModel::TTestCaseResultItem item;
hgs
parents:
diff changeset
   859
hgs
parents:
diff changeset
   860
                            // Test case identifiers
hgs
parents:
diff changeset
   861
                            item.iCaseId = iCaseId;
hgs
parents:
diff changeset
   862
hgs
parents:
diff changeset
   863
                            // Phase (0 = setup, 1 = execution, 2 = teardown)
hgs
parents:
diff changeset
   864
                            switch ( iCurrentState )
hgs
parents:
diff changeset
   865
                                {
hgs
parents:
diff changeset
   866
                                case EStateIdle:
hgs
parents:
diff changeset
   867
                                case EStateCreateTestCase:
hgs
parents:
diff changeset
   868
                                case EStateSetupTestCase:
hgs
parents:
diff changeset
   869
                                    item.iPhase = 0;
hgs
parents:
diff changeset
   870
                                    break;
hgs
parents:
diff changeset
   871
hgs
parents:
diff changeset
   872
                                case EStateExecuteTestCase:
hgs
parents:
diff changeset
   873
                                    item.iPhase = 1;
hgs
parents:
diff changeset
   874
                                    break;
hgs
parents:
diff changeset
   875
hgs
parents:
diff changeset
   876
                                case EStateTearDownTestCase:
hgs
parents:
diff changeset
   877
                                    item.iPhase = 2;
hgs
parents:
diff changeset
   878
                                    break;
hgs
parents:
diff changeset
   879
hgs
parents:
diff changeset
   880
                                default:
hgs
parents:
diff changeset
   881
                                    item.iPhase = -1;
hgs
parents:
diff changeset
   882
                                    break;
hgs
parents:
diff changeset
   883
                                }
hgs
parents:
diff changeset
   884
hgs
parents:
diff changeset
   885
                            TInt dummy; // not used.
hgs
parents:
diff changeset
   886
hgs
parents:
diff changeset
   887
                            // Amount of cells allocated in Application heap.
hgs
parents:
diff changeset
   888
                            // Total size taken by allocated cells in Application heap.
hgs
parents:
diff changeset
   889
                            // Amount of free space in Application heap.
hgs
parents:
diff changeset
   890
                            item.iAppCells = User::AllocSize( item.iAppMemory );
hgs
parents:
diff changeset
   891
                            item.iAppFree = User::Available( dummy );
hgs
parents:
diff changeset
   892
hgs
parents:
diff changeset
   893
                            // Perform server side measurements    
hgs
parents:
diff changeset
   894
                            TAlfDebugServerMeasurements serverMeasurements;
hgs
parents:
diff changeset
   895
                            TBool measureOk = 
hgs
parents:
diff changeset
   896
                            ( iDaemon.GetMeasurements( serverMeasurements ) == KErrNone );
hgs
parents:
diff changeset
   897
hgs
parents:
diff changeset
   898
                            if ( !measureOk )
hgs
parents:
diff changeset
   899
                                {
hgs
parents:
diff changeset
   900
                                serverMeasurements.iTimeStamp = User::NTickCount();
hgs
parents:
diff changeset
   901
                                serverMeasurements.iServerCells = 0;
hgs
parents:
diff changeset
   902
                                serverMeasurements.iServerMemory = 0;
hgs
parents:
diff changeset
   903
                                serverMeasurements.iServerFree = 0;
hgs
parents:
diff changeset
   904
                                serverMeasurements.iFrameCount = 0;
hgs
parents:
diff changeset
   905
                                }
hgs
parents:
diff changeset
   906
hgs
parents:
diff changeset
   907
                            // Convert timestamps to ms
hgs
parents:
diff changeset
   908
                            if ( iTickPeriod != 1000 )
hgs
parents:
diff changeset
   909
                                {
hgs
parents:
diff changeset
   910
                                TUint64 stamp = serverMeasurements.iTimeStamp;
hgs
parents:
diff changeset
   911
                                stamp *= iTickPeriod;
hgs
parents:
diff changeset
   912
                                stamp /= 1000;
hgs
parents:
diff changeset
   913
                                stamp &= 0xFFFFFFFF; // modulo 2**32
hgs
parents:
diff changeset
   914
                                serverMeasurements.iTimeStamp = I64LOW( stamp );
hgs
parents:
diff changeset
   915
                                }
hgs
parents:
diff changeset
   916
hgs
parents:
diff changeset
   917
hgs
parents:
diff changeset
   918
                            // Amount of cells allocated in Server heap.
hgs
parents:
diff changeset
   919
                            // Total size taken by allocated cells in Server heap.
hgs
parents:
diff changeset
   920
                            // Amount of free space in Server heap.
hgs
parents:
diff changeset
   921
                            // Time stamp (preferably from server side)
hgs
parents:
diff changeset
   922
                            // Frame count
hgs
parents:
diff changeset
   923
                            item.iTimeStamp = serverMeasurements.iTimeStamp;
hgs
parents:
diff changeset
   924
                            item.iServerCells = serverMeasurements.iServerCells;
hgs
parents:
diff changeset
   925
                            item.iServerMemory = serverMeasurements.iServerMemory;
hgs
parents:
diff changeset
   926
                            item.iServerFree = serverMeasurements.iServerFree;
hgs
parents:
diff changeset
   927
                            item.iFrameCount = serverMeasurements.iFrameCount;
hgs
parents:
diff changeset
   928
hgs
parents:
diff changeset
   929
                            // Amount of free memory in the system.
hgs
parents:
diff changeset
   930
                            // Memory consumption of the system.
hgs
parents:
diff changeset
   931
                            TInt systemFreeRam = 0;
hgs
parents:
diff changeset
   932
                            HAL::Get( HALData::EMemoryRAMFree, systemFreeRam );
hgs
parents:
diff changeset
   933
                            TInt systemTotalRam = 0;
hgs
parents:
diff changeset
   934
                            HAL::Get( HALData::EMemoryRAM, systemTotalRam );
hgs
parents:
diff changeset
   935
                            item.iSystemMemory = systemTotalRam - systemFreeRam;
hgs
parents:
diff changeset
   936
                            item.iSystemFree = systemFreeRam;
hgs
parents:
diff changeset
   937
hgs
parents:
diff changeset
   938
                            TTestCaseSpecificResultText specificResult = 0;
hgs
parents:
diff changeset
   939
                            specificResult = iCurrentTestCase->getCaseSpecificResultL(); 
hgs
parents:
diff changeset
   940
                            if(specificResult)
hgs
parents:
diff changeset
   941
                                {
hgs
parents:
diff changeset
   942
                                item.specificResult8.Copy(specificResult->Des());
hgs
parents:
diff changeset
   943
                                delete specificResult;
hgs
parents:
diff changeset
   944
                                }
hgs
parents:
diff changeset
   945
hgs
parents:
diff changeset
   946
                            // Append to model
hgs
parents:
diff changeset
   947
                            iModel.AddToResultFilesL( item );        
hgs
parents:
diff changeset
   948
                            }
hgs
parents:
diff changeset
   949
hgs
parents:
diff changeset
   950
                        //
hgs
parents:
diff changeset
   951
                        // Implementation of RAlfPerfAppDaemon
hgs
parents:
diff changeset
   952
                        //
hgs
parents:
diff changeset
   953
hgs
parents:
diff changeset
   954
                        RAlfPerfAppDaemon::RAlfPerfAppDaemon()
hgs
parents:
diff changeset
   955
                            {
hgs
parents:
diff changeset
   956
                            }
hgs
parents:
diff changeset
   957
hgs
parents:
diff changeset
   958
                        TInt RAlfPerfAppDaemon::Connect()
hgs
parents:
diff changeset
   959
                            {
hgs
parents:
diff changeset
   960
                            TInt result = KErrNone;
hgs
parents:
diff changeset
   961
                            if ( !Handle() )
hgs
parents:
diff changeset
   962
                                {
hgs
parents:
diff changeset
   963
                                _LIT(KServerNameFormat, "%08x_%08x_AppServer");        
hgs
parents:
diff changeset
   964
                                TFullName serverName;
hgs
parents:
diff changeset
   965
                                serverName.Format(
hgs
parents:
diff changeset
   966
                                        KServerNameFormat, 
hgs
parents:
diff changeset
   967
                                        KAlfPerfAppDaemonUidValue, 
hgs
parents:
diff changeset
   968
                                        KAlfPerfAppDaemonUidValue );
hgs
parents:
diff changeset
   969
                                TRAP( result, ConnectExistingByNameL( serverName ) );
hgs
parents:
diff changeset
   970
                                }
hgs
parents:
diff changeset
   971
                            return result;
hgs
parents:
diff changeset
   972
                            }
hgs
parents:
diff changeset
   973
hgs
parents:
diff changeset
   974
                        TInt RAlfPerfAppDaemon::GetMeasurements( 
hgs
parents:
diff changeset
   975
                                TAlfDebugServerMeasurements& aMeasurements )
hgs
parents:
diff changeset
   976
                            {
hgs
parents:
diff changeset
   977
                            if ( !Handle() )
hgs
parents:
diff changeset
   978
                                {
hgs
parents:
diff changeset
   979
                                return KErrNotSupported;
hgs
parents:
diff changeset
   980
                                }
hgs
parents:
diff changeset
   981
hgs
parents:
diff changeset
   982
                            TPckg<TAlfDebugServerMeasurements> pckg( aMeasurements );
hgs
parents:
diff changeset
   983
                            return SendReceive( EAlfPerfAppIpcGetMeasurements, TIpcArgs( &pckg ) );
hgs
parents:
diff changeset
   984
                            }
hgs
parents:
diff changeset
   985
hgs
parents:
diff changeset
   986
                        TInt RAlfPerfAppDaemon::EnableActivityPoll( TBool aEnable )
hgs
parents:
diff changeset
   987
                            {
hgs
parents:
diff changeset
   988
                            if ( !Handle() )
hgs
parents:
diff changeset
   989
                                {
hgs
parents:
diff changeset
   990
                                return KErrNotSupported;
hgs
parents:
diff changeset
   991
                                }
hgs
parents:
diff changeset
   992
hgs
parents:
diff changeset
   993
                            return SendReceive( EAlfPerfAppIpcEnableActivityPoll, TIpcArgs( aEnable ? 1 : 0 ) );
hgs
parents:
diff changeset
   994
                            }
hgs
parents:
diff changeset
   995
hgs
parents:
diff changeset
   996
                        TUid RAlfPerfAppDaemon::ServiceUid() const
hgs
parents:
diff changeset
   997
                        {
hgs
parents:
diff changeset
   998
                        return TUid::Uid( KAlfPerfAppDaemonUidValue );
hgs
parents:
diff changeset
   999
                        }
hgs
parents:
diff changeset
  1000