--- a/stif/TestInterference/src/StifTestInterference.cpp Tue Jul 06 16:05:13 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1999 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: This module contains the implementation of
-* MSTIFTestInterference class member functions.
-*
-*/
-
-// INCLUDE FILES
-#include <StifTestInterference.h>
-#include "TestInterferenceImplementation.h"
-
-// EXTERNAL DATA STRUCTURES
-//extern ?external_data;
-
-// EXTERNAL FUNCTION PROTOTYPES
-//extern ?external_function( ?arg_type,?arg_type );
-
-// CONSTANTS
-//const ?type ?constant_var = ?constant;
-
-// For test interference thread's heap size
-const TUint KMaxHeapSize = 0x20000; // 128 K
-
-// MACROS
-//#define ?macro ?macro_def
-
-// LOCAL CONSTANTS AND MACROS
-//const ?type ?constant_var = ?constant;
-//#define ?macro_name ?macro_def
-
-// MODULE DATA STRUCTURES
-//enum ?declaration
-//typedef ?declaration
-
-// LOCAL FUNCTION PROTOTYPES
-//?type ?function_name( ?arg_type, ?arg_type );
-
-// FORWARD DECLARATIONS
-//class ?FORWARD_CLASSNAME;
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// ?function_name ?description.
-// ?description
-// Returns: ?value_1: ?description
-// ?value_n: ?description_line1
-// ?description_line2
-// -----------------------------------------------------------------------------
-//
-/*
-?type ?function_name(
- ?arg_type arg, // ?description
- ?arg_type arg) // ?description
- {
-
- ?code // ?comment
-
- // ?comment
- ?code
- }
-*/
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-/*
--------------------------------------------------------------------------------
-
- Class: MSTIFTestInterference
-
- Method: MSTIFTestInterference
-
- Description: Create test interference object according to the paramater.
-
- Parameters: CTestModuleBase* aTestModuleBase: inout: CTestModuleBase object
- for get test interference handle to STIF's side(Used if test
- case panic so test interference thread can be kill by STIF).
- TStifTestInterferenceCategory aCategory: in: Test interference
- category
-
- Return Values: MSTIFTestInterference*: pointer to MSTIFTestInterference
- object
-
- Errors/Exceptions: Leaves if object creation fails.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-EXPORT_C MSTIFTestInterference* MSTIFTestInterference::NewL(
- CTestModuleBase* aTestModuleBase,
- TStifTestInterferenceCategory aCategory )
- {
- if( aCategory == EActiveObject ) // Active object
- {
- CSTIFInterferenceAO* self = NULL;
- self = CSTIFInterferenceAO::NewL();
- return (MSTIFTestInterference*)self;
- }
- else // EThread
- {
- CSTIFInterferenceThread* self = NULL;
- self = CSTIFInterferenceThread::NewL( aTestModuleBase );
- return (MSTIFTestInterference*)self;
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: MSTIFTestInterference
-
- Method: MSTIFTestInterference
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-MSTIFTestInterference::~MSTIFTestInterference()
- {
- // None
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains the implementation of CSTIFInterferenceAO class
- member functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: CSTIFInterferenceAO
-
- Description: C++ default constructor can NOT contain any code, that
- might leave
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CSTIFInterferenceAO::CSTIFInterferenceAO() :
- CActive ( CActive::EPriorityStandard )
- {
- iInterferenceType = ENone;
- iIdleTime = 0;
- iActiveTime = 0;
- iExecuteInterference = NULL;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: ConstructL
-
- Description: Symbian 2nd phase constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leave if CreateLocal fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CSTIFInterferenceAO::ConstructL()
- {
- CActiveScheduler::Add ( this );
-
- User::LeaveIfError( iAOIdleTimer.CreateLocal() );
-
- iExecuteInterference = CExecuteInterference::NewL();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: None
-
- Return Values: CSTIFInterferenceAO*: pointer to CSTIFInterferenceAO object
-
- Errors/Exceptions: Leaves if object creation fails.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CSTIFInterferenceAO* CSTIFInterferenceAO::NewL()
- {
- CSTIFInterferenceAO* self = new (ELeave) CSTIFInterferenceAO();
-
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop();
-
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: ~CSTIFInterferenceAO
-
- Description: Destructor.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CSTIFInterferenceAO::~CSTIFInterferenceAO()
- {
- Cancel(); // Cancel itself
- // If test case panic etc. do close operations here.
- delete iExecuteInterference;
- iExecuteInterference = NULL;
-
- iAOIdleTimer.Close();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: RunL
-
- Description: Derived from CActive, handles test interference execution.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if InterferenceL leaves.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CSTIFInterferenceAO::RunL( )
- {
- iExecuteInterference->InterferenceL( iInterferenceType, iActiveTime );
-
- // Start idle timer
- iAOIdleTimer.After( iStatus, iIdleTime );
- SetActive();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: DoCancel
-
- Description: Derived from CActive handles the Cancel
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CSTIFInterferenceAO::DoCancel( )
- {
- iAOIdleTimer.Cancel();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: RunError
-
- Description: Derived from CActive handles errors from active handler.
-
- Parameters: TInt aError: in: error from CActive
-
- Return Values: TInt: Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceAO::RunError( TInt aError )
- {
- RDebug::Print( _L( "CSTIFInterferenceAO::RunError() with [%d]" ), aError );
-
- return aError;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: StartL
-
- Description: StartL method starts test interference.
-
- Parameters: TStifTestInterferenceType aType: in: Test interference type.
- TInt aIdleTime: in: Test interference idle time.
- TInt aActiveTime: in: Test interference active time.
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: Leaves if active object is active.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceAO::StartL( TStifTestInterferenceType aType,
- TInt aIdleTime,
- TInt aActiveTime )
- {
- if( IsActive() )
- {
- User::Leave( KErrAlreadyExists );
- }
-
- switch( aType )
- {
- case ENone:
- case ECpuLoad:
- case EFileSystemReadC:
- case EFileSystemReadD:
- case EFileSystemReadE:
- case EFileSystemReadZ:
- case EFileSystemWriteC:
- case EFileSystemWriteD:
- case EFileSystemWriteE:
- case EFileSystemFillAndEmptyC:
- case EFileSystemFillAndEmptyD:
- case EFileSystemFillAndEmptyE:
- aIdleTime = aIdleTime * 1000;
- aActiveTime = aActiveTime * 1000;
- break;
- case ENoneMicroSeconds:
- aType = ENone;
- break;
- case ECpuLoadMicroSeconds:
- aType = ECpuLoad;
- break;
- case EFileSystemReadCMicroSeconds:
- aType = EFileSystemReadC;
- break;
- case EFileSystemReadDMicroSeconds:
- aType = EFileSystemReadD;
- break;
- case EFileSystemReadEMicroSeconds:
- aType = EFileSystemReadE;
- break;
- case EFileSystemReadZMicroSeconds:
- aType = EFileSystemReadZ;
- break;
- case EFileSystemWriteCMicroSeconds:
- aType = EFileSystemWriteC;
- break;
- case EFileSystemWriteDMicroSeconds:
- aType = EFileSystemWriteD;
- break;
- case EFileSystemWriteEMicroSeconds:
- aType = EFileSystemWriteE;
- break;
- case EFileSystemFillAndEmptyCMicroSeconds:
- aType = EFileSystemFillAndEmptyC;
- break;
- case EFileSystemFillAndEmptyDMicroSeconds:
- aType = EFileSystemFillAndEmptyD;
- break;
- case EFileSystemFillAndEmptyEMicroSeconds:
- aType = EFileSystemFillAndEmptyE;
- break;
- }
-
- iInterferenceType = aType;
- iIdleTime = aIdleTime;
- iActiveTime = aActiveTime;
-
- // Set request to pending and active object to active
- iStatus = KRequestPending;
- SetActive();
- // Complete request immediately
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone );
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: Stop
-
- Description: Stop method stops test interference.
-
- Parameters: None
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceAO::Stop()
- {
- Cancel();
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceAO
-
- Method: SetPriority
-
- Description: Sets thread or active object priority. This should use before
- test interference is started otherwise error code will return.
-
- Parameters: TInt aPriority: in: New priority for active object given by
- user.
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceAO::SetPriority( TInt aPriority )
- {
- if( IsActive() )
- {
- RDebug::Print( _L( "STIF: Priority cannot set because active object is active" ) );
- return KErrGeneral;
- }
-
- CActive::SetPriority( (TPriority)aPriority );
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains the implementation of CSTIFInterferenceThread class
- member functions.
-
--------------------------------------------------------------------------------
-*/
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: CSTIFInterferenceThread
-
- Description: C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CSTIFInterferenceThread::CSTIFInterferenceThread()
- {
- // None
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: ConstructL
-
- Description: C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CSTIFInterferenceThread::ConstructL( CTestModuleBase* aTestModuleBase )
- {
- iTestModuleBase = aTestModuleBase;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: None
-
- Return Values: CSTIFInterferenceThread*: pointer to CSTIFInterferenceThread
- object
-
- Errors/Exceptions: Leaves if object creation fails.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CSTIFInterferenceThread* CSTIFInterferenceThread::NewL(
- CTestModuleBase* aTestModuleBase )
- {
- CSTIFInterferenceThread* self = new (ELeave) CSTIFInterferenceThread();
-
- CleanupStack::PushL( self );
- self->ConstructL( aTestModuleBase );
- CleanupStack::Pop();
-
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: ~CSTIFInterferenceThread
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CSTIFInterferenceThread::~CSTIFInterferenceThread()
- {
- // If test case crash etc. do stop operations here also
- if( iThreadParam != NULL )
- {
- iThreadParam->iStarted.Close();
- }
- delete iThreadParam;
- iThreadParam = NULL;
- if( iThread.Handle() != NULL )
- {
- iThread.Kill( KErrNone );
- iThread.Close();
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: StartL
-
- Description: StartL method starts test interference.
-
- Parameters: TStifTestInterferenceType aType: in: Test interference type.
- TInt aIdleTime: in: Test interference idle time.
- TInt aActiveTime: in: Test interference active time.
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: Leaves if iThreadParam exists.
- Leaves if thread creation fails.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceThread::StartL( TStifTestInterferenceType aType,
- TInt aIdleTime,
- TInt aActiveTime )
- {
- //__UHEAP_MARK;
-
- if( iThreadParam )
- {
- User::Leave( KErrAlreadyExists );
- }
-
- // Thread related parameters
- iThreadParam = new TThreadParam;
- iThreadParam->iStarted.CreateLocal( 0 );
- iThreadParam->iType = aType;
- iThreadParam->iIdleTime = aIdleTime;
- iThreadParam->iActiveTime = aActiveTime;
-
- // Temporary thread unique name
- _LIT( KThreadFirstName, "STIFInterference_%x" );
-
- TBuf<32> tmpThreadName;
- TInt uniqueCounter = 1;
-
- TInt ret = KErrNone;
- do
- {
- tmpThreadName.Format( KThreadFirstName, uniqueCounter );
- // Create thread
- ret = iThread.Create(
- tmpThreadName, // thread name
- ThreadFunction, // thread function
- KDefaultStackSize*4, // stack
- KMinHeapSize, // Heap, min
- KMaxHeapSize*2, // Heap, max
- (TAny*) iThreadParam // parameter to thread function
- );
- uniqueCounter++;
- }
- while( ret == KErrAlreadyExists );
-
- // If thread creation failed
- if( ret != KErrNone )
- {
- iThreadParam->iStarted.Close(); // Close semaphore
- delete iThreadParam;
- iThreadParam = NULL;
- //__UHEAP_MARKEND;
- User::Leave( ret );
- }
-
- // Add thread pointer to STIF side for cases where need to kill
- // thread e.g. if test case is crashed etc. before Stop(give by user).
- iTestModuleBase->iTestModuleIf->AddInterferenceThread( iThread );
-
- // Create unique thread name
- const TInt name = 17; // Name parts
- const TInt id = 8; // Unique id parts
- _LIT( KThreadUniqueName, "STIFInterference_" );
- TBuf<name+id> threadUniqueName;
- threadUniqueName.Copy( KThreadUniqueName );
- // Appends id in hexadesimal format
- threadUniqueName.AppendFormat( _L( "%x" ), (TInt)iThread.Id() );
- //RDebug::Print(threadUniqueName);
-
- // Reneme thread with unique name
- iThread.RenameMe( threadUniqueName );
-
- // Thread is currently in suspend state
-
- // Now start thread
- iThread.SetPriority( EPriorityMuchMore ); // set its priority
- iThread.Resume(); // kick it into life in
- // sometimes(depend on scheduler)
-
- // This block execution here and continue when signal is said in thread
- // execution side.
- // Wait until the thread is started
- iThreadParam->iStarted.Wait();
-
- //__UHEAP_MARKEND;
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: Stop
-
- Description: Stop method stops test interference.
-
- Parameters: None
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceThread::Stop()
- {
- // Ensures that remove(Stop()) sequence won't do two times for one thread.
- if( iThread.Handle() != NULL )
- {
- // Remove pointer from array
- iTestModuleBase->iTestModuleIf->RemoveInterferenceThread( iThread );
- }
-
- // If test case crash etc. do stop operations here also
- if( iThreadParam != NULL )
- {
- iThreadParam->iStarted.Close();
- }
- delete iThreadParam;
- iThreadParam = NULL;
- if( iThread.Handle() != NULL )
- {
- iThread.Kill( KErrNone );
- iThread.Close();
- }
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: SetPriority
-
- Description: Sets thread or active object priority. This should use before
- test interference is started otherwise error code will return.
-
- Parameters: TInt aPriority: in: New priority for active object given by
- user.
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceThread::SetPriority( TInt aPriority )
- {
- // RThread priority can set during interference executions time. User
- // should be sure that given value is acceptable, otherwise SetPriority
- // panics.
-
- RThread thisThread;
- thisThread.SetPriority ( (TThreadPriority) aPriority );
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: ThreadFunction
-
- Description: Implements thread code
-
- Parameters: TAny* aThreadArg: in : Thread related informations
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CSTIFInterferenceThread::ThreadFunction( TAny* aThreadArg )
- {
- // Thread code here
-
- // Create clean-up stack
- CTrapCleanup* tc = CTrapCleanup::New();
-
- // Take local copy of incoming parameters.
- // This object is in stack -> no manual deletion
- TThreadParam params = *(TThreadParam*)aThreadArg;
-
- // Signal to continue from CSTIFInterferenceThread::StartL
- params.iStarted.Signal();
-
- TInt ret = KErrNone;
-
- // Construct and install active scheduler
- CActiveScheduler* activeScheduler = new CActiveScheduler;
- CActiveScheduler::Install( activeScheduler );
-
- TRAP( ret, ExecuteInterferenceL( params.iType, params.iIdleTime, params.iActiveTime ) );
-
- User::LeaveIfError( ret );
-
- delete activeScheduler;
-
- // Delete clean-up stack
- delete tc;
- tc = NULL;
-
- return KErrNone;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CSTIFInterferenceThread
-
- Method: ExecuteInterferenceL
-
- Description: Executes interference.
-
- Parameters: aType Interference type.
- aIdleTime Idle time.
- aActiveTime Active time.
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CSTIFInterferenceThread::ExecuteInterferenceL( TStifTestInterferenceType aType, TInt aIdleTime, TInt aActiveTime )
- {
- CSTIFInterferenceAO* interferenceAO = CSTIFInterferenceAO::NewL();
- CleanupStack::PushL( interferenceAO );
-
- interferenceAO->StartL( aType, aIdleTime, aActiveTime );
-
- CActiveScheduler::Start();
-
- CleanupStack::PopAndDestroy( interferenceAO );
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains the implementation of CExecuteInterference class
- member functions.
-
--------------------------------------------------------------------------------
-*/
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: CExecuteInterference
-
- Description: C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CExecuteInterference::CExecuteInterference()
- {
- iTimer.CreateLocal();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: ConstructL
-
- Description: C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CExecuteInterference::ConstructL()
- {
- // None
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: None
-
- Return Values: CExecuteInterference*: pointer to CExecuteInterference
- object
-
- Errors/Exceptions: Leaves if object creation fails.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CExecuteInterference* CExecuteInterference::NewL()
- {
- CExecuteInterference* self = new (ELeave) CExecuteInterference();
-
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop();
-
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: ~CExecuteInterference
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CExecuteInterference::~CExecuteInterference()
- {
- iTimer.Cancel();
- iTimer.Close();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: Interference
-
- Description: Start implement the test interference according to aType
- parameter.
-
- Parameters: MSTIFTestInterference::TStifTestInterferenceType aType: in:
- Test interference type.
- TInt aActiveTime: in: Test interference active time
-
- Return Values: TInt: Symbian error code
-
- Errors/Exceptions: Leaves if CleanupClosePushL leave
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::InterferenceL(
- MSTIFTestInterference::TStifTestInterferenceType aType,
- TInt aActiveTime )
- {
- TTimeIntervalMicroSeconds32 myActiveTime( aActiveTime );
-
- TTime endTime;
- endTime.HomeTime();
- endTime = endTime + myActiveTime;
-
- TFileName myFile;
-
- switch( aType )
- {
- case MSTIFTestInterference::ECpuLoad:
- {
- return CPULoad( myActiveTime );
- }
- case MSTIFTestInterference::EFileSystemReadC:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemReadC" ) );
-
- _LIT( KDrive, "c:\\" );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
-
- err = fileserver.SetSessionPath( myFile );
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive C is not ready!" ) );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return KErrNone;
- }
-
- RDebug::Print( _L( "SearchAFileForReading" ) );
- err = SearchAFileForReading( myFile, fileserver );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "File not found!" ) );
- return KErrNone;
- }
-
- RDebug::Print( _L( "File's name is: %S" ), &myFile );
-
- return RepeatReadFromFileL( myFile, myActiveTime );
- }
- case MSTIFTestInterference::EFileSystemReadD:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemReadD" ) );
- _LIT( KDrive, "D\x3a\\" );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- err = fileserver.SetSessionPath( myFile );
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive D is not ready!" ) );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return KErrNone;
- }
- RDebug::Print( _L( "Fileserver created" ) );
-
- err = SearchAFileForReading( myFile, fileserver );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "File not found!" ) );
- return KErrNone;
- }
- return RepeatReadFromFileL( myFile, myActiveTime );
- }
- case MSTIFTestInterference::EFileSystemReadE:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemReadE" ) );
- _LIT( KDrive, "E\x3a\\" );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
- err = fileserver.SetSessionPath( myFile );
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive E is not ready!" ) );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return KErrNone;
- }
-
- err = SearchAFileForReading( myFile, fileserver );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "File not found!" ) );
- return KErrNone;
- }
-
- return RepeatReadFromFileL( myFile, myActiveTime );
- }
- case MSTIFTestInterference::EFileSystemReadZ:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemReadZ" ) );
- _LIT( KDrive, "Z:\\" );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
- err = fileserver.SetSessionPath( myFile );
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive Z is not ready!" ) );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return KErrNone;
- }
-
- err = SearchAFileForReading( myFile, fileserver );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "File not found!" ) );
- return KErrNone;
- }
-
- return RepeatReadFromFileL( myFile, myActiveTime );
- }
- case MSTIFTestInterference::EFileSystemWriteC:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemWriteC" ) );
- _LIT( KDrive, "C:\\" );
- _LIT( KFileName, "FileSystemWriteC.txt" );
- TBufC<20> myFileName( KFileName );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
-
- err = fileserver.SetSessionPath( myFile );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive C is not ready!" ) );
- return KErrNone;
- }
-
- PrepareFileSystemL( myFile, myFileName );
- myFile.Append( myFileName );
- return RepeatWriteToFileL( myFile, endTime );
- }
- case MSTIFTestInterference::EFileSystemWriteD:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemWriteD" ) );
- _LIT( KDrive, "D\x3a\\" );
- _LIT( KFileName, "FileSystemWriteD.txt" );
- TBufC<20> myFileName( KFileName );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
- err = fileserver.SetSessionPath( myFile );
-
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive D is not ready!" ) );
- return KErrNone;
- }
-
- PrepareFileSystemL( myFile, myFileName );
- myFile.Append( myFileName );
- return RepeatWriteToFileL( myFile, endTime );
- }
- case MSTIFTestInterference::EFileSystemWriteE:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemWriteE" ) );
- _LIT( KDrive, "E\x3a\\" );
- _LIT( KFileName, "FileSystemWriteE.txt" );
- TBufC<20> myFileName( KFileName );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
-
- err = fileserver.SetSessionPath( myFile );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive E is not ready!" ) );
- return KErrNone;
- }
- PrepareFileSystemL( myFile, myFileName );
- myFile.Append( myFileName );
-
- return RepeatWriteToFileL( myFile, endTime );
- }
- case MSTIFTestInterference::EFileSystemFillAndEmptyC:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemFillAndEmptyC" ) );
- _LIT( KDrive, "C:\\" );
- _LIT( KFileName, "FillAndEmptyFile.txt" );
- TBufC<20> myFileName( KFileName );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
-
- err = fileserver.SetSessionPath( myFile );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive C is not ready!" ) );
- return KErrNone;
- }
- PrepareFileSystemL( myFile, myFileName );
- myFile.Append( myFileName );
-
- RepeatWriteToFileL( myFile, endTime );
- EmptyTheFileSystemL( myFile, endTime );
-
- return KErrNone;
- }
- case MSTIFTestInterference::EFileSystemFillAndEmptyD:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemFillAndEmptyD" ) );
- _LIT( KDrive, "D\x3a\\" );
- _LIT( KFileName, "FillAndEmptyFile.txt" );
- TBufC<20> myFileName( KFileName );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
-
- err = fileserver.SetSessionPath( myFile );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive D is not ready!" ) );
- return KErrNone;
- }
- PrepareFileSystemL( myFile, myFileName );
- myFile.Append( myFileName );
-
- RepeatWriteToFileL( myFile, endTime );
- EmptyTheFileSystemL( myFile, endTime );
-
- return KErrNone;
- }
- case MSTIFTestInterference::EFileSystemFillAndEmptyE:
- {
- RDebug::Print( _L( "STIFTestInterference::EFileSystemFillAndEmptyE" ) );
- _LIT( KDrive, "E\x3a\\" );
- _LIT( KFileName, "FillAndEmptyFile.txt" );
- TBufC<20> myFileName( KFileName );
- myFile.Format( KDrive );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- RDebug::Print( _L( "Fileserver created" ) );
-
- err = fileserver.SetSessionPath( myFile );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
-
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Drive E is not ready!" ) );
- return KErrNone;
- }
- PrepareFileSystemL( myFile, myFileName );
- myFile.Append( myFileName );
-
- RepeatWriteToFileL( myFile, endTime );
- EmptyTheFileSystemL( myFile, endTime );
-
- return KErrNone;
- }
- default:
- {
- return KErrNone;
- }
- }
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: SearchAFileForReading
-
- Description: Searches a file from given directory
-
- Parameters: TDes &aPath, TDes &aFileserver
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::SearchAFileForReading( TDes &aPath, RFs &aFileserver )
- {
- RDebug::Print( _L( "CExecuteInterference::SearchAFileForReading" ) );
-
- CDir * filelist;
- CDir * dirlist;
- TInt ret = KErrNotFound;
- aFileserver.SetSessionPath( aPath );
-
- aFileserver.GetDir( aPath, KEntryAttNormal, ESortByName, filelist, dirlist );
-
- if( !filelist || !dirlist )
- {
- return KErrArgument;
- }
-
- if( filelist->Count() > 0 )
- {
- RDebug::Print( _L( "Filelist > 0" ) );
-
- // File found!
-
- // Check file size and accept it only if the size is ~10kb
- // at miminum, or something like that
- aPath.Append( (*filelist)[0].iName );
- ret = KErrNone;
-
- RDebug::Print( _L( "File name: %S" ), &(*filelist)[0].iName );
- }
- else
- {
- RDebug::Print( _L( "Filelist < 0, lets check other dirs" ) );
- TFileName tmp;
- tmp.Append( aPath );
- for( TInt x=0; x<dirlist->Count(); x++ )
- {
- aPath.Format( tmp );
- aPath.Append( (*dirlist)[0].iName );
- aPath.Append( _L("\\") );
- ret = SearchAFileForReading( aPath, aFileserver );
- if( ret == KErrNone )
- {
- break;
- }
- }
- }
-
- delete filelist;
- delete dirlist;
-
- return ret;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: PrepareFileSystemLL
-
- Description: Creates directory and file for test cases, if necessary
-
- Parameters: TDes &aDriveName, TDes &aFileName
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::PrepareFileSystemL( TDesC &aDriveName,
- TDesC &aFileName )
- {
- // Note that aDriveName must be in format drivename:\\, e.g. "c:\\"
-
- RDebug::Print(_L("CExecuteInterference::PrepareFileSystemL"));
- TFileName tmp;
- tmp.Append( aDriveName );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
-
- _LIT( KSTIFDirName, "STIFInterference\\" );
-
- err = fileserver.SetSessionPath( tmp );
- if( err != KErrNone )
- {
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return err;
- }
-
- tmp.Append( KSTIFDirName );
- err = fileserver.MkDir( tmp );
- if( err != KErrNone && err != KErrAlreadyExists )
- {
- RDebug::Print( _L( "MkDir failed with error: %d" ), err );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return err;
- }
-
- tmp.Format( aDriveName );
- tmp.Append( KSTIFDirName );
- fileserver.SetSessionPath( tmp );
-
- RFile newFile;
- CleanupClosePushL( newFile );
- TInt ret = newFile.Create( fileserver, aFileName, EFileWrite );
- if( ret != KErrNone && ret != KErrAlreadyExists )
- {
- RDebug::Print( _L( "File create failed with error: %d" ), err );
- }
-
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &newFile );
- CleanupStack::Pop( &fileserver );
- newFile.Close();
- fileserver.Close();
-
- return ret;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: CPULoad
-
- Description: Creates CPU load to the system
-
- Parameters: const TTimeIntervalMicroSeconds32 &aActiveTime
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::CPULoad( const TTimeIntervalMicroSeconds32 &aActiveTime )
- {
- RDebug::Print(_L("CExecuteInterference::CPULoad"));
-
- TTime endTime;
- TTime currentTime;
-
- currentTime.HomeTime();
- endTime.HomeTime();
-
- endTime = endTime + aActiveTime;
-
- while ( currentTime < endTime )
- {
- currentTime.HomeTime();
- }
-
- return KErrNone;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: DeleteFilesRecursivelyL
-
- Description: Delete files in current directory and its subdirectories
-
- Parameters: RFs &aFileserver,
- TDes &aStartDirectory
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: Leaves if GetDir fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::DeleteFilesRecursivelyL( RFs &aFileserver,
- TDes &aStartDirectory,
- const TTime &aEndTime )
- {
- TTime currentTime;
- currentTime.HomeTime();
- if( currentTime >= aEndTime )
- {
- return KErrTimedOut;
- }
-
- RDebug::Print( _L( "CExecuteInterference::DeleteFilesRecursivelyL" ) );
-
- TFileName currentDir;
- CDir * filelist;
- CDir * dirlist;
-
- aFileserver.SetSessionPath( aStartDirectory );
- aFileserver.SessionPath( currentDir );
- RDebug::Print( _L( "Hakemistopolku = %S" ), ¤tDir );
-
- User::LeaveIfError( aFileserver.GetDir(
- currentDir, KEntryAttNormal, ESortByName, filelist, dirlist ) );
-
- // Delete all files
- for( TInt x=0; x<filelist->Count(); x++ )
- {
- RDebug::Print( _L( "CExecuteInterference::DeleteFilesRecursivelyL: delete: %S" ), &(*filelist)[x].iName );
- aFileserver.Delete( (*filelist)[x].iName );
- }
-
- // Looping all directories recursively
- for( TInt y= 0; y<dirlist->Count(); y++ )
- {
- currentDir.Format( aStartDirectory );
- currentDir.Append( (*dirlist)[y].iName );
- currentDir.Append( _L("\\") );
- DeleteFilesRecursivelyL( aFileserver, currentDir, aEndTime );
- }
-
- delete filelist;
- delete dirlist;
-
- return KErrNone;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: EmptyTheFileSystemL
-
- Description: Empty the file system using DeleteFilesRecursivelyL
-
- Parameters: TDes &aFilePath
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::EmptyTheFileSystemL( TDes &aFilePath,
- const TTime &aEndTime )
- {
- TTime currentTime;
- currentTime.HomeTime();
- if( currentTime >= aEndTime )
- {
- // End of time
- return KErrTimedOut;
- }
-
- RDebug::Print( _L( "CExecuteInterference::EmptyTheFileSystemL" ) );
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
- TRAP( err, DeleteFilesRecursivelyL( fileserver, aFilePath, aEndTime ) );
- if( err != KErrNone )
- {
- RDebug::Print( _L( "DeleteFilesRecursivelyL failed with error: %d" ), err );
- }
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return err;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: WriteToFileAsynchL
-
- Description: Writes data to a file asynchronously
-
- Parameters: RFs &aFileserver,
- const TTime &aEndTime
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::WriteToFileAsynchL( TDes &aFilePath,
- RFs &aFileserver,
- const TTime &aEndTime )
- {
- RFile myFile;
-
- TInt err = myFile.Open( aFileserver, aFilePath, EFileWrite );
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Open file failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( myFile );
- TInt position = 0;
- myFile.Seek( ESeekEnd, position );
-
- _LIT8( KMyBuffer, "STIF Interference module: WriteToFile");
-
- // NOTE: this part has previous asynch implementation, doesn't work
- // at the moment
- /*
- TRequestStatus status;
- myFile.Write( position, KMyBuffer, status );
- // Loop until either write operation is completed or the execution
- // time has expired
- while( doAlways )
- {
- if( status != KRequestPending )
- {
- return status.Int();
- }
- currentTime.HomeTime();
- if( currentTime >= aEndTime )
- {
- return KErrTimedOut;
- }
-
- }
- */
-
- TTime currentTime;
- currentTime.HomeTime();
-
- while( currentTime <= aEndTime )
- {
- myFile.Write( position, KMyBuffer );
- currentTime.HomeTime();
- }
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &myFile );
- myFile.Close();
- return KErrNone;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: RepeatWriteToFileL
-
- Description: Repeats file writing using WriteToFileAsynchL method
-
- Parameters: const TTimeIntervalMicroSeconds32 &aActiveTime
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::RepeatWriteToFileL(
- TDes &aFilePath,
- const TTime &aActiveTime )
- {
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
-
- TTime currentTime;
- currentTime.HomeTime();
-
- TVolumeInfo myVolume;
- fileserver.Volume( myVolume, EDriveC );
-
- while( ( currentTime <= aActiveTime ) && ( myVolume.iFree > 0 ) )
- {
- WriteToFileAsynchL( aFilePath, fileserver, aActiveTime );
- currentTime.HomeTime();
- }
-
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return KErrNone;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CExecuteInterference
-
- Method: RepeatReadFromFileL
-
- Description: Repeats file reading using ReadFromFileAsynch method
-
- Parameters: const TTimeIntervalMicroSeconds32 &aActiveTime
-
- Return Values: TInt Symbian error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CExecuteInterference::RepeatReadFromFileL(
- TDes &aFilePath,
- const TTimeIntervalMicroSeconds32 &aActiveTime )
- {
- RDebug::Print( _L( "CExecuteInterference::RepeatReadFromFileL" ) );
-
- RFs fileserver;
- TInt err = fileserver.Connect();
- if( err != KErrNone )
- {
- RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
- return err;
- }
- CleanupClosePushL( fileserver );
-
- TTime endTime;
- TTime currentTime;
- RFile myFile;
- TBuf8<20> myReadBuffer;
-
- RDebug::Print( _L( "RepeatReadFromFileL: Open" ) );
-
- // Open file
- err = myFile.Open( fileserver, aFilePath, EFileWrite );
- if( err != KErrNone )
- {
- RDebug::Print( _L( "Open file failed with error: %d" ), err );
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &fileserver );
- fileserver.Close();
- return err;
- }
-
- CleanupClosePushL( myFile );
- // This part has previous async implementation, doesn't work at moment
- /*
- RDebug::Print( _L( "ReadFromFileAsynch: trequeststatus" ) );
-
- TRequestStatus timer;
- TRequestStatus read;
-
- RDebug::Print( _L( "ReadFromFileAsynch: asynk timer" ) );
-
- RTimer clock;
- clock.CreateLocal();
- clock.At( timer, endTime);
-
- RDebug::Print( _L( "ReadFromFileAsynch: asynk read" ) );
- myFile.Read( myReadBuffer, 20, read );
-
- RDebug::Print( _L( "ReadFromFileAsynch: ennen whilelooppia" ) );
- while( timer == KRequestPending )
- {
- User::WaitForRequest( read, timer );
- if( read != KRequestPending)
- {
- RDebug::Print( _L( "ReadFromFileAsynch: uudelleen asynk read" ) );
- read = KRequestPending;
- myFile.Read( myReadBuffer, 20, read );
- }
- else
- {
- RDebug::Print( _L( "ReadFromFileAsynch: cancel luku, timer kompletoitui" ) );
- // Timer valmis
- //read = KRequestPending;
- myFile.ReadCancel( read );
- User::WaitForRequest( read );
- break;
- }
- }
- */
-
- currentTime.HomeTime();
- endTime.HomeTime();
- endTime = endTime + aActiveTime;
-
- while( currentTime <= endTime )
- {
- myFile.Read( myReadBuffer );
- currentTime.HomeTime();
- }
-
- //myFile.Close();
- //fileserver.Close();
- // R Classes have not created with New, no delete needed
- CleanupStack::Pop( &myFile );
- CleanupStack::Pop( &fileserver );
- myFile.Close();
- fileserver.Close();
- //CleanupStack::PopAndDestroy( 2 );
-
- RDebug::Print( _L( "CExecuteInterference::RepeatReadFromFileL success" ) );
- return KErrNone;
- }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-// None
-
-// End of File