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; auto ptr = data;
assert( *ptr >= '0' && *ptr <= '9' ); assert( *ptr >= '0' && *ptr <= '9' );
uint64_t val = *ptr++ - '0'; uint64_t val = 0;
for(;;) for(;;)
{ {
const uint8_t v = uint8_t( *ptr - '0' ); uint64_t q;
if( v > 9 ) break; memcpy( &q, ptr, 8 );
val = val * 10 + v; for( int i=0; i<8; i++ )
ptr++; {
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 ) static uint8_t ReadState( char state )
@ -1473,7 +1481,8 @@ void SysTraceWorker( void* ptr )
#else #else
static void ProcessTraceLines( int fd ) 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; struct pollfd pfd;
pfd.fd = fd; pfd.fd = fd;