xref: /MusicPlayer2/scintilla/src/ElapsedPeriod.h (revision 8af74909132ed5e696cb05b6689ae4baf14c1c96)
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