1
0
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:
Bartosz Taudul
2019-09-29 20:32:42 +02:00
parent 781ebeb835
commit d228bcb622
5 changed files with 159 additions and 55 deletions
+32 -14
View File
@@ -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;