kerneltest/f32test/bench/t_fat_perf.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/bench/t_fat_perf.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,282 @@
+/**
+* Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* File Name:		f32test/bench/t_fat_perf.h
+* Include file for t_fat_perf.cpp (PREQ 1885).
+* 
+*
+*/
+
+
+
+//Include Files
+#include <f32file.h>
+#include <e32test.h>
+#include <hal.h>
+#include "t_server.h"
+#include "fat_utils.h"
+#include "f32_test_utils.h" 
+
+using namespace F32_Test_Utils;
+using namespace Fat_Test_Utils;
+
+extern TInt gTestCaseNo;
+
+extern TFileName 	gPath;
+extern TFileName 	gFileNameBase;
+extern TInt 		gFileNo;
+extern TInt		    gTestCase;
+extern TInt			gCacheClear;
+extern TInt         gZeroPadFileNumberForFixedLengthFileNames;
+
+//////////////////////////////////////////////////////////////////////////////
+// Interfaces
+
+// File Operation Modes
+enum TFileOperationMode
+	{
+	EFATPerfFileOpen,
+	EFATPerfFileCreate,
+	EFATPerfFileReplace,
+	EFATPerfFileDelete,
+	EFATPerfFileWrite,
+	EFATPerfFileRead,
+	};
+
+// File Creation Options
+enum TNamingConOrRan
+	{
+	EConsecutive,
+	ERandom,
+	};
+
+// Standards
+enum TNamingUniOrAsc
+	{
+	EAscii,
+	EUnicode,
+	};
+
+// Test function names
+enum TTestFunction
+	{
+	EFATPerfSetup,
+	EFATPerfCreate,
+	EFATPerfOpen,
+	EFATPerfDelete,
+	EFATPerfRead,
+	EFATPerfWrite,
+	EFATPerfDirCacheInfo,
+	};
+	
+// For DirCache info printing 
+// These enum values are based on enum TControlIO defined in \f32\sfat\common_constants.h
+enum TDirCacheControlIOMap
+	{
+	ETestDumpFATDirCache = 15,	///<15
+	ETestFATDirCacheInfo = 16,	///<16
+	};
+
+// File Naming schemes
+class TNamingSchemeParam
+	{
+public:
+    TNamingSchemeParam();
+    
+public:
+	TNamingConOrRan	iConOrRan;
+	TNamingUniOrAsc	iUniOrAsc;
+	TBool iZeroPadFileNumber; // Only applies to consecutive file name generation
+	TFileName 	iFileNameBase;
+	TUint	iMaxFileNameLength;	// Applies only to random name generation
+	TUint	iMinStringLength;
+	};
+
+class CMeasureAndLogUnit;
+
+// File Operation Parameters
+struct TFileOpUnitParam
+	{
+	TFileName 	iDirName;
+	TNamingSchemeParam iNamingSchemeParam;
+	TFileOperationMode	iFileOpMode;
+	CMeasureAndLogUnit* iMLUnitPtr;
+	};
+
+// Directory Unit Parameters
+struct TDirUnitParam
+	{
+	TUint		iPriority;
+	TFileName	iDirName;
+	TUint		iRuns;
+	TUint		iFilesPerRun;
+	TUint		iSampleInterval;
+	TNamingSchemeParam		iNamingScheme;
+	TFileOperationMode		iFileOpMode;
+	};
+
+struct	TMLUnitParam
+	{
+	TInt	iID;
+	};
+
+struct TMLParam
+	{
+	TFileName	iDirName;
+	TFileName	iFileName;
+	TNamingSchemeParam iNamingScheme;
+	TUint	iCurFileNo;
+	TFileOperationMode	iFileOpMode;
+	};
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+// Module definition
+
+
+// Measurement and Log Unit
+class CMeasureAndLogUnit : CBase
+	{
+public:
+	static CMeasureAndLogUnit* NewLC(const TMLUnitParam& aParam);
+	static CMeasureAndLogUnit* NewL(const TMLUnitParam& aParam);
+	~CMeasureAndLogUnit();
+	TInt	MeasureStart();
+	TInt	MeasureEnd();
+	TInt	Log(const TFileName& aDirName, const TFileName& aFileName, TUint aCurrentFileNo, TUint aCurrentFilePos);
+private:
+	CMeasureAndLogUnit();
+	void ConstructL(const TMLUnitParam& aParam);
+	TInt	DoMeasureStart();
+	TInt	DoMeasureEnd();
+	TInt	DoLog(const TFileName& aFileName, TUint aCurrentFileNo, TUint aCurrentFilePos);
+	
+private:
+	TInt	iID;
+	TUint32	iStartStatus;
+	TUint32	iEndStatus;
+	TInt	iFreq;
+	TReal	iScale;		
+	TUint	iLogItemNo;
+	};
+
+// File Operation Unit
+class CFileOperationUnit : CBase
+	{
+public:
+	static CFileOperationUnit* NewLC(const TFileOpUnitParam& aParam);
+	static CFileOperationUnit* NewL(const TFileOpUnitParam& aParam);
+	~CFileOperationUnit();
+	
+	TInt 	Run(const TFileName& aDirName, const TFileName& aFileName, TBool aIsTakingMeasurement, TUint aCurFileNo, TUint aCurFilePos);
+	void	SetMLUnit(CMeasureAndLogUnit* aMLUnit);
+
+private:
+	CFileOperationUnit();	
+	void ConstructL(const TFileOpUnitParam& aParam);
+
+private:
+	TFileName 	iDirName;
+	TNamingSchemeParam iNamingSchemeParam;
+	TFileOperationMode	iFileOpMode;
+	CMeasureAndLogUnit* iMLUnitPtr;
+	RFs					iRFs;
+	TBool				iDirCreated;
+	};
+
+
+class CDirUnit : public CBase
+	{
+public:
+	static CDirUnit* NewLC(const TDirUnitParam& aParam, const TChar aDriveChar);
+	static CDirUnit* NewL(const TDirUnitParam& aParam, const TChar aDriveChar);
+	~CDirUnit();
+	TInt Run(const TInt aCurPriority);
+	void SetMLUnit(CMeasureAndLogUnit* aMLUnit);
+	TInt Priority();
+	const TFileName& Name();
+
+private:
+	CDirUnit();
+	void ConstructL(const TDirUnitParam& aParam, const TChar aDriveChar);
+
+	TInt 	GenerateFileName(TFileName& aFileName); // uses iNameGen
+	TBool 	CheckMeasurementTaking();		     	// uses currentFileNo, 
+												    // totalFileNo, 
+												    // samplingInterval
+	TInt 	DoFileOperation();
+	TFileName GenerateRandomString(const TUint aMinStringLength, const TUint aMaxStringLength, const TNamingUniOrAsc aUniOrAsc);
+	TBool FileNameIsUnique(const TFileName& aFileName);
+private:
+	TInt					iPriority;
+	TFileName				iDirName;
+	TUint					iRuns;
+	TUint					iCurrentRunNo;
+	TUint					iFilesPerRun;
+	TUint					iCurrentFileNo;
+	TUint					iTotalFileNo;
+	TUint					iSampleInterval;
+	
+	TUint                   iNumDigitsInTotalFileNo;    // The number of digits iTotalFileNo has.
+                                                        // Used to zero pad the file number if iZeroPadFileNumberForFixedWidthFileNames is ETrue
+	
+	TNamingConOrRan	iConOrRan;                 // Consecutive or random
+	TNamingUniOrAsc	iUniOrAsc;                 // ASCII or Unicode
+	TBool iZeroPadFileNumberForFixedLengthFileNames;
+	TFileName 			iFileNameBase;
+	TUint				iMaxFileNameLength;   // Applies only to random name generation
+	TUint				iMinStringLength;     // Applies only to random name generation
+	
+	CFileOperationUnit* 	iFileOpUnit;
+	CMeasureAndLogUnit*	iMLUnitPtr;
+	
+	};
+
+//Execution Unit
+class CExecutionUnit : public CBase
+	{
+public:
+	static CExecutionUnit* NewLC(CMeasureAndLogUnit* aMLUnit, const TChar aDriveChar);
+	static CExecutionUnit* NewL(CMeasureAndLogUnit* aMLUnit, const TChar aDriveChar);
+
+	~CExecutionUnit();
+
+	TInt 	AddDirUnitL(const TDirUnitParam& aParam);
+	TInt	RecalculateCurrentPrioirty();
+	TInt 	Run();
+
+	///For Debug
+	TUint ForDebug_AddrOfDirUnit(TUint aDirUnitIter);
+	TUint ForDebug_AddrOfDirUnitArray();
+
+private:
+	CExecutionUnit();
+	void ConstructL(CMeasureAndLogUnit* aMLUnit, const TChar aDriveChar);
+
+private:
+	// Array of CDirUnit
+	RPointerArray<CDirUnit>	iDirUnitArray;
+	
+	// Logging Unit
+	CMeasureAndLogUnit*	iMLUnitPtr;	// no ownership
+	
+	// Current priority
+	TInt 	iCurPriority;
+	
+	TChar	iDriveChar;
+	
+	}; 
+	
+/*-- EOF--*/
+	
+