os/kernelhwsrv/kerneltest/f32test/bench/t_fat_perf.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200 (2014-06-10)
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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