--- a/kerneltest/e32test/mmu/freeram.h Thu Aug 19 11:14:22 2010 +0300
+++ b/kerneltest/e32test/mmu/freeram.h Tue Aug 31 16:34:26 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;
}