mirror of
https://github.com/wolfpld/tracy
synced 2025-05-01 13:13:53 +00:00
Use 32 bits to store lock id.
This makes queue item size 32 bytes. Queue operations can now be faster, because multiplication by 33 is replaced by shift by 5.
This commit is contained in:
parent
ec789d60e8
commit
1aaab3c5e4
@ -2,6 +2,7 @@
|
|||||||
#define __TRACYLOCK_HPP__
|
#define __TRACYLOCK_HPP__
|
||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
#include "../common/TracySystem.hpp"
|
#include "../common/TracySystem.hpp"
|
||||||
#include "TracyProfiler.hpp"
|
#include "TracyProfiler.hpp"
|
||||||
@ -9,7 +10,7 @@
|
|||||||
namespace tracy
|
namespace tracy
|
||||||
{
|
{
|
||||||
|
|
||||||
static std::atomic<uint64_t> s_lockCounter( 0 );
|
static std::atomic<uint32_t> s_lockCounter( 0 );
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class Lockable
|
class Lockable
|
||||||
@ -19,6 +20,7 @@ public:
|
|||||||
: m_id( s_lockCounter.fetch_add( 1, std::memory_order_relaxed ) )
|
: m_id( s_lockCounter.fetch_add( 1, std::memory_order_relaxed ) )
|
||||||
, m_lckloc( (uint64_t)srcloc )
|
, m_lckloc( (uint64_t)srcloc )
|
||||||
{
|
{
|
||||||
|
assert( m_id != std::numeric_limits<uint32_t>::max() );
|
||||||
}
|
}
|
||||||
|
|
||||||
Lockable( const Lockable& ) = delete;
|
Lockable( const Lockable& ) = delete;
|
||||||
@ -106,7 +108,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
T m_lockable;
|
T m_lockable;
|
||||||
uint64_t m_id;
|
uint32_t m_id;
|
||||||
uint64_t m_lckloc;
|
uint64_t m_lckloc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ struct QueueZoneName
|
|||||||
|
|
||||||
struct QueueLockWait
|
struct QueueLockWait
|
||||||
{
|
{
|
||||||
uint64_t id;
|
uint32_t id;
|
||||||
int64_t time;
|
int64_t time;
|
||||||
uint64_t thread;
|
uint64_t thread;
|
||||||
uint64_t lckloc; // ptr
|
uint64_t lckloc; // ptr
|
||||||
@ -86,21 +86,21 @@ struct QueueLockWait
|
|||||||
|
|
||||||
struct QueueLockObtain
|
struct QueueLockObtain
|
||||||
{
|
{
|
||||||
uint64_t id;
|
uint32_t id;
|
||||||
int64_t time;
|
int64_t time;
|
||||||
uint64_t thread;
|
uint64_t thread;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct QueueLockRelease
|
struct QueueLockRelease
|
||||||
{
|
{
|
||||||
uint64_t id;
|
uint32_t id;
|
||||||
int64_t time;
|
int64_t time;
|
||||||
uint64_t thread;
|
uint64_t thread;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct QueueLockMark
|
struct QueueLockMark
|
||||||
{
|
{
|
||||||
uint64_t id;
|
uint32_t id;
|
||||||
uint64_t thread;
|
uint64_t thread;
|
||||||
uint64_t srcloc; // ptr
|
uint64_t srcloc; // ptr
|
||||||
};
|
};
|
||||||
@ -176,6 +176,7 @@ static const size_t QueueDataSize[] = {
|
|||||||
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // plot name
|
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // plot name
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert( QueueItemSize == 32, "Queue item size not 32 bytes" );
|
||||||
static_assert( sizeof( QueueDataSize ) / sizeof( size_t ) == (uint8_t)QueueType::NUM_TYPES, "QueueDataSize mismatch" );
|
static_assert( sizeof( QueueDataSize ) / sizeof( size_t ) == (uint8_t)QueueType::NUM_TYPES, "QueueDataSize mismatch" );
|
||||||
static_assert( sizeof( void* ) <= sizeof( uint64_t ), "Pointer size > 8 bytes" );
|
static_assert( sizeof( void* ) <= sizeof( uint64_t ), "Pointer size > 8 bytes" );
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ private:
|
|||||||
std::unordered_map<uint64_t, std::string> m_threadNames;
|
std::unordered_map<uint64_t, std::string> m_threadNames;
|
||||||
std::unordered_set<const char*, charutil::Hasher, charutil::Comparator> m_customStrings;
|
std::unordered_set<const char*, charutil::Hasher, charutil::Comparator> m_customStrings;
|
||||||
std::unordered_map<uint64_t, QueueSourceLocation> m_sourceLocation;
|
std::unordered_map<uint64_t, QueueSourceLocation> m_sourceLocation;
|
||||||
std::unordered_map<uint64_t, LockMap> m_lockMap;
|
std::unordered_map<uint32_t, LockMap> m_lockMap;
|
||||||
uint64_t m_zonesCnt;
|
uint64_t m_zonesCnt;
|
||||||
|
|
||||||
std::mutex m_mbpslock;
|
std::mutex m_mbpslock;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user