// Created on: 2002-04-03 // Created by: Michael SAZONOV // Copyright (c) 2002-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef OSD_PerfMeter_HeaderFile #define OSD_PerfMeter_HeaderFile #include //! This class enables measuring the CPU time between two points of code execution, regardless of the scope of these points of code. //! A meter is identified by its name (string). So multiple objects in various places of user code may point to the same meter. //! The results will be printed on stdout upon finish of the program. //! For details see OSD_PerfMeter.h class OSD_PerfMeter { public: //! Constructs a void meter (to further call Init and Start) OSD_PerfMeter() : myIMeter(-1) {} //! Constructs and starts (if autoStart is true) the named meter OSD_PerfMeter (const char* theMeter, const bool theToAutoStart = true) : myIMeter (perf_get_meter (theMeter, 0, 0)) { if (myIMeter < 0) myIMeter = perf_init_meter (theMeter); if (theToAutoStart) Start(); } //! Prepares the named meter void Init (const char* theMeter) { myIMeter = perf_get_meter (theMeter, 0, 0); if (myIMeter < 0) myIMeter = perf_init_meter (theMeter); } //! Starts the meter void Start() const { perf_start_imeter(myIMeter); } //! Stops the meter void Stop() const { perf_stop_imeter(myIMeter); } //! Increments the counter w/o time measurement void Tick() const { perf_tick_imeter(myIMeter); } //! Outputs the meter data and resets it to initial state void Flush() const { perf_close_imeter(myIMeter); } //! Assures stopping upon destruction ~OSD_PerfMeter() { if (myIMeter >= 0) Stop(); } private: OSD_PerfMeter(const OSD_PerfMeter&); OSD_PerfMeter& operator= (const OSD_PerfMeter&); protected: int myIMeter; }; #endif // OSD_PerfMeter_HeaderFile