forked from OSchip/llvm-project
Change default TimerGroup singleton to use magic statics
TimerGroup was showing up on a leak in valigrind, and used some pretty complex code to implement a singleton. This patch replaces the implementation with a vastly simpler one. Differential Revision: https://reviews.llvm.org/D28367 llvm-svn: 295370
This commit is contained in:
parent
d9c0e15f4b
commit
c4c31e2020
|
@ -72,22 +72,9 @@ std::unique_ptr<raw_fd_ostream> llvm::CreateInfoOutputFile() {
|
||||||
return llvm::make_unique<raw_fd_ostream>(2, false); // stderr.
|
return llvm::make_unique<raw_fd_ostream>(2, false); // stderr.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static TimerGroup *DefaultTimerGroup = nullptr;
|
|
||||||
static TimerGroup *getDefaultTimerGroup() {
|
static TimerGroup *getDefaultTimerGroup() {
|
||||||
TimerGroup *tmp = DefaultTimerGroup;
|
static TimerGroup DefaultTimerGroup("misc", "Miscellaneous Ungrouped Timers");
|
||||||
sys::MemoryFence();
|
return &DefaultTimerGroup;
|
||||||
if (tmp) return tmp;
|
|
||||||
|
|
||||||
sys::SmartScopedLock<true> Lock(*TimerLock);
|
|
||||||
tmp = DefaultTimerGroup;
|
|
||||||
if (!tmp) {
|
|
||||||
tmp = new TimerGroup("misc", "Miscellaneous Ungrouped Timers");
|
|
||||||
sys::MemoryFence();
|
|
||||||
DefaultTimerGroup = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -309,7 +296,7 @@ void TimerGroup::PrintQueuedTimers(raw_ostream &OS) {
|
||||||
// If this is not an collection of ungrouped times, print the total time.
|
// If this is not an collection of ungrouped times, print the total time.
|
||||||
// Ungrouped timers don't really make sense to add up. We still print the
|
// Ungrouped timers don't really make sense to add up. We still print the
|
||||||
// TOTAL line to make the percentages make sense.
|
// TOTAL line to make the percentages make sense.
|
||||||
if (this != DefaultTimerGroup)
|
if (this != getDefaultTimerGroup())
|
||||||
OS << format(" Total Execution Time: %5.4f seconds (%5.4f wall clock)\n",
|
OS << format(" Total Execution Time: %5.4f seconds (%5.4f wall clock)\n",
|
||||||
Total.getProcessTime(), Total.getWallTime());
|
Total.getProcessTime(), Total.getWallTime());
|
||||||
OS << '\n';
|
OS << '\n';
|
||||||
|
|
Loading…
Reference in New Issue