| Index: src/IceGlobalContext.cpp
|
| diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp
|
| index 25e1cc6027d11c20984b3072aded9345504d5113..b61873d6a3f8a41600c1763509aaf8e6def73608 100644
|
| --- a/src/IceGlobalContext.cpp
|
| +++ b/src/IceGlobalContext.cpp
|
| @@ -887,32 +887,38 @@ TimerStackIdT GlobalContext::newTimerStackID(const std::string &Name) {
|
|
|
| TimerIdT GlobalContext::getTimerID(TimerStackIdT StackID,
|
| const std::string &Name) {
|
| - auto Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| + auto *Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| assert(StackID < Timers->size());
|
| return Timers->at(StackID).getTimerID(Name);
|
| }
|
|
|
| void GlobalContext::pushTimer(TimerIdT ID, TimerStackIdT StackID) {
|
| - auto Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| + auto *Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| assert(StackID < Timers->size());
|
| Timers->at(StackID).push(ID);
|
| }
|
|
|
| void GlobalContext::popTimer(TimerIdT ID, TimerStackIdT StackID) {
|
| - auto Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| + auto *Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| assert(StackID < Timers->size());
|
| Timers->at(StackID).pop(ID);
|
| }
|
|
|
| void GlobalContext::resetTimer(TimerStackIdT StackID) {
|
| - auto Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| + auto *Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| assert(StackID < Timers->size());
|
| Timers->at(StackID).reset();
|
| }
|
|
|
| +std::string GlobalContext::getTimerName(TimerStackIdT StackID) {
|
| + auto *Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| + assert(StackID < Timers->size());
|
| + return Timers->at(StackID).getName();
|
| +}
|
| +
|
| void GlobalContext::setTimerName(TimerStackIdT StackID,
|
| const std::string &NewName) {
|
| - auto Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| + auto *Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| assert(StackID < Timers->size());
|
| Timers->at(StackID).setName(NewName);
|
| }
|
| @@ -962,10 +968,6 @@ void GlobalContext::dumpStats(const Cfg *Func) {
|
| }
|
| }
|
|
|
| -void GlobalContext::mergeTimersFromTLS() {
|
| - getTimers()->mergeFrom(ICE_TLS_GET_FIELD(TLS)->Timers);
|
| -}
|
| -
|
| void GlobalContext::dumpTimers(TimerStackIdT StackID, bool DumpCumulative) {
|
| if (!BuildDefs::timers())
|
| return;
|
| @@ -975,6 +977,25 @@ void GlobalContext::dumpTimers(TimerStackIdT StackID, bool DumpCumulative) {
|
| Timers->at(StackID).dump(getStrDump(), DumpCumulative);
|
| }
|
|
|
| +void GlobalContext::dumpLocalTimers(const std::string &TimerNameOverride,
|
| + TimerStackIdT StackID,
|
| + bool DumpCumulative) {
|
| + if (!BuildDefs::timers())
|
| + return;
|
| + auto *Timers = &ICE_TLS_GET_FIELD(TLS)->Timers;
|
| + assert(Timers->size() > StackID);
|
| + // Temporarily override the thread-local timer name with the given name.
|
| + // Don't do it permanently because the final timer merge at the end expects
|
| + // the thread-local timer names to be the same as the global timer name.
|
| + auto OrigName = getTimerName(StackID);
|
| + setTimerName(StackID, TimerNameOverride);
|
| + {
|
| + OstreamLocker _(this);
|
| + Timers->at(StackID).dump(getStrDump(), DumpCumulative);
|
| + }
|
| + setTimerName(StackID, OrigName);
|
| +}
|
| +
|
| LockedPtr<StringPool>
|
| GlobalStringPoolTraits::getStrings(const GlobalContext *PoolOwner) {
|
| return PoolOwner->getStrings();
|
|
|