mirror of
https://github.com/wolfpld/tracy.git
synced 2025-03-20 07:40:02 +08:00
Pack StringIdx in 24 bits.
This reduces ZoneEvent size from 32 to 30 bytes. Memory usage reduction on selected traces (sizes in MB): big 9902 -> 9527 (96%) chicken 2172 -> 2107 (97%) ctx-big 311 -> 309 (99%) drl-l-b 1570 -> 1479 (94%) long 5496 -> 5412 (98%) mem 6468 -> 6468 (100%) q3bsp-mt 5784 -> 5592 (96%) selfprofile 1486 -> 1443 (97%)
This commit is contained in:
+32
-14
@@ -41,27 +41,45 @@ struct StringRef
|
||||
};
|
||||
};
|
||||
|
||||
struct StringIdx
|
||||
class StringIdx
|
||||
{
|
||||
StringIdx() : __data( 0 ) {}
|
||||
StringIdx( uint32_t _idx )
|
||||
: __data( 0 )
|
||||
public:
|
||||
StringIdx() { memset( m_idx, 0, sizeof( m_idx ) ); }
|
||||
StringIdx( uint32_t idx )
|
||||
{
|
||||
idx = _idx;
|
||||
active = 1;
|
||||
SetIdx( idx );
|
||||
}
|
||||
|
||||
union
|
||||
void SetIdx( uint32_t idx )
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint32_t idx : 31;
|
||||
uint32_t active : 1;
|
||||
};
|
||||
uint32_t __data;
|
||||
};
|
||||
idx++;
|
||||
memcpy( m_idx, &idx, 3 );
|
||||
}
|
||||
|
||||
uint32_t Idx() const
|
||||
{
|
||||
uint32_t idx = 0;
|
||||
memcpy( &idx, m_idx, 3 );
|
||||
return idx - 1;
|
||||
}
|
||||
|
||||
bool Active() const
|
||||
{
|
||||
uint32_t zero = 0;
|
||||
return memcmp( m_idx, &zero, 3 ) != 0;
|
||||
}
|
||||
|
||||
private:
|
||||
uint8_t m_idx[3];
|
||||
};
|
||||
|
||||
struct __StringIdxOld
|
||||
{
|
||||
uint32_t idx : 31;
|
||||
uint32_t active : 1;
|
||||
};
|
||||
|
||||
|
||||
struct SourceLocation
|
||||
{
|
||||
StringRef name;
|
||||
|
||||
Reference in New Issue
Block a user