diff -r 9aca3be14c27 -r 75252ea6123b kerneltest/e32test/mmu/freeram.h --- 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; }