Make LLVM timer reprintable: that is, make more than one print action on the same timer feasible

Currently, each LLVM timer can be only printed once, as the act of
printing clears the timer.

Moreover, the current printing mechanism implicitly assumes that the
timer is stopped -- and prints zero otherwise.
This patch relaxes this assumption and makes printing statistics
multiple time a possibility.

Differential Revision: https://reviews.llvm.org/D43136

llvm-svn: 324788
This commit is contained in:
George Karpenkov 2018-02-10 00:38:21 +00:00
parent 7c35687d1c
commit 8a94c746f9

View File

@ -336,10 +336,14 @@ void TimerGroup::prepareToPrintList() {
// reset them.
for (Timer *T = FirstTimer; T; T = T->Next) {
if (!T->hasTriggered()) continue;
bool WasRunning = T->isRunning();
if (WasRunning)
T->stopTimer();
TimersToPrint.emplace_back(T->Time, T->Name, T->Description);
// Clear out the time.
T->clear();
if (WasRunning)
T->startTimer();
}
}
@ -381,6 +385,10 @@ const char *TimerGroup::printJSONValues(raw_ostream &OS, const char *delim) {
printJSONValue(OS, R, ".user", T.getUserTime());
OS << delim;
printJSONValue(OS, R, ".sys", T.getSystemTime());
if (T.getMemUsed()) {
OS << delim;
printJSONValue(OS, R, ".sys", T.getMemUsed());
}
}
TimersToPrint.clear();
return delim;