@@ -29,7 +29,7 @@ namespace {
2929 using dataElementType = std::pair<std::string, TimerResultsData>;
3030 bool more_second_sec (const dataElementType& lhs, const dataElementType& rhs)
3131 {
32- return lhs.second .seconds () > rhs.second .seconds ();
32+ return lhs.second .getSeconds () > rhs.second .getSeconds ();
3333 }
3434
3535 // TODO: remove and print through (synchronized) ErrorLogger instead
@@ -42,8 +42,6 @@ void TimerResults::showResults(SHOWTIME_MODES mode) const
4242{
4343 if (mode == SHOWTIME_MODES::SHOWTIME_NONE || mode == SHOWTIME_MODES::SHOWTIME_FILE_TOTAL)
4444 return ;
45-
46- TimerResultsData overallData;
4745 std::vector<dataElementType> data;
4846
4947 {
@@ -61,35 +59,20 @@ void TimerResults::showResults(SHOWTIME_MODES mode) const
6159
6260 size_t ordinal = 1 ; // maybe it would be nice to have an ordinal in output later!
6361 for (auto iter=data.cbegin (); iter!=data.cend (); ++iter) {
64- const double sec = iter->second .seconds ();
62+ const double sec = iter->second .getSeconds (). count ();
6563 const double secAverage = sec / static_cast <double >(iter->second .mNumberOfResults );
66- bool hasParent = false ;
67- {
68- // Do not use valueFlow.. in "Overall time" because those are included in Tokenizer already
69- if (startsWith (iter->first ," valueFlow" ))
70- hasParent = true ;
71-
72- // Do not use inner timers in "Overall time"
73- const std::string::size_type pos = iter->first .rfind (" ::" );
74- if (pos != std::string::npos)
75- hasParent = std::any_of (data.cbegin (), data.cend (), [iter,pos](const dataElementType& d) {
76- return d.first .size () == pos && iter->first .compare (0 , d.first .size (), d.first ) == 0 ;
77- });
78- }
79- if (!hasParent)
80- overallData.mClocks += iter->second .mClocks ;
8164 if ((mode != SHOWTIME_MODES::SHOWTIME_TOP5_FILE && mode != SHOWTIME_MODES::SHOWTIME_TOP5_SUMMARY) || (ordinal<=5 )) {
8265 std::cout << iter->first << " : " << sec << " s (avg. " << secAverage << " s - " << iter->second .mNumberOfResults << " result(s))" << std::endl;
8366 }
8467 ++ordinal;
8568 }
8669}
8770
88- void TimerResults::addResults (const std::string& str, std:: clock_t clocks )
71+ void TimerResults::addResults (const std::string& str, Duration duration )
8972{
9073 std::lock_guard<std::mutex> l (mResultsSync );
9174
92- mResults [str].mClocks += clocks ;
75+ mResults [str].mDuration += duration ;
9376 mResults [str].mNumberOfResults ++;
9477}
9578
@@ -102,15 +85,7 @@ void TimerResults::reset()
10285Timer::Timer (std::string str, SHOWTIME_MODES showtimeMode, TimerResultsIntf* timerResults)
10386 : mStr(std::move(str))
10487 , mTimerResults(timerResults)
105- , mStart(std::clock())
10688 , mShowTimeMode(showtimeMode)
107- , mStopped(showtimeMode == SHOWTIME_MODES::SHOWTIME_NONE || showtimeMode == SHOWTIME_MODES::SHOWTIME_FILE_TOTAL)
108- , mStartTimePoint(Clock::now())
109- {}
110-
111- Timer::Timer (std::string str)
112- : mStr(std::move(str))
113- , mShowTimeMode(SHOWTIME_MODES::SHOWTIME_FILE_TOTAL)
11489 , mStartTimePoint(Clock::now())
11590{}
11691
@@ -121,49 +96,35 @@ Timer::~Timer()
12196
12297void Timer::stop ()
12398{
124- if ((mShowTimeMode != SHOWTIME_MODES::SHOWTIME_NONE) && !mStopped ) {
125- const std::clock_t end = std::clock ();
126- const std::clock_t diff = end - mStart ;
127-
128- if (mShowTimeMode == SHOWTIME_MODES::SHOWTIME_FILE) {
129- const double sec = static_cast <double >(diff) / CLOCKS_PER_SEC;
130- std::lock_guard<std::mutex> l (stdCoutLock);
131- std::cout << mStr << " : " << sec << " s" << std::endl;
132- } else if (mShowTimeMode == SHOWTIME_MODES::SHOWTIME_FILE_TOTAL && mStartTimePoint != TimePoint{}) {
99+ if ((mShowTimeMode != SHOWTIME_MODES::SHOWTIME_NONE) && mStartTimePoint != TimePoint{}) {
100+ Duration diff = std::chrono::duration_cast<Duration>(Clock::now () - mStartTimePoint );
101+ if (!mTimerResults ) {
133102 std::lock_guard<std::mutex> l (stdCoutLock);
134- std::cout << " Check time: " << mStr << " : " << getRealTimePassed ( ) << std::endl;
103+ std::cout << ( mStr == " Summary " ? " Overall time: " : " Check time: " + mStr + " : " ) << durationToString (diff ) << std::endl;
135104 } else {
136- if (mTimerResults )
137- mTimerResults ->addResults (mStr , diff);
138- else if (mStr .empty () && mStartTimePoint != TimePoint{}) { // Get real time
139- std::lock_guard<std::mutex> l (stdCoutLock);
140- std::cout << " Overall time: " << getRealTimePassed () << std::endl;
141- }
105+ mTimerResults ->addResults (mStr , diff);
142106 }
143107 }
144-
145- mStopped = true ;
146108}
147109
148- std::string Timer::getRealTimePassed ( )
110+ std::string Timer::durationToString (Duration duration )
149111{
150- auto diff = std::chrono::duration_cast<std::chrono::microseconds>(Clock::now () - mStartTimePoint );
151-
152112 // Extract hours
153- auto hours = std::chrono::duration_cast<std::chrono::hours>(diff );
154- diff -= hours; // Subtract the extracted hours
113+ auto hours = std::chrono::duration_cast<std::chrono::hours>(duration );
114+ duration -= hours; // Subtract the extracted hours
155115
156116 // Extract minutes
157- auto minutes = std::chrono::duration_cast<std::chrono::minutes>(diff );
158- diff -= minutes; // Subtract the extracted minutes
117+ auto minutes = std::chrono::duration_cast<std::chrono::minutes>(duration );
118+ duration -= minutes; // Subtract the extracted minutes
159119
160120 // Extract seconds
161- auto seconds = static_cast <double >(diff. count ()) / std::chrono::microseconds::period::den ;
121+ std::chrono::duration <double > seconds = std::chrono::duration_cast<std::chrono::duration< double >>(duration) ;
162122
163123 std::string ellapsedTime;
164124 if (hours.count () > 0 )
165125 ellapsedTime += std::to_string (hours.count ()) + " h " ;
166126 if (minutes.count () > 0 )
167127 ellapsedTime += std::to_string (minutes.count ()) + " m " ;
168- return (ellapsedTime + std::to_string (seconds) + " s " );
128+ std::string secondsStr{std::to_string (seconds.count ())};
129+ return (ellapsedTime + secondsStr.substr (0 , secondsStr.length () - 3 ) + " s " );
169130}
0 commit comments