kerneltest/e32test/mmu/freeram.h
changeset 247 d8d70de2bd36
parent 0 a41df078684a
child 257 3e88ff8f41d5
--- a/kerneltest/e32test/mmu/freeram.h	Tue Jul 06 15:50:07 2010 +0300
+++ b/kerneltest/e32test/mmu/freeram.h	Wed Aug 18 11:08:29 2010 +0300
@@ -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;
 	}