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

Optimize parsing numbers.

Don't read byte-by-byte, process data in 8-byte packets.
This commit is contained in:
Bartosz Taudul 2021-06-03 00:20:50 +02:00
parent b7c5939bb8
commit b79014f3ee
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3

View File

@ -1200,16 +1200,24 @@ static uint64_t ReadNumber( const char*& data )
{
auto ptr = data;
assert( *ptr >= '0' && *ptr <= '9' );
uint64_t val = *ptr++ - '0';
uint64_t val = 0;
for(;;)
{
const uint8_t v = uint8_t( *ptr - '0' );
if( v > 9 ) break;
val = val * 10 + v;
ptr++;
uint64_t q;
memcpy( &q, ptr, 8 );
for( int i=0; i<8; i++ )
{
const uint64_t v = ( q & 0xFF ) - '0';
if( v > 9 )
{
data = ptr + i;
return val;
}
val = val * 10 + v;
q >>= 8;
}
ptr += 8;
}
data = ptr;
return val;
}
static uint8_t ReadState( char state )
@ -1473,7 +1481,8 @@ void SysTraceWorker( void* ptr )
#else
static void ProcessTraceLines( int fd )
{
char* buf = (char*)tracy_malloc( 64*1024 );
// 8 bytes buffer space for wide unbound reads
char* buf = (char*)tracy_malloc( 64*1024 + 8 );
struct pollfd pfd;
pfd.fd = fd;