From e51eef3dcde70758999e3ba73932dc94f66778ad Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Tue, 19 Jun 2018 18:52:45 +0200 Subject: [PATCH] Process memory events with callstack. --- server/TracyWorker.cpp | 27 +++++++++++++++++++++++++++ server/TracyWorker.hpp | 5 +++++ 2 files changed, 32 insertions(+) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 6fd2d90b..a26513a0 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -1447,6 +1447,15 @@ void Worker::Process( const QueueItem& ev ) case QueueType::MemFree: ProcessMemFree( ev.memFree ); break; + case QueueType::MemAllocCallstack: + ProcessMemAllocCallstack( ev.memAlloc ); + break; + case QueueType::MemFreeCallstack: + ProcessMemFreeCallstack( ev.memFree ); + break; + case QueueType::CallstackMemory: + ProcessCallstackMemory( ev.callstackMemory ); + break; case QueueType::Terminate: m_terminate = true; break; @@ -1966,6 +1975,24 @@ void Worker::ProcessMemFree( const QueueMemFree& ev ) MemAllocChanged( time ); } +void Worker::ProcessMemAllocCallstack( const QueueMemAlloc& ev ) +{ + m_lastMemActionCallstack = m_data.memory.data.size(); + ProcessMemAlloc( ev ); +} + +void Worker::ProcessMemFreeCallstack( const QueueMemFree& ev ) +{ + ProcessMemFree( ev ); + m_lastMemActionCallstack = m_data.memory.frees.back(); +} + +void Worker::ProcessCallstackMemory( const QueueCallstackMemory& ev ) +{ + auto& mem = m_data.memory.data[m_lastMemActionCallstack]; + mem.callstack = ev.ptr; +} + void Worker::MemAllocChanged( int64_t time ) { const auto val = (double)m_data.memory.usage; diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index d3f55046..b6c8cd00 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -211,6 +211,9 @@ private: tracy_force_inline void ProcessGpuResync( const QueueGpuResync& ev ); tracy_force_inline void ProcessMemAlloc( const QueueMemAlloc& ev ); tracy_force_inline void ProcessMemFree( const QueueMemFree& ev ); + tracy_force_inline void ProcessMemAllocCallstack( const QueueMemAlloc& ev ); + tracy_force_inline void ProcessMemFreeCallstack( const QueueMemFree& ev ); + tracy_force_inline void ProcessCallstackMemory( const QueueCallstackMemory& ev ); tracy_force_inline void CheckSourceLocation( uint64_t ptr ); void NewSourceLocation( uint64_t ptr ); @@ -296,6 +299,8 @@ private: uint32_t m_pendingThreads; uint32_t m_pendingSourceLocation; + uint64_t m_lastMemActionCallstack; + Slab<64*1024*1024> m_slab; DataBlock m_data;