1 /*========================================================================= 2 * 3 * Copyright Insight Software Consortium 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0.txt 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 *=========================================================================*/ 18 #ifndef itkMemoryProbe_h 19 #define itkMemoryProbe_h 20 21 #include "itkResourceProbe.h" 22 #include "itkMemoryUsageObserver.h" 23 #include "itkIntTypes.h" 24 25 namespace itk 26 { 27 /** \class MemoryProbe 28 * 29 * \brief Computes the memory allocated between two points in code. 30 * 31 * This class allows the user to trace the memory charge between the execution 32 * of two pieces of code. It can be started and stopped in order to evaluate 33 * the execution over multiple passes. The values of memory are taken from 34 * GetProcessMemoryInfo() for Windows, the SMAPS file for Linux 35 * and getrusage() otherwise. 36 * 37 * \ingroup ITKCommon 38 */ 39 class ITKCommon_EXPORT MemoryProbe: 40 public ResourceProbe< SizeValueType, double > 41 { 42 public: 43 44 MemoryProbe(); 45 ~MemoryProbe() override; 46 47 /** Type for measuring memory. */ 48 using MemoryLoadType = SizeValueType; 49 50 /** Type for measuring the average memory. */ 51 using MeanMemoryLoadType = double; 52 53 protected: 54 MemoryLoadType GetInstantValue() const override; 55 56 private: 57 mutable MemoryUsageObserver m_MemoryObserver; 58 }; 59 } // end namespace itk 60 61 #endif //itkMemoryProbe_h 62