]> Creatis software - clitk.git/blobdiff - common/clitkMemoryUsage.cxx
Comment snoutID
[clitk.git] / common / clitkMemoryUsage.cxx
index b588c41f1666f49117ada4e634fad538768dbe6d..9cc75d0acce73059b2aba6a083059624e9af66d4 100644 (file)
@@ -1,9 +1,9 @@
 /*=========================================================================
   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-  Authors belong to: 
+  Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-  ======================================================================-====*/
+  ===========================================================================**/
 
 // clitk include
 #include "clitkCommon.h"
 #include "clitkMemoryUsage.h"
+#ifndef _WIN32
+#  include <unistd.h>
+#endif
 
-void clitk::PrintMemory(bool verbose, std::string s) 
+void clitk::PrintMemory(bool verbose, std::string s)
 {
 #if CLITK_MEMORY_INFO == 1
   if (verbose) {
     static double previous=0;
     double mem = GetMemoryUsageInMb();
     if (s != "") std::cout << "==> " << s << ": ";
-    std::cout << mem << "Mb (" << mem-previous << "Mb)" << std::endl;
+    std::cout << mem << "MB (" << mem-previous << "MB)" << std::endl;
     previous = mem;
     //DD(stat[i].proc_resident/1000/1000);
     //DD(stat[i].pid);
@@ -35,19 +38,30 @@ void clitk::PrintMemory(bool verbose, std::string s)
 #endif
   }
 
-double clitk::GetMemoryUsageInMb() 
+double clitk::GetMemoryUsageInMb()
 {
 #if CLITK_MEMORY_INFO == 1
   //sleep(1); // wait to refresh memory ? need to let the system refresh the mem
-  int * entries = new int;
-  sg_process_stats * stat = new sg_process_stats;
-  int i=0; 
-  stat = sg_get_process_stats(entries);
+  size_t entries;
+  sg_process_stats *stat;
+  int i=0;
+  sg_init(1);
+
+  stat = sg_get_process_stats(&entries);
+  if(stat == NULL)
+    return 0.0;
+
   // Search the current pid in the list of processes
-  while (stat[i].pid != getpid()) i++;
-  // Display total memory size 
-  double mem = stat[i].proc_size/1000/1000; // in Mb
+  while (stat->pid != getpid() && i < entries)
+  {
+    ++i;
+    ++stat;
+  }
+
+  // Display total memory size
+  double mem = stat->proc_resident/1000/1000; // in MB
   return mem;
+#else
+  return 0.0;
 #endif
   }
-