From e6b77ede40392f0b18ea642a7f3f56edbd30770b Mon Sep 17 00:00:00 2001
From: Reid Spencer <rspencer@reidspencer.com>
Date: Mon, 20 Dec 2004 00:58:53 +0000
Subject: [PATCH] For PR351: * Add GetMallocUsage as a wrapper around
 mallinfo() * Add GetTotalMemoryUsage to get approximate RSS size * Add
 GetTimeUsage to get elapsed/system/user time

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19051 91177308-0d34-0410-b5e6-96231b3b80d8
---
 include/llvm/System/Process.h | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/include/llvm/System/Process.h b/include/llvm/System/Process.h
index 729c000e38d..56028fb7bc4 100644
--- a/include/llvm/System/Process.h
+++ b/include/llvm/System/Process.h
@@ -14,6 +14,8 @@
 #ifndef LLVM_SYSTEM_PROCESS_H
 #define LLVM_SYSTEM_PROCESS_H
 
+#include "llvm/System/TimeValue.h"
+
 namespace llvm {
 namespace sys {
 
@@ -32,6 +34,35 @@ namespace sys {
       /// @brief Get the virtual memory page size
       static unsigned GetPageSize();
 
+      /// This static function will return the total amount of memory allocated
+      /// by the process. This only counts the memory allocated via the malloc,
+      /// calloc and realloc functions and includes any "free" holes in the 
+      /// allocated space. 
+      /// @throws nothing
+      /// @brief Return process memory usage.
+      static uint64_t GetMallocUsage();
+
+      /// This static function will return the total memory usage of the 
+      /// process. This includes code, data, stack and mapped pages usage. Notei
+      /// that the value returned here is not necessarily the Running Set Size,
+      /// it is the total virtual memory usage, regardless of mapped state of
+      /// that memory.
+      static uint64_t GetTotalMemoryUsage();
+
+      /// This static function will set \p user_time to the amount of CPU time 
+      /// spent in user (non-kernel) mode and \p sys_time to the amount of CPU
+      /// time spent in system (kernel) mode.  If the operating system does not
+      /// support collection of these metrics, a zero TimeValue will be for both
+      /// values.
+      static void GetTimeUsage(
+        TimeValue& elapsed,
+          ///< Returns the TimeValue::now() giving current time
+        TimeValue& user_time, 
+          ///< Returns the current amount of user time for the process
+        TimeValue& sys_time
+          ///< Returns the current amount of system time for the process
+      );
+
     /// @}
   };
 }