kerneltest/f32test/bench/t_fat_perf.h
changeset 0 a41df078684a
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 /**
       
     2 * Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 * File Name:		f32test/bench/t_fat_perf.h
       
    16 * Include file for t_fat_perf.cpp (PREQ 1885).
       
    17 * 
       
    18 *
       
    19 */
       
    20 
       
    21 
       
    22 
       
    23 //Include Files
       
    24 #include <f32file.h>
       
    25 #include <e32test.h>
       
    26 #include <hal.h>
       
    27 #include "t_server.h"
       
    28 #include "fat_utils.h"
       
    29 #include "f32_test_utils.h" 
       
    30 
       
    31 using namespace F32_Test_Utils;
       
    32 using namespace Fat_Test_Utils;
       
    33 
       
    34 extern TInt gTestCaseNo;
       
    35 
       
    36 extern TFileName 	gPath;
       
    37 extern TFileName 	gFileNameBase;
       
    38 extern TInt 		gFileNo;
       
    39 extern TInt		    gTestCase;
       
    40 extern TInt			gCacheClear;
       
    41 extern TInt         gZeroPadFileNumberForFixedLengthFileNames;
       
    42 
       
    43 //////////////////////////////////////////////////////////////////////////////
       
    44 // Interfaces
       
    45 
       
    46 // File Operation Modes
       
    47 enum TFileOperationMode
       
    48 	{
       
    49 	EFATPerfFileOpen,
       
    50 	EFATPerfFileCreate,
       
    51 	EFATPerfFileReplace,
       
    52 	EFATPerfFileDelete,
       
    53 	EFATPerfFileWrite,
       
    54 	EFATPerfFileRead,
       
    55 	};
       
    56 
       
    57 // File Creation Options
       
    58 enum TNamingConOrRan
       
    59 	{
       
    60 	EConsecutive,
       
    61 	ERandom,
       
    62 	};
       
    63 
       
    64 // Standards
       
    65 enum TNamingUniOrAsc
       
    66 	{
       
    67 	EAscii,
       
    68 	EUnicode,
       
    69 	};
       
    70 
       
    71 // Test function names
       
    72 enum TTestFunction
       
    73 	{
       
    74 	EFATPerfSetup,
       
    75 	EFATPerfCreate,
       
    76 	EFATPerfOpen,
       
    77 	EFATPerfDelete,
       
    78 	EFATPerfRead,
       
    79 	EFATPerfWrite,
       
    80 	EFATPerfDirCacheInfo,
       
    81 	};
       
    82 	
       
    83 // For DirCache info printing 
       
    84 // These enum values are based on enum TControlIO defined in \f32\sfat\common_constants.h
       
    85 enum TDirCacheControlIOMap
       
    86 	{
       
    87 	ETestDumpFATDirCache = 15,	///<15
       
    88 	ETestFATDirCacheInfo = 16,	///<16
       
    89 	};
       
    90 
       
    91 // File Naming schemes
       
    92 class TNamingSchemeParam
       
    93 	{
       
    94 public:
       
    95     TNamingSchemeParam();
       
    96     
       
    97 public:
       
    98 	TNamingConOrRan	iConOrRan;
       
    99 	TNamingUniOrAsc	iUniOrAsc;
       
   100 	TBool iZeroPadFileNumber; // Only applies to consecutive file name generation
       
   101 	TFileName 	iFileNameBase;
       
   102 	TUint	iMaxFileNameLength;	// Applies only to random name generation
       
   103 	TUint	iMinStringLength;
       
   104 	};
       
   105 
       
   106 class CMeasureAndLogUnit;
       
   107 
       
   108 // File Operation Parameters
       
   109 struct TFileOpUnitParam
       
   110 	{
       
   111 	TFileName 	iDirName;
       
   112 	TNamingSchemeParam iNamingSchemeParam;
       
   113 	TFileOperationMode	iFileOpMode;
       
   114 	CMeasureAndLogUnit* iMLUnitPtr;
       
   115 	};
       
   116 
       
   117 // Directory Unit Parameters
       
   118 struct TDirUnitParam
       
   119 	{
       
   120 	TUint		iPriority;
       
   121 	TFileName	iDirName;
       
   122 	TUint		iRuns;
       
   123 	TUint		iFilesPerRun;
       
   124 	TUint		iSampleInterval;
       
   125 	TNamingSchemeParam		iNamingScheme;
       
   126 	TFileOperationMode		iFileOpMode;
       
   127 	};
       
   128 
       
   129 struct	TMLUnitParam
       
   130 	{
       
   131 	TInt	iID;
       
   132 	};
       
   133 
       
   134 struct TMLParam
       
   135 	{
       
   136 	TFileName	iDirName;
       
   137 	TFileName	iFileName;
       
   138 	TNamingSchemeParam iNamingScheme;
       
   139 	TUint	iCurFileNo;
       
   140 	TFileOperationMode	iFileOpMode;
       
   141 	};
       
   142 
       
   143 /////////////////////////////////////////////////////////////////////////////////////////////
       
   144 // Module definition
       
   145 
       
   146 
       
   147 // Measurement and Log Unit
       
   148 class CMeasureAndLogUnit : CBase
       
   149 	{
       
   150 public:
       
   151 	static CMeasureAndLogUnit* NewLC(const TMLUnitParam& aParam);
       
   152 	static CMeasureAndLogUnit* NewL(const TMLUnitParam& aParam);
       
   153 	~CMeasureAndLogUnit();
       
   154 	TInt	MeasureStart();
       
   155 	TInt	MeasureEnd();
       
   156 	TInt	Log(const TFileName& aDirName, const TFileName& aFileName, TUint aCurrentFileNo, TUint aCurrentFilePos);
       
   157 private:
       
   158 	CMeasureAndLogUnit();
       
   159 	void ConstructL(const TMLUnitParam& aParam);
       
   160 	TInt	DoMeasureStart();
       
   161 	TInt	DoMeasureEnd();
       
   162 	TInt	DoLog(const TFileName& aFileName, TUint aCurrentFileNo, TUint aCurrentFilePos);
       
   163 	
       
   164 private:
       
   165 	TInt	iID;
       
   166 	TUint32	iStartStatus;
       
   167 	TUint32	iEndStatus;
       
   168 	TInt	iFreq;
       
   169 	TReal	iScale;		
       
   170 	TUint	iLogItemNo;
       
   171 	};
       
   172 
       
   173 // File Operation Unit
       
   174 class CFileOperationUnit : CBase
       
   175 	{
       
   176 public:
       
   177 	static CFileOperationUnit* NewLC(const TFileOpUnitParam& aParam);
       
   178 	static CFileOperationUnit* NewL(const TFileOpUnitParam& aParam);
       
   179 	~CFileOperationUnit();
       
   180 	
       
   181 	TInt 	Run(const TFileName& aDirName, const TFileName& aFileName, TBool aIsTakingMeasurement, TUint aCurFileNo, TUint aCurFilePos);
       
   182 	void	SetMLUnit(CMeasureAndLogUnit* aMLUnit);
       
   183 
       
   184 private:
       
   185 	CFileOperationUnit();	
       
   186 	void ConstructL(const TFileOpUnitParam& aParam);
       
   187 
       
   188 private:
       
   189 	TFileName 	iDirName;
       
   190 	TNamingSchemeParam iNamingSchemeParam;
       
   191 	TFileOperationMode	iFileOpMode;
       
   192 	CMeasureAndLogUnit* iMLUnitPtr;
       
   193 	RFs					iRFs;
       
   194 	TBool				iDirCreated;
       
   195 	};
       
   196 
       
   197 
       
   198 class CDirUnit : public CBase
       
   199 	{
       
   200 public:
       
   201 	static CDirUnit* NewLC(const TDirUnitParam& aParam, const TChar aDriveChar);
       
   202 	static CDirUnit* NewL(const TDirUnitParam& aParam, const TChar aDriveChar);
       
   203 	~CDirUnit();
       
   204 	TInt Run(const TInt aCurPriority);
       
   205 	void SetMLUnit(CMeasureAndLogUnit* aMLUnit);
       
   206 	TInt Priority();
       
   207 	const TFileName& Name();
       
   208 
       
   209 private:
       
   210 	CDirUnit();
       
   211 	void ConstructL(const TDirUnitParam& aParam, const TChar aDriveChar);
       
   212 
       
   213 	TInt 	GenerateFileName(TFileName& aFileName); // uses iNameGen
       
   214 	TBool 	CheckMeasurementTaking();		     	// uses currentFileNo, 
       
   215 												    // totalFileNo, 
       
   216 												    // samplingInterval
       
   217 	TInt 	DoFileOperation();
       
   218 	TFileName GenerateRandomString(const TUint aMinStringLength, const TUint aMaxStringLength, const TNamingUniOrAsc aUniOrAsc);
       
   219 	TBool FileNameIsUnique(const TFileName& aFileName);
       
   220 private:
       
   221 	TInt					iPriority;
       
   222 	TFileName				iDirName;
       
   223 	TUint					iRuns;
       
   224 	TUint					iCurrentRunNo;
       
   225 	TUint					iFilesPerRun;
       
   226 	TUint					iCurrentFileNo;
       
   227 	TUint					iTotalFileNo;
       
   228 	TUint					iSampleInterval;
       
   229 	
       
   230 	TUint                   iNumDigitsInTotalFileNo;    // The number of digits iTotalFileNo has.
       
   231                                                         // Used to zero pad the file number if iZeroPadFileNumberForFixedWidthFileNames is ETrue
       
   232 	
       
   233 	TNamingConOrRan	iConOrRan;                 // Consecutive or random
       
   234 	TNamingUniOrAsc	iUniOrAsc;                 // ASCII or Unicode
       
   235 	TBool iZeroPadFileNumberForFixedLengthFileNames;
       
   236 	TFileName 			iFileNameBase;
       
   237 	TUint				iMaxFileNameLength;   // Applies only to random name generation
       
   238 	TUint				iMinStringLength;     // Applies only to random name generation
       
   239 	
       
   240 	CFileOperationUnit* 	iFileOpUnit;
       
   241 	CMeasureAndLogUnit*	iMLUnitPtr;
       
   242 	
       
   243 	};
       
   244 
       
   245 //Execution Unit
       
   246 class CExecutionUnit : public CBase
       
   247 	{
       
   248 public:
       
   249 	static CExecutionUnit* NewLC(CMeasureAndLogUnit* aMLUnit, const TChar aDriveChar);
       
   250 	static CExecutionUnit* NewL(CMeasureAndLogUnit* aMLUnit, const TChar aDriveChar);
       
   251 
       
   252 	~CExecutionUnit();
       
   253 
       
   254 	TInt 	AddDirUnitL(const TDirUnitParam& aParam);
       
   255 	TInt	RecalculateCurrentPrioirty();
       
   256 	TInt 	Run();
       
   257 
       
   258 	///For Debug
       
   259 	TUint ForDebug_AddrOfDirUnit(TUint aDirUnitIter);
       
   260 	TUint ForDebug_AddrOfDirUnitArray();
       
   261 
       
   262 private:
       
   263 	CExecutionUnit();
       
   264 	void ConstructL(CMeasureAndLogUnit* aMLUnit, const TChar aDriveChar);
       
   265 
       
   266 private:
       
   267 	// Array of CDirUnit
       
   268 	RPointerArray<CDirUnit>	iDirUnitArray;
       
   269 	
       
   270 	// Logging Unit
       
   271 	CMeasureAndLogUnit*	iMLUnitPtr;	// no ownership
       
   272 	
       
   273 	// Current priority
       
   274 	TInt 	iCurPriority;
       
   275 	
       
   276 	TChar	iDriveChar;
       
   277 	
       
   278 	}; 
       
   279 	
       
   280 /*-- EOF--*/
       
   281 	
       
   282