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:
Erich Keane 2017-02-16 20:19:49 +00:00
parent d9c0e15f4b
commit c4c31e2020
1 changed files with 3 additions and 16 deletions

View File

@ -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';