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 itkResourceProbesCollectorBase_h 19 #define itkResourceProbesCollectorBase_h 20 21 22 #include "itkResourceProbe.h" 23 #include "itkMemoryUsageObserver.h" 24 25 namespace itk 26 { 27 /** \class ResourceProbesCollectorBase 28 * \brief Aggregates a set of probes. 29 * 30 * This class defines a set of ResourceProbes and assign names to them. 31 * The user can start and stop each one of the probes by addressing them by name. 32 * 33 * \sa ResourceProbe 34 * 35 * \ingroup ITKCommon 36 */ 37 template< typename TProbe > 38 class ITK_TEMPLATE_EXPORT ResourceProbesCollectorBase 39 { 40 public: 41 using IdType = std::string; 42 using MapType = std::map< IdType, TProbe >; 43 44 /** destructor */ 45 virtual ~ResourceProbesCollectorBase() = default; 46 47 /** Start a probe with a particular name. If the time probe does not 48 * exist, it will be created */ 49 virtual void Start(const char *name); 50 51 /** Stop a time probe identified with a name */ 52 virtual void Stop(const char *name); 53 54 /** Report the summary of results from all probes */ 55 virtual void Report(std::ostream & os = std::cout,bool printSystemInfo = true, 56 bool printReportHead = true, bool useTabs = false); 57 58 /** Report the summary of results from a specific probe */ 59 virtual void Report(const char *name, std::ostream & os = std::cout, 60 bool printSystemInfo = true, bool printReportHead = true, 61 bool useTabs = false); 62 63 /** Expanded report of the summary of results from all probes */ 64 virtual void ExpandedReport(std::ostream & os = std::cout,bool printSystemInfo = true, 65 bool printReportHead = true, bool useTabs = false); 66 67 /** Expanded report of the summary of results from a specific probe */ 68 virtual void ExpandedReport(const char *name, std::ostream & os = std::cout, 69 bool printSystemInfo = true, bool printReportHead = true, bool useTabs = false); 70 71 /** JavaScript Object Notation (JSON) expanded report the summary of results from all probes */ 72 virtual void JSONReport(std::ostream & os = std::cout, bool printSystemInfo = true); 73 74 /** JavaScript Object Notation (JSON) expanded report the summary of results from a specific probe */ 75 virtual void JSONReport(const char *name, std::ostream & os = std::cout); 76 77 /** Destroy the set of probes. New probes can be created after invoking this 78 method. */ 79 virtual void Clear(); 80 81 82 /** Returns a named Probe. If the name does not exists an exception 83 * is thrown. */ 84 const TProbe & GetProbe(const char*name) const; 85 86 87 protected: 88 MapType m_Probes; 89 }; 90 } // end namespace itk 91 92 #ifndef ITK_MANUAL_INSTANTIATION 93 #include "itkResourceProbesCollectorBase.hxx" 94 #endif 95 96 #endif //itkResourceProbesCollectorBase_h 97