kerneltest/f32test/demandpaging/t_ramstress.cpp
changeset 0 a41df078684a
child 33 0173bcd7697c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/demandpaging/t_ramstress.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,93 @@
+// Copyright (c) 2007-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:
+// f32test\demandpaging\t_ramstress.cpp
+// Following this, it requests that the driver continuously attempt 
+// to move pages directly.
+// Platforms/Drives/Compatibility:
+// Hardware only. No defrag support on emulator. 	
+// 
+//
+
+//! @SYMTestCaseID				KBASE-t_ramstress-0606
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			RAM Defrag background defrag stresser 
+//! @SYMPREQ					PREQ308
+//! @SYMTestPriority			High
+//! @SYMTestActions				t_ramstress loads and opens the logical device driver ("D_RAMSTRESS"). 
+//! @SYMTestExpectedResults		Finishes if the system behaves as expected, panics otherwise
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+#include <e32test.h>
+#include <u32hal.h>
+#include <f32file.h>
+#include <hal.h>
+#include "t_ramstress.h"
+
+RTest test(_L("T_RAMSTRESS"));
+
+RRamStressTestLdd  RamstressLdd;
+
+
+//
+// E32Main
+//
+// Main entry point.
+//
+
+TInt E32Main()
+	{
+	test.Title();
+	test.Start(_L("RAM Defrag background stress testing..."));
+
+	TBuf<256> args;
+	User::CommandLine(args);
+	TLex	lex(args);
+	TPtrC  token=lex.NextToken();
+	if (token.Length() != 0)
+		{
+		// exit immediately if we are run as part of autotest
+		test.End();
+		return KErrNone;
+		}
+
+	TInt r = User::LoadLogicalDevice(KRamStressTestLddName);
+	test(r==KErrNone || r==KErrAlreadyExists);
+	test(RamstressLdd.Open()==KErrNone);
+
+	TUint zoneCount = 0;
+	TInt ret = UserSvr::HalFunction(EHalGroupRam,ERamHalGetZoneCount,&zoneCount,0);
+	test(ret == KErrNone);
+	test(zoneCount != 0);
+
+	TUint index;
+	TInt iters = 0;
+	while (1)
+		{
+		for (index = 0; index < zoneCount; index ++)
+			{
+			RamstressLdd.DoMovePagesInZone(index);
+			User::AfterHighRes(1000);
+			}
+		//## mDH make it run forever iters ++;
+		if (iters > 1000000)
+			{
+			break;
+			}
+		}
+	RamstressLdd.Close();
+	test.Next(_L("Ram Defrag : Done"));
+	test.End();
+	return KErrNone;
+	}