mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-04 09:45:00 +00:00
finally, maintain a global list of timer groups, allowing us to
implement TimerGroup::printAll, which prints and resets all active timers. llvm-svn: 99876
This commit is contained in:
parent
ea827a1632
commit
966ab1ec5e
@ -164,12 +164,12 @@ class TimerGroup {
|
||||
std::string Name;
|
||||
Timer *FirstTimer; // First timer in the group.
|
||||
std::vector<std::pair<TimeRecord, std::string> > TimersToPrint;
|
||||
|
||||
TimerGroup **Prev, *Next; // Doubly linked list of TimerGroup's.
|
||||
TimerGroup(const TimerGroup &TG); // DO NOT IMPLEMENT
|
||||
void operator=(const TimerGroup &TG); // DO NOT IMPLEMENT
|
||||
public:
|
||||
explicit TimerGroup(const std::string &name = "")
|
||||
: Name(name), FirstTimer(0) {}
|
||||
|
||||
explicit TimerGroup(const std::string &name);
|
||||
~TimerGroup();
|
||||
|
||||
void setName(const std::string &name) { Name = name; }
|
||||
@ -177,6 +177,9 @@ public:
|
||||
/// print - Print any started timers in this group and zero them.
|
||||
void print(raw_ostream &OS);
|
||||
|
||||
/// printAll - This static method prints all timers and clears them all out.
|
||||
static void printAll(raw_ostream &OS);
|
||||
|
||||
private:
|
||||
friend class Timer;
|
||||
void addTimer(Timer &T);
|
||||
|
@ -239,11 +239,33 @@ NamedRegionTimer::NamedRegionTimer(const std::string &Name,
|
||||
// TimerGroup Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// TimerGroupList - This is the global list of TimerGroups, maintained by the
|
||||
/// TimerGroup ctor/dtor and is protected by the TimerLock lock.
|
||||
static TimerGroup *TimerGroupList = 0;
|
||||
|
||||
TimerGroup::TimerGroup(const std::string &name)
|
||||
: Name(name), FirstTimer(0) {
|
||||
|
||||
// Add the group to TimerGroupList.
|
||||
sys::SmartScopedLock<true> L(*TimerLock);
|
||||
if (TimerGroupList)
|
||||
TimerGroupList->Prev = &Next;
|
||||
Next = TimerGroupList;
|
||||
Prev = &TimerGroupList;
|
||||
TimerGroupList = this;
|
||||
}
|
||||
|
||||
TimerGroup::~TimerGroup() {
|
||||
// If the timer group is destroyed before the timers it owns, accumulate and
|
||||
// print the timing data.
|
||||
while (FirstTimer != 0)
|
||||
removeTimer(*FirstTimer);
|
||||
|
||||
// Remove the group from the TimerGroupList.
|
||||
sys::SmartScopedLock<true> L(*TimerLock);
|
||||
*Prev = Next;
|
||||
if (Next)
|
||||
Next->Prev = Prev;
|
||||
}
|
||||
|
||||
|
||||
@ -352,3 +374,11 @@ void TimerGroup::print(raw_ostream &OS) {
|
||||
if (!TimersToPrint.empty())
|
||||
PrintQueuedTimers(OS);
|
||||
}
|
||||
|
||||
/// printAll - This static method prints all timers and clears them all out.
|
||||
void TimerGroup::printAll(raw_ostream &OS) {
|
||||
sys::SmartScopedLock<true> L(*TimerLock);
|
||||
|
||||
for (TimerGroup *TG = TimerGroupList; TG; TG = TG->Next)
|
||||
TG->print(OS);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user