mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-26 16:04:34 +00:00
Exact time printing functionality.
This commit is contained in:
parent
b418c55e89
commit
b1342a10b0
@ -211,6 +211,103 @@ const char* TimeToString( int64_t _ns )
|
|||||||
return bufstart;
|
return bufstart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* TimeToStringExact( int64_t _ns )
|
||||||
|
{
|
||||||
|
enum { Pool = 8 };
|
||||||
|
static char bufpool[Pool][64];
|
||||||
|
static int bufsel = 0;
|
||||||
|
char* buf = bufpool[bufsel];
|
||||||
|
char* bufstart = buf;
|
||||||
|
bufsel = ( bufsel + 1 ) % Pool;
|
||||||
|
|
||||||
|
uint64_t ns;
|
||||||
|
if( _ns < 0 )
|
||||||
|
{
|
||||||
|
*buf = '-';
|
||||||
|
buf++;
|
||||||
|
ns = -_ns;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ns = _ns;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* numStart = buf;
|
||||||
|
|
||||||
|
if( ns >= 1000ll * 1000 * 1000 * 60 * 60 * 24 )
|
||||||
|
{
|
||||||
|
const auto d = int64_t( ns / ( 1000ll * 1000 * 1000 * 60 * 60 * 24 ) );
|
||||||
|
const auto h = int64_t( ns / ( 1000ll * 1000 * 1000 * 60 * 60 ) - d * 24 );
|
||||||
|
const auto m = int64_t( ns / ( 1000ll * 1000 * 1000 * 60 ) - d * ( 60 * 24 ) - h * 60 );
|
||||||
|
const auto s = int64_t( ns / ( 1000ll * 1000 * 1000 ) - d * ( 60 * 60 * 24 ) - h * ( 60 * 60 ) - m * 60 );
|
||||||
|
assert( d < 100 );
|
||||||
|
PrintTinyInt( buf, d );
|
||||||
|
*buf++ = 'd';
|
||||||
|
PrintTinyInt0( buf, h );
|
||||||
|
*buf++ = ':';
|
||||||
|
PrintTinyInt0( buf, m );
|
||||||
|
*buf++ = ':';
|
||||||
|
PrintTinyInt0( buf, s );
|
||||||
|
ns %= 1000ll * 1000 * 1000;
|
||||||
|
}
|
||||||
|
else if( ns >= 1000ll * 1000 * 1000 * 60 * 60 )
|
||||||
|
{
|
||||||
|
const auto h = int64_t( ns / ( 1000ll * 1000 * 1000 * 60 * 60 ) );
|
||||||
|
const auto m = int64_t( ns / ( 1000ll * 1000 * 1000 * 60 ) - h * 60 );
|
||||||
|
const auto s = int64_t( ns / ( 1000ll * 1000 * 1000 ) - h * ( 60 * 60 ) - m * 60 );
|
||||||
|
PrintTinyInt( buf, h );
|
||||||
|
*buf++ = ':';
|
||||||
|
PrintTinyInt0( buf, m );
|
||||||
|
*buf++ = ':';
|
||||||
|
PrintTinyInt0( buf, s );
|
||||||
|
ns %= 1000ll * 1000 * 1000;
|
||||||
|
}
|
||||||
|
else if( ns >= 1000ll * 1000 * 1000 * 60 )
|
||||||
|
{
|
||||||
|
const auto m = int64_t( ns / ( 1000ll * 1000 * 1000 * 60 ) );
|
||||||
|
const auto s = int64_t( ns / ( 1000ll * 1000 * 1000 ) - m * 60 );
|
||||||
|
PrintTinyInt( buf, m );
|
||||||
|
*buf++ = ':';
|
||||||
|
PrintTinyInt0( buf, s );
|
||||||
|
ns %= 1000ll * 1000 * 1000;
|
||||||
|
}
|
||||||
|
else if( ns >= 1000ll * 1000 * 1000 )
|
||||||
|
{
|
||||||
|
PrintTinyInt( buf, int64_t( ns / ( 1000ll * 1000 * 1000 ) ) );
|
||||||
|
*buf++ = 's';
|
||||||
|
ns %= 1000ll * 1000 * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ns > 0 )
|
||||||
|
{
|
||||||
|
if( buf != numStart ) *buf++ = ' ';
|
||||||
|
if( ns >= 1000ll * 1000 )
|
||||||
|
{
|
||||||
|
PrintSmallInt( buf, int64_t( ns / ( 1000ll * 1000 ) ) );
|
||||||
|
*buf++ = ',';
|
||||||
|
ns %= 1000ll * 1000;
|
||||||
|
}
|
||||||
|
if( ns >= 1000ll )
|
||||||
|
{
|
||||||
|
PrintSmallInt( buf, int64_t( ns / 1000ll ) );
|
||||||
|
*buf++ = ',';
|
||||||
|
ns %= 1000ll;
|
||||||
|
}
|
||||||
|
PrintSmallInt( buf, ns );
|
||||||
|
*buf++ = 'n';
|
||||||
|
*buf++ = 's';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy( buf, "0ns", 3 );
|
||||||
|
buf += 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
*buf++ = '\0';
|
||||||
|
|
||||||
|
return bufstart;
|
||||||
|
}
|
||||||
|
|
||||||
const char* MemSizeToString( int64_t val )
|
const char* MemSizeToString( int64_t val )
|
||||||
{
|
{
|
||||||
enum { Pool = 8 };
|
enum { Pool = 8 };
|
||||||
|
@ -116,6 +116,7 @@ static inline const char* RealToString( double val )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char* TimeToString( int64_t ns );
|
const char* TimeToString( int64_t ns );
|
||||||
|
const char* TimeToStringExact( int64_t ns );
|
||||||
const char* MemSizeToString( int64_t val );
|
const char* MemSizeToString( int64_t val );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user