Skip to content

Commit fff4f52

Browse files
authored
fixed #8437 - got rid of static global TimerResults instance (danmar#8120)
1 parent e1aa030 commit fff4f52

24 files changed

+90
-97
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ cli/stacktrace.o: cli/stacktrace.cpp cli/stacktrace.h lib/config.h lib/utils.h
718718
cli/threadexecutor.o: cli/threadexecutor.cpp cli/executor.h cli/threadexecutor.h lib/addoninfo.h lib/check.h lib/checkers.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/filesettings.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
719719
$(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/threadexecutor.cpp
720720

721-
test/fixture.o: test/fixture.cpp 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/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/xml.h test/fixture.h test/helpers.h test/options.h test/redirect.h
721+
test/fixture.o: test/fixture.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/check.h lib/checkers.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/xml.h test/fixture.h test/helpers.h test/options.h test/redirect.h
722722
$(CXX) ${INCLUDE_FOR_TEST} ${CFLAGS_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/fixture.cpp
723723

724724
test/helpers.o: test/helpers.cpp cli/filelister.h externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/checkers.h lib/config.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/xml.h test/helpers.h

cli/cppcheckexecutor.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ bool CppCheckExecutor::reportUnmatchedSuppressions(const Settings &settings, con
382382
int CppCheckExecutor::check_internal(const Settings& settings, Suppressions& supprs) const
383383
{
384384
StdLogger stdLogger(settings);
385+
TimerResults timerResults;
385386

386387
if (settings.reportProgress >= 0)
387388
stdLogger.resetLatestProgressOutputTime();
@@ -402,23 +403,23 @@ int CppCheckExecutor::check_internal(const Settings& settings, Suppressions& sup
402403
if (!settings.checkersReportFilename.empty())
403404
std::remove(settings.checkersReportFilename.c_str());
404405

405-
CppCheck cppcheck(settings, supprs, stdLogger, true, executeCommand);
406+
CppCheck cppcheck(settings, supprs, stdLogger, &timerResults, true, executeCommand);
406407

407408
unsigned int returnValue = 0;
408409
if (settings.useSingleJob()) {
409410
// Single process
410-
SingleExecutor executor(cppcheck, mFiles, mFileSettings, settings, supprs, stdLogger);
411+
SingleExecutor executor(cppcheck, mFiles, mFileSettings, settings, supprs, stdLogger, &timerResults);
411412
returnValue = executor.check();
412413
} else {
413414
#if defined(HAS_THREADING_MODEL_THREAD)
414415
if (settings.executor == Settings::ExecutorType::Thread) {
415-
ThreadExecutor executor(mFiles, mFileSettings, settings, supprs, stdLogger, CppCheckExecutor::executeCommand);
416+
ThreadExecutor executor(mFiles, mFileSettings, settings, supprs, stdLogger, &timerResults, CppCheckExecutor::executeCommand);
416417
returnValue = executor.check();
417418
}
418419
#endif
419420
#if defined(HAS_THREADING_MODEL_FORK)
420421
if (settings.executor == Settings::ExecutorType::Process) {
421-
ProcessExecutor executor(mFiles, mFileSettings, settings, supprs, stdLogger, CppCheckExecutor::executeCommand);
422+
ProcessExecutor executor(mFiles, mFileSettings, settings, supprs, stdLogger, &timerResults, CppCheckExecutor::executeCommand);
422423
returnValue = executor.check();
423424
}
424425
#endif

cli/executor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030

3131
struct FileSettings;
3232

33-
Executor::Executor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger)
34-
: mFiles(files), mFileSettings(fileSettings), mSettings(settings), mSuppressions(suppressions), mErrorLogger(errorLogger)
33+
Executor::Executor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults)
34+
: mFiles(files), mFileSettings(fileSettings), mSettings(settings), mSuppressions(suppressions), mErrorLogger(errorLogger), mTimerResults(timerResults)
3535
{
3636
// the two inputs may only be used exclusively
3737
assert(!(!files.empty() && !fileSettings.empty()));

cli/executor.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ErrorMessage;
3131
struct Suppressions;
3232
struct FileSettings;
3333
class FileWithDetails;
34+
class TimerResults;
3435

3536
/// @addtogroup CLI
3637
/// @{
@@ -41,7 +42,7 @@ class FileWithDetails;
4142
*/
4243
class Executor {
4344
public:
44-
Executor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger);
45+
Executor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults);
4546
virtual ~Executor() = default;
4647

4748
Executor(const Executor &) = delete;
@@ -72,6 +73,7 @@ class Executor {
7273
const Settings &mSettings;
7374
Suppressions &mSuppressions;
7475
ErrorLogger &mErrorLogger;
76+
TimerResults *mTimerResults;
7577

7678
private:
7779
std::mutex mErrorListSync;

cli/processexecutor.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ enum class Color : std::uint8_t;
6868
using std::memset;
6969

7070

71-
ProcessExecutor::ProcessExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, CppCheck::ExecuteCmdFn executeCommand)
72-
: Executor(files, fileSettings, settings, suppressions, errorLogger)
71+
ProcessExecutor::ProcessExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults, CppCheck::ExecuteCmdFn executeCommand)
72+
: Executor(files, fileSettings, settings, suppressions, errorLogger, timerResults)
7373
, mExecuteCommand(std::move(executeCommand))
7474
{
7575
assert(mSettings.jobs > 1);
@@ -344,7 +344,7 @@ unsigned int ProcessExecutor::check()
344344
close(pipes[0]);
345345

346346
PipeWriter pipewriter(pipes[1]);
347-
CppCheck fileChecker(mSettings, mSuppressions, pipewriter, false, mExecuteCommand);
347+
CppCheck fileChecker(mSettings, mSuppressions, pipewriter, mTimerResults, false, mExecuteCommand);
348348
unsigned int resultOfCheck = 0;
349349

350350
if (iFileSettings != mFileSettings.end()) {
@@ -450,8 +450,8 @@ unsigned int ProcessExecutor::check()
450450
}
451451

452452
// TODO: wee need to get the timing information from the subprocess
453-
if (mSettings.showtime == ShowTime::SUMMARY || mSettings.showtime == ShowTime::TOP5_SUMMARY)
454-
CppCheck::printTimerResults(mSettings.showtime);
453+
if (mTimerResults && (mSettings.showtime == ShowTime::SUMMARY || mSettings.showtime == ShowTime::TOP5_SUMMARY))
454+
mTimerResults->showResults(mSettings.showtime);
455455

456456
return result;
457457
}

cli/processexecutor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class ErrorLogger;
3535
struct Suppressions;
3636
struct FileSettings;
3737
class FileWithDetails;
38+
class TimerResults;
3839

3940
/// @addtogroup CLI
4041
/// @{
@@ -45,7 +46,7 @@ class FileWithDetails;
4546
*/
4647
class ProcessExecutor : public Executor {
4748
public:
48-
ProcessExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, CppCheck::ExecuteCmdFn executeCommand);
49+
ProcessExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults, CppCheck::ExecuteCmdFn executeCommand);
4950
ProcessExecutor(const ProcessExecutor &) = delete;
5051
ProcessExecutor& operator=(const ProcessExecutor &) = delete;
5152

cli/singleexecutor.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030

3131
class ErrorLogger;
3232

33-
SingleExecutor::SingleExecutor(CppCheck &cppcheck, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger)
34-
: Executor(files, fileSettings, settings, suppressions, errorLogger)
33+
SingleExecutor::SingleExecutor(CppCheck &cppcheck, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults)
34+
: Executor(files, fileSettings, settings, suppressions, errorLogger, timerResults)
3535
, mCppcheck(cppcheck)
3636
{
3737
assert(mSettings.jobs == 1);
@@ -71,8 +71,8 @@ unsigned int SingleExecutor::check()
7171
if (mCppcheck.analyseWholeProgram())
7272
result++;
7373

74-
if (mSettings.showtime == ShowTime::SUMMARY || mSettings.showtime == ShowTime::TOP5_SUMMARY)
75-
CppCheck::printTimerResults(mSettings.showtime);
74+
if (mTimerResults && (mSettings.showtime == ShowTime::SUMMARY || mSettings.showtime == ShowTime::TOP5_SUMMARY))
75+
mTimerResults->showResults(mSettings.showtime);
7676

7777
return result;
7878
}

cli/singleexecutor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ class CppCheck;
2929
struct Suppressions;
3030
struct FileSettings;
3131
class FileWithDetails;
32+
class TimerResults;
3233

3334
class SingleExecutor : public Executor
3435
{
3536
public:
36-
SingleExecutor(CppCheck &cppcheck, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger);
37+
SingleExecutor(CppCheck &cppcheck, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults);
3738
SingleExecutor(const SingleExecutor &) = delete;
3839
SingleExecutor& operator=(const SingleExecutor &) = delete;
3940

cli/threadexecutor.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040
#include <utility>
4141
#include <vector>
4242

43-
ThreadExecutor::ThreadExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, CppCheck::ExecuteCmdFn executeCommand)
44-
: Executor(files, fileSettings, settings, suppressions, errorLogger)
43+
ThreadExecutor::ThreadExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults, CppCheck::ExecuteCmdFn executeCommand)
44+
: Executor(files, fileSettings, settings, suppressions, errorLogger, timerResults)
4545
, mExecuteCommand(std::move(executeCommand))
4646
{
4747
assert(mSettings.jobs > 1);
@@ -87,8 +87,8 @@ class SyncLogForwarder : public ErrorLogger
8787
class ThreadData
8888
{
8989
public:
90-
ThreadData(ThreadExecutor &threadExecutor, ErrorLogger &errorLogger, const Settings &settings, Suppressions& supprs, const std::list<FileWithDetails> &files, const std::list<FileSettings> &fileSettings, CppCheck::ExecuteCmdFn executeCommand)
91-
: mFiles(files), mFileSettings(fileSettings), mSettings(settings), mSuppressions(supprs), mExecuteCommand(std::move(executeCommand)), logForwarder(threadExecutor, errorLogger)
90+
ThreadData(ThreadExecutor &threadExecutor, ErrorLogger &errorLogger, TimerResults *timerResults, const Settings &settings, Suppressions& supprs, const std::list<FileWithDetails> &files, const std::list<FileSettings> &fileSettings, CppCheck::ExecuteCmdFn executeCommand)
91+
: mFiles(files), mFileSettings(fileSettings), mTimerResults(timerResults), mSettings(settings), mSuppressions(supprs), mExecuteCommand(std::move(executeCommand)), mLogForwarder(threadExecutor, errorLogger)
9292
{
9393
mItNextFile = mFiles.begin();
9494
mItNextFileSettings = mFileSettings.begin();
@@ -119,8 +119,8 @@ class ThreadData
119119
return false;
120120
}
121121

122-
unsigned int check(ErrorLogger &errorLogger, const FileWithDetails *file, const FileSettings *fs) const {
123-
CppCheck fileChecker(mSettings, mSuppressions, errorLogger, false, mExecuteCommand);
122+
unsigned int check(const FileWithDetails *file, const FileSettings *fs) {
123+
CppCheck fileChecker(mSettings, mSuppressions, mLogForwarder, mTimerResults, false, mExecuteCommand);
124124

125125
unsigned int result;
126126
if (fs) {
@@ -155,7 +155,7 @@ class ThreadData
155155
mProcessedSize += fileSize;
156156
mProcessedFiles++;
157157
if (!mSettings.quiet)
158-
logForwarder.reportStatus(mProcessedFiles, mTotalFiles, mProcessedSize, mTotalFileSize);
158+
mLogForwarder.reportStatus(mProcessedFiles, mTotalFiles, mProcessedSize, mTotalFileSize);
159159
}
160160

161161
private:
@@ -170,12 +170,12 @@ class ThreadData
170170
std::size_t mTotalFileSize{};
171171

172172
std::mutex mFileSync;
173+
TimerResults *mTimerResults;
173174
const Settings &mSettings;
174175
Suppressions &mSuppressions;
175176
CppCheck::ExecuteCmdFn mExecuteCommand;
176177

177-
public:
178-
SyncLogForwarder logForwarder;
178+
SyncLogForwarder mLogForwarder;
179179
};
180180

181181
static unsigned int STDCALL threadProc(ThreadData *data)
@@ -187,7 +187,7 @@ static unsigned int STDCALL threadProc(ThreadData *data)
187187
std::size_t fileSize;
188188

189189
while (data->next(file, fs, fileSize)) {
190-
result += data->check(data->logForwarder, file, fs);
190+
result += data->check(file, fs);
191191

192192
data->status(fileSize);
193193
}
@@ -200,7 +200,7 @@ unsigned int ThreadExecutor::check()
200200
std::vector<std::future<unsigned int>> threadFutures;
201201
threadFutures.reserve(mSettings.jobs);
202202

203-
ThreadData data(*this, mErrorLogger, mSettings, mSuppressions, mFiles, mFileSettings, mExecuteCommand);
203+
ThreadData data(*this, mErrorLogger, mTimerResults, mSettings, mSuppressions, mFiles, mFileSettings, mExecuteCommand);
204204

205205
for (unsigned int i = 0; i < mSettings.jobs; ++i) {
206206
try {
@@ -216,8 +216,8 @@ unsigned int ThreadExecutor::check()
216216
return v + f.get();
217217
});
218218

219-
if (mSettings.showtime == ShowTime::SUMMARY || mSettings.showtime == ShowTime::TOP5_SUMMARY)
220-
CppCheck::printTimerResults(mSettings.showtime);
219+
if (mTimerResults && (mSettings.showtime == ShowTime::SUMMARY || mSettings.showtime == ShowTime::TOP5_SUMMARY))
220+
mTimerResults->showResults(mSettings.showtime);
221221

222222
return result;
223223
}

cli/threadexecutor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ErrorLogger;
3333
struct Suppressions;
3434
struct FileSettings;
3535
class FileWithDetails;
36+
class TimerResults;
3637

3738
/// @addtogroup CLI
3839
/// @{
@@ -45,7 +46,7 @@ class ThreadExecutor : public Executor {
4546
friend class SyncLogForwarder;
4647

4748
public:
48-
ThreadExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, CppCheck::ExecuteCmdFn executeCommand);
49+
ThreadExecutor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger, TimerResults* timerResults, CppCheck::ExecuteCmdFn executeCommand);
4950
ThreadExecutor(const ThreadExecutor &) = delete;
5051
ThreadExecutor& operator=(const ThreadExecutor &) = delete;
5152

0 commit comments

Comments
 (0)