1 /** 2 * 3 * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU) 4 * info_at_agrum_dot_org 5 * 6 * This library is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public License 17 * along with this library. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 22 // to ease IDE parser 23 #include <chrono> 24 25 #include <agrum/tools/core/timer.h> 26 27 namespace gum { 28 29 30 INLINE reset()31 void Timer::reset() { 32 sleeping_ = false; 33 start_ = std::chrono::high_resolution_clock::now(); 34 pause_ = std::chrono::high_resolution_clock::now(); 35 36 // do start_ = clock(); while ( start_ == k );// to be sure to start at the 37 // beginning of a tick 38 } 39 40 INLINE step()41 double Timer::step() const { 42 std::chrono::duration< double, std::milli > ms; 43 ; 44 if (sleeping_) 45 ms = pause_ - start_; 46 else 47 ms = std::chrono::high_resolution_clock::now() - start_; 48 return ms.count() / 1000.0; 49 } 50 51 INLINE pause()52 double Timer::pause() { 53 if (!sleeping_) { 54 pause_ = std::chrono::high_resolution_clock::now(); 55 sleeping_ = true; 56 } 57 58 return step(); 59 } 60 61 INLINE resume()62 double Timer::resume() { 63 if (sleeping_) { 64 start_ += std::chrono::high_resolution_clock::now() - pause_; 65 sleeping_ = false; 66 } 67 68 return step(); 69 } 70 } /* namespace gum */ 71