kerneltest/e32test/mmu/freeram.h
changeset 231 75252ea6123b
parent 0 a41df078684a
child 257 3e88ff8f41d5
--- a/kerneltest/e32test/mmu/freeram.h	Mon Jul 12 14:24:01 2010 +0100
+++ b/kerneltest/e32test/mmu/freeram.h	Mon Jul 26 10:52:56 2010 +0100
@@ -18,16 +18,32 @@
 #ifndef __FREERAM_H__
 #define __FREERAM_H__
 
-//
-// returns the free RAM in bytes
-//
-inline TInt FreeRam()
+/**
+Get the amount of free RAM in the system in bytes.
+
+This calls the kernel HAL supervisor barrier to ensure that asynchronous cleanup in the supervisor
+happens before the amount of free RAM is measured.
+
+There is also the option to wait for upto a specified timeout for the system to become idle.
+
+@param aIdleTimeoutMs If non-zero, the number of milliseconds to wait for the system to become idle.
+
+@return On sucess returns the amount of free RAM in bytes, KErrTimedOut if the timeout expired
+        without the system becoming idle, or one of the other system-wide error codes.
+*/
+TInt FreeRam(TInt aIdleTimeoutMs = 0)
 	{
 	// wait for any async cleanup in the supervisor to finish first...
-	UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, 0, 0);
+	TInt r = UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier,
+								  (TAny*)aIdleTimeoutMs, 0);
+	if (r != KErrNone)
+		return r;
 
 	TMemoryInfoV1Buf meminfo;
-	UserHal::MemoryInfo(meminfo);
+	r = UserHal::MemoryInfo(meminfo);
+	if (r != KErrNone)
+		return r;
+	
 	return meminfo().iFreeRamInBytes;
 	}