1*8af74909SZhong Yang // Scintilla source code edit control 2*8af74909SZhong Yang /** @file ElapsedPeriod.h 3*8af74909SZhong Yang ** Encapsulate C++ <chrono> to simplify use. 4*8af74909SZhong Yang **/ 5*8af74909SZhong Yang // Copyright 2018 by Neil Hodgson <[email protected]> 6*8af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed. 7*8af74909SZhong Yang 8*8af74909SZhong Yang #ifndef ELAPSEDPERIOD_H 9*8af74909SZhong Yang #define ELAPSEDPERIOD_H 10*8af74909SZhong Yang 11*8af74909SZhong Yang namespace Scintilla { 12*8af74909SZhong Yang 13*8af74909SZhong Yang // Simplified access to high precision timing. 14*8af74909SZhong Yang class ElapsedPeriod { 15*8af74909SZhong Yang std::chrono::high_resolution_clock::time_point tp; 16*8af74909SZhong Yang public: 17*8af74909SZhong Yang /// Capture the moment ElapsedPeriod()18*8af74909SZhong Yang ElapsedPeriod() noexcept : tp(std::chrono::high_resolution_clock::now()) { 19*8af74909SZhong Yang } 20*8af74909SZhong Yang /// Return duration as floating point seconds 21*8af74909SZhong Yang double Duration(bool reset=false) noexcept { 22*8af74909SZhong Yang const std::chrono::high_resolution_clock::time_point tpNow = 23*8af74909SZhong Yang std::chrono::high_resolution_clock::now(); 24*8af74909SZhong Yang const std::chrono::duration<double> stylingDuration = 25*8af74909SZhong Yang std::chrono::duration_cast<std::chrono::duration<double>>(tpNow - tp); 26*8af74909SZhong Yang if (reset) { 27*8af74909SZhong Yang tp = tpNow; 28*8af74909SZhong Yang } 29*8af74909SZhong Yang return stylingDuration.count(); 30*8af74909SZhong Yang } 31*8af74909SZhong Yang }; 32*8af74909SZhong Yang 33*8af74909SZhong Yang } 34*8af74909SZhong Yang 35*8af74909SZhong Yang #endif 36