Skip to content

Commit 4770995

Browse files
committed
Add global timer
1 parent 41b0037 commit 4770995

4 files changed

Lines changed: 57 additions & 4 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ frontend/frontend.o: frontend/frontend.cpp frontend/frontend.h lib/addoninfo.h l
683683
cli/cmdlineparser.o: cli/cmdlineparser.cpp cli/cmdlinelogger.h cli/cmdlineparser.h cli/filelister.h externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/check.h lib/checkers.h lib/color.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/regex.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h lib/xml.h
684684
$(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/cmdlineparser.cpp
685685

686-
cli/cppcheckexecutor.o: cli/cppcheckexecutor.cpp cli/cmdlinelogger.h cli/cmdlineparser.h cli/cppcheckexecutor.h cli/executor.h cli/processexecutor.h cli/sehwrapper.h cli/signalhandler.h cli/singleexecutor.h cli/threadexecutor.h externals/picojson/picojson.h lib/addoninfo.h lib/analyzerinfo.h lib/check.h lib/checkers.h lib/checkersreport.h lib/color.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/json.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h
686+
cli/cppcheckexecutor.o: cli/cppcheckexecutor.cpp cli/cmdlinelogger.h cli/cmdlineparser.h cli/cppcheckexecutor.h cli/executor.h cli/processexecutor.h cli/sehwrapper.h cli/signalhandler.h cli/singleexecutor.h cli/threadexecutor.h externals/picojson/picojson.h lib/addoninfo.h lib/analyzerinfo.h lib/check.h lib/checkers.h lib/checkersreport.h lib/color.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/json.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h
687687
$(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/cppcheckexecutor.cpp
688688

689689
cli/executor.o: cli/executor.cpp cli/executor.h lib/addoninfo.h lib/checkers.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h

cli/cppcheckexecutor.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "settings.h"
3838
#include "singleexecutor.h"
3939
#include "suppressions.h"
40+
#include "timer.h"
4041
#include "utils.h"
4142

4243
#if defined(HAS_THREADING_MODEL_THREAD)
@@ -408,6 +409,7 @@ namespace {
408409

409410
int CppCheckExecutor::check(int argc, const char* const argv[])
410411
{
412+
WholeProgramTimer timer;
411413
Settings settings;
412414
CmdLineLoggerStd logger;
413415
Suppressions supprs;
@@ -419,6 +421,9 @@ int CppCheckExecutor::check(int argc, const char* const argv[])
419421
return EXIT_SUCCESS;
420422
}
421423

424+
if (settings.showtime == SHOWTIME_MODES::SHOWTIME_NONE)
425+
timer.cancell();
426+
422427
settings.loadSummaries();
423428

424429
mFiles = parser.getFiles();

lib/timer.cpp

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,6 @@ void TimerResults::showResults(SHOWTIME_MODES mode) const
8383
}
8484
++ordinal;
8585
}
86-
87-
const double secOverall = overallData.seconds();
88-
std::cout << "Overall time: " << secOverall << "s" << std::endl;
8986
}
9087

9188
void TimerResults::addResults(const std::string& str, std::clock_t clocks)
@@ -142,3 +139,37 @@ void Timer::stop()
142139

143140
mStopped = true;
144141
}
142+
143+
WholeProgramTimer::~WholeProgramTimer()
144+
{
145+
stop();
146+
}
147+
148+
void WholeProgramTimer::stop()
149+
{
150+
if (mCancelled)
151+
return;
152+
const auto end = std::chrono::high_resolution_clock::now();
153+
auto diff = std::chrono::duration_cast<std::chrono::microseconds>(end - mStart);
154+
155+
// Extract hours
156+
auto hours = std::chrono::duration_cast<std::chrono::hours>(diff);
157+
diff -= hours; // Subtract the extracted hours
158+
159+
// Extract minutes
160+
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(diff);
161+
diff -= minutes; // Subtract the extracted minutes
162+
163+
// Extract seconds
164+
auto seconds = static_cast<double>(diff.count()) / std::chrono::microseconds::period::den;
165+
166+
std::string ellapsedTime;
167+
if (hours.count() > 0)
168+
ellapsedTime += std::to_string(hours.count()) + "h ";
169+
if (minutes.count() > 0)
170+
ellapsedTime += std::to_string(minutes.count()) + "m ";
171+
ellapsedTime += std::to_string(seconds) + "s ";
172+
173+
std::lock_guard<std::mutex> l(stdCoutLock);
174+
std::cout << "Overall time: " << ellapsedTime << std::endl;
175+
}

lib/timer.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,22 @@ class CPPCHECKLIB Timer {
9393
const SHOWTIME_MODES mShowTimeMode = SHOWTIME_MODES::SHOWTIME_FILE_TOTAL;
9494
bool mStopped{};
9595
};
96+
97+
class CPPCHECKLIB WholeProgramTimer {
98+
public:
99+
WholeProgramTimer()
100+
: mStart(std::chrono::high_resolution_clock::now())
101+
{}
102+
~WholeProgramTimer();
103+
104+
void stop();
105+
106+
void cancell() {
107+
mCancelled = true;
108+
}
109+
private:
110+
std::chrono::system_clock::time_point mStart;
111+
bool mCancelled{false};
112+
};
96113
//---------------------------------------------------------------------------
97114
#endif // timerH

0 commit comments

Comments
 (0)