www.pudn.com > Image_segment.rar > PerfTimer.h
//Copyright (c) 2004-2005, Baris Sumengen //All rights reserved. // // CIMPL Matrix Performance Library // //Redistribution and use in source and binary //forms, with or without modification, are //permitted provided that the following //conditions are met: // // * No commercial use is allowed. // This software can only be used // for non-commercial purposes. This // distribution is mainly intended for // academic research and teaching. // * Redistributions of source code must // retain the above copyright notice, this // list of conditions and the following // disclaimer. // * Redistributions of binary form must // mention the above copyright notice, this // list of conditions and the following // disclaimer in a clearly visible part // in associated product manual, // readme, and web site of the redistributed // software. // * Redistributions in binary form must // reproduce the above copyright notice, // this list of conditions and the // following disclaimer in the // documentation and/or other materials // provided with the distribution. // * The name of Baris Sumengen may not be // used to endorse or promote products // derived from this software without // specific prior written permission. // //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT //HOLDERS AND CONTRIBUTORS "AS IS" AND ANY //EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT //NOT LIMITED TO, THE IMPLIED WARRANTIES OF //MERCHANTABILITY AND FITNESS FOR A PARTICULAR //PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE //CONTRIBUTORS BE LIABLE FOR ANY //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, //EXEMPLARY, OR CONSEQUENTIAL DAMAGES //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT //OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, //DATA, OR PROFITS; OR BUSINESS INTERRUPTION) //HOWEVER CAUSED AND ON ANY THEORY OF //LIABILITY, WHETHER IN CONTRACT, STRICT //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR //OTHERWISE) ARISING IN ANY WAY OUT OF THE USE //OF THIS SOFTWARE, EVEN IF ADVISED OF THE //POSSIBILITY OF SUCH DAMAGE. #pragma once #ifndef PERFTIMER_H #define PERFTIMER_H #includeusing std::cout; using std::cerr; using std::endl; #include namespace CIMPL { class PerfTimer { private: bool active; clock_t clockStart; clock_t elapsed; public: PerfTimer(void) { active = false; elapsed = 0; } ~PerfTimer(void){} void Start() { if(!active) { active = true; clockStart = clock(); } else { Utility::Warning("This performance timer is already active!"); } } void Pause() { if(active) { elapsed += clock() - clockStart; active = false; } else { Utility::Warning("This performance timer is not active. You cannot pause it!"); } } void Reset() { if(!active) { elapsed = 0; } else { Utility::Warning("This performance timer is already active. You need to first pause it before resetting!"); } } clock_t GetElapsed() { if(active) { elapsed += clock() - clockStart; active = false; Utility::Warning("This performance timer is still active.\nI am pausing it now automatically before calculating the elapsed time!"); } return elapsed; } double GetElapsedSeconds() { if(active) { elapsed += clock() - clockStart; active = false; Utility::Warning("This performance timer is still active.\nI am pausing it now automatically before calculating the elapsed time!"); } return (double)elapsed/CLOCKS_PER_SEC; } void DisplayElapsed() { if(active) { elapsed += clock() - clockStart; active = false; Utility::Warning("This performance timer is still active.\nI am pausing it now automatically before calculating the elapsed time!"); } cout << "Elapsed CPU clocks: " << elapsed << endl; } void DisplayElapsedSeconds() { if(active) { elapsed += clock() - clockStart; active = false; Utility::Warning("This performance timer is still active.\nI am pausing it now automatically before calculating the elapsed time!"); } cout << "Elapsed time: " << (double)elapsed/CLOCKS_PER_SEC << " seconds" << endl; } // Simple interface void Tic() { if(!active) { elapsed = 0; active = true; clockStart = clock(); } else { Utility::Warning("This performance timer is already active!"); } } double Toc(bool display = true) { if(active) { elapsed += clock() - clockStart; active = false; } if(display) { cout << "Elapsed time: " << (double)elapsed/CLOCKS_PER_SEC << " seconds" << endl; } double tmp = (double)elapsed/CLOCKS_PER_SEC; elapsed = 0; return tmp; } }; }; //namespace #endif