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:
parent
b7c5939bb8
commit
b79014f3ee
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user