diff options
Diffstat (limited to 'lib/System/Win32/Process.cpp')
-rw-r--r-- | lib/System/Win32/Process.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/System/Win32/Process.cpp b/lib/System/Win32/Process.cpp index 5a4b4f0dbb..b4ed4b7946 100644 --- a/lib/System/Win32/Process.cpp +++ b/lib/System/Win32/Process.cpp @@ -41,5 +41,48 @@ Process::GetPageSize() { return PageSize; } +void* +uint64_t +Process::GetMallocUsage() +{ +#ifdef HAVE_MALLINFO + struct mallinfo mi = ::mallinfo(); + return mi.uordblks; +#warning Cannot get malloc info on this platform + return 0; +#endif +} + +uint64_t +Process::GetTotalMemoryUsage() +{ +#ifdef HAVE_MALLINFO + struct mallinfo mi = ::mallinfo(); + return mi.uordblks + mi.hblkhd +#else +#warning Cannot get total memory size on this platform + return 0; +#endif +} + +void +Process::GetTimeUsage( + TimeValue& elapsed, TimeValue& user_time, TimeValue& sys_time) +{ + elapsed = TimeValue::now(); + + unsigned __int64 ProcCreate, ProcExit, KernelTime, UserTime; + GetProcessTimes(GetCurrentProcess(), (FILETIME*)&ProcCreate, + (FILETIME*)&ProcExit, (FILETIME*)&KernelTime, + (FILETIME*)&UserTime + ); + + // FILETIME's are # of 100 nanosecond ticks (1/10th of a microsecond) + user_time.seconds( UserTime / 10000000 ); + user_time.nanoseconds( (UserTime % 10000000) * 100 ); + sys_time.seconds( KernelTime / 10000000 ); + user_time.nanoseconds( (UserTime % 10000000) * 100 ); +} + } // vim: sw=2 smartindent smarttab tw=80 autoindent expandtab |