1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Extract common code.

This commit is contained in:
Bartosz Taudul 2018-06-20 23:29:44 +02:00
parent 2a618c90d5
commit 8c46ad81d5

View File

@ -203,21 +203,7 @@ public:
const auto thread = GetThreadHandle(); const auto thread = GetThreadHandle();
s_profiler.m_serialLock.lock(); s_profiler.m_serialLock.lock();
auto item = s_profiler.m_serialQueue.push_next(); SendMemAlloc( QueueType::MemAlloc, thread, ptr, size );
MemWrite( &item->hdr.type, QueueType::MemAlloc );
MemWrite( &item->memAlloc.time, GetTime() );
MemWrite( &item->memAlloc.thread, thread );
MemWrite( &item->memAlloc.ptr, (uint64_t)ptr );
if( sizeof( size ) == 4 )
{
memcpy( &item->memAlloc.size, &size, 4 );
memset( &item->memAlloc.size + 4, 0, 2 );
}
else
{
assert( sizeof( size ) == 8 );
memcpy( &item->memAlloc.size, &size, 6 );
}
s_profiler.m_serialLock.unlock(); s_profiler.m_serialLock.unlock();
} }
@ -226,11 +212,7 @@ public:
const auto thread = GetThreadHandle(); const auto thread = GetThreadHandle();
s_profiler.m_serialLock.lock(); s_profiler.m_serialLock.lock();
auto item = s_profiler.m_serialQueue.push_next(); SendMemFree( QueueType::MemFree, thread, ptr );
MemWrite( &item->hdr.type, QueueType::MemFree );
MemWrite( &item->memFree.time, GetTime() );
MemWrite( &item->memFree.thread, thread );
MemWrite( &item->memFree.ptr, (uint64_t)ptr );
s_profiler.m_serialLock.unlock(); s_profiler.m_serialLock.unlock();
} }
@ -239,21 +221,7 @@ public:
const auto thread = GetThreadHandle(); const auto thread = GetThreadHandle();
s_profiler.m_serialLock.lock(); s_profiler.m_serialLock.lock();
auto item = s_profiler.m_serialQueue.push_next(); SendMemAlloc( QueueType::MemAllocCallstack, thread, ptr, size );
MemWrite( &item->hdr.type, QueueType::MemAllocCallstack );
MemWrite( &item->memAlloc.time, GetTime() );
MemWrite( &item->memAlloc.thread, thread );
MemWrite( &item->memAlloc.ptr, (uint64_t)ptr );
if( sizeof( size ) == 4 )
{
memcpy( &item->memAlloc.size, &size, 4 );
memset( &item->memAlloc.size + 4, 0, 2 );
}
else
{
assert( sizeof( size ) == 8 );
memcpy( &item->memAlloc.size, &size, 6 );
}
SendCallstackMemory( depth ); SendCallstackMemory( depth );
s_profiler.m_serialLock.unlock(); s_profiler.m_serialLock.unlock();
} }
@ -263,11 +231,7 @@ public:
const auto thread = GetThreadHandle(); const auto thread = GetThreadHandle();
s_profiler.m_serialLock.lock(); s_profiler.m_serialLock.lock();
auto item = s_profiler.m_serialQueue.push_next(); SendMemFree( QueueType::MemFreeCallstack, thread, ptr );
MemWrite( &item->hdr.type, QueueType::MemFreeCallstack );
MemWrite( &item->memFree.time, GetTime() );
MemWrite( &item->memFree.thread, thread );
MemWrite( &item->memFree.ptr, (uint64_t)ptr );
SendCallstackMemory( depth ); SendCallstackMemory( depth );
s_profiler.m_serialLock.unlock(); s_profiler.m_serialLock.unlock();
} }
@ -308,6 +272,38 @@ private:
void CalibrateTimer(); void CalibrateTimer();
void CalibrateDelay(); void CalibrateDelay();
static tracy_force_inline void SendMemAlloc( QueueType type, const uint64_t thread, const void* ptr, size_t size )
{
assert( type == QueueType::MemAlloc || type == QueueType::MemAllocCallstack );
auto item = s_profiler.m_serialQueue.push_next();
MemWrite( &item->hdr.type, type );
MemWrite( &item->memAlloc.time, GetTime() );
MemWrite( &item->memAlloc.thread, thread );
MemWrite( &item->memAlloc.ptr, (uint64_t)ptr );
if( sizeof( size ) == 4 )
{
memcpy( &item->memAlloc.size, &size, 4 );
memset( &item->memAlloc.size + 4, 0, 2 );
}
else
{
assert( sizeof( size ) == 8 );
memcpy( &item->memAlloc.size, &size, 6 );
}
}
static tracy_force_inline void SendMemFree( QueueType type, const uint64_t thread, const void* ptr )
{
assert( type == QueueType::MemFree || type == QueueType::MemFreeCallstack );
auto item = s_profiler.m_serialQueue.push_next();
MemWrite( &item->hdr.type, type );
MemWrite( &item->memFree.time, GetTime() );
MemWrite( &item->memFree.thread, thread );
MemWrite( &item->memFree.ptr, (uint64_t)ptr );
}
double m_timerMul; double m_timerMul;
uint64_t m_resolution; uint64_t m_resolution;
uint64_t m_delay; uint64_t m_delay;