From 560b244c9bb2087693f9cf14826a4ecbf6c0f8bf Mon Sep 17 00:00:00 2001 From: George Karpenkov Date: Sat, 10 Feb 2018 00:38:21 +0000 Subject: 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 --- llvm/lib/Support/Timer.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'llvm/lib/Support/Timer.cpp') diff --git a/llvm/lib/Support/Timer.cpp b/llvm/lib/Support/Timer.cpp index 0c85faecca8..bfe19be1f6d 100644 --- a/llvm/lib/Support/Timer.cpp +++ b/llvm/lib/Support/Timer.cpp @@ -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; -- cgit v1.2.3