diff options
Diffstat (limited to 'comphelper/source/misc/traceevent.cxx')
-rw-r--r-- | comphelper/source/misc/traceevent.cxx | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/comphelper/source/misc/traceevent.cxx b/comphelper/source/misc/traceevent.cxx index 793fea6cdb0e..8b1a9c09427a 100644 --- a/comphelper/source/misc/traceevent.cxx +++ b/comphelper/source/misc/traceevent.cxx @@ -24,8 +24,13 @@ std::atomic<bool> TraceEvent::s_bRecording = (getenv("TRACE_EVENT_RECORDING") != #else std::atomic<bool> TraceEvent::s_bRecording = false; #endif + +std::size_t TraceEvent::s_nBufferSize = 0; +void (*TraceEvent::s_pBufferFullCallback)() = nullptr; + int AsyncEvent::s_nIdCounter = 0; -int ProfileZone::s_nNesting = 0; + +static thread_local int nProfileZoneNesting = 0; // Level of Nested Profile Zones namespace { @@ -38,6 +43,12 @@ void TraceEvent::addRecording(const OUString& sObject) osl::MutexGuard aGuard(g_aMutex); g_aRecording.emplace_back(sObject); + + if (s_nBufferSize > 0 && g_aRecording.size() >= s_nBufferSize) + { + if (s_pBufferFullCallback != nullptr) + (*s_pBufferFullCallback)(); + } } void TraceEvent::addInstantEvent(const char* sName, const std::map<OUString, OUString>& args) @@ -72,6 +83,12 @@ void TraceEvent::startRecording() void TraceEvent::stopRecording() { s_bRecording = false; } +void TraceEvent::setBufferSizeAndCallback(std::size_t bufferSize, void (*bufferFullCallback)()) +{ + s_nBufferSize = bufferSize; + s_pBufferFullCallback = bufferFullCallback; +} + std::vector<OUString> TraceEvent::getEventVectorAndClear() { bool bRecording; @@ -118,6 +135,10 @@ void ProfileZone::addRecording() + OUString::number(osl_getThreadIdentifier(nullptr)) + "},"); } +int ProfileZone::getNestingLevel() { return nProfileZoneNesting; } + +void ProfileZone::setNestingLevel(int nNestingLevel) { nProfileZoneNesting = nNestingLevel; } + } // namespace comphelper /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |