mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-23 06:44:35 +00:00
Display basic capture information.
This commit is contained in:
parent
3f2ba6797b
commit
2f2dd2fc21
@ -3,7 +3,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <inttypes.h>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@ -13,6 +15,88 @@
|
|||||||
#include "../../server/TracyWorker.hpp"
|
#include "../../server/TracyWorker.hpp"
|
||||||
#include "getopt.h"
|
#include "getopt.h"
|
||||||
|
|
||||||
|
static const char* TimeToString( int64_t ns )
|
||||||
|
{
|
||||||
|
enum { Pool = 8 };
|
||||||
|
static char bufpool[Pool][64];
|
||||||
|
static int bufsel = 0;
|
||||||
|
char* buf = bufpool[bufsel];
|
||||||
|
bufsel = ( bufsel + 1 ) % Pool;
|
||||||
|
|
||||||
|
const char* sign = "";
|
||||||
|
if( ns < 0 )
|
||||||
|
{
|
||||||
|
sign = "-";
|
||||||
|
ns = -ns;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ns < 1000 )
|
||||||
|
{
|
||||||
|
sprintf( buf, "%s%" PRIi64 " ns", sign, ns );
|
||||||
|
}
|
||||||
|
else if( ns < 1000ll * 1000 )
|
||||||
|
{
|
||||||
|
sprintf( buf, "%s%.2f us", sign, ns / 1000. );
|
||||||
|
}
|
||||||
|
else if( ns < 1000ll * 1000 * 1000 )
|
||||||
|
{
|
||||||
|
sprintf( buf, "%s%.2f ms", sign, ns / ( 1000. * 1000. ) );
|
||||||
|
}
|
||||||
|
else if( ns < 1000ll * 1000 * 1000 * 60 )
|
||||||
|
{
|
||||||
|
sprintf( buf, "%s%.2f s", sign, ns / ( 1000. * 1000. * 1000. ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const auto m = int64_t( ns / ( 1000ll * 1000 * 1000 * 60 ) );
|
||||||
|
const auto s = int64_t( ns - m * ( 1000ll * 1000 * 1000 * 60 ) );
|
||||||
|
sprintf( buf, "%s%" PRIi64 ":%04.1f", sign, m, s / ( 1000. * 1000. * 1000. ) );
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char* RealToString( double val, bool separator )
|
||||||
|
{
|
||||||
|
enum { Pool = 8 };
|
||||||
|
static char bufpool[Pool][64];
|
||||||
|
static int bufsel = 0;
|
||||||
|
char* buf = bufpool[bufsel];
|
||||||
|
bufsel = ( bufsel + 1 ) % Pool;
|
||||||
|
|
||||||
|
sprintf( buf, "%f", val );
|
||||||
|
auto ptr = buf;
|
||||||
|
if( *ptr == '-' ) ptr++;
|
||||||
|
|
||||||
|
const auto vbegin = ptr;
|
||||||
|
|
||||||
|
if( separator )
|
||||||
|
{
|
||||||
|
while( *ptr != '\0' && *ptr != ',' && *ptr != '.' ) ptr++;
|
||||||
|
auto end = ptr;
|
||||||
|
while( *end != '\0' ) end++;
|
||||||
|
auto sz = end - ptr;
|
||||||
|
|
||||||
|
while( ptr - vbegin > 3 )
|
||||||
|
{
|
||||||
|
ptr -= 3;
|
||||||
|
memmove( ptr+1, ptr, sz );
|
||||||
|
*ptr = ',';
|
||||||
|
sz += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while( *ptr != '\0' && *ptr != ',' && *ptr != '.' ) ptr++;
|
||||||
|
|
||||||
|
if( *ptr == '\0' ) return buf;
|
||||||
|
while( *ptr != '\0' ) ptr++;
|
||||||
|
ptr--;
|
||||||
|
while( *ptr == '0' && *ptr != ',' && *ptr != '.' ) ptr--;
|
||||||
|
if( *ptr != '.' && *ptr != ',' ) ptr++;
|
||||||
|
*ptr = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Usage()
|
void Usage()
|
||||||
{
|
{
|
||||||
printf( "Usage: capture -a address -o output.tracy\n" );
|
printf( "Usage: capture -a address -o output.tracy\n" );
|
||||||
@ -55,7 +139,7 @@ int main( int argc, char** argv )
|
|||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
tracy::Worker worker( address );
|
tracy::Worker worker( address );
|
||||||
while( !worker.HasData() ) std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
|
while( !worker.HasData() ) std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
|
||||||
printf( "\n" );
|
printf( "\nQueue delay: %s\nTimer resolution: %s\n", TimeToString( worker.GetDelay() ), TimeToString( worker.GetResolution() ) );
|
||||||
|
|
||||||
auto& lock = worker.GetMbpsDataLock();
|
auto& lock = worker.GetMbpsDataLock();
|
||||||
|
|
||||||
@ -80,7 +164,7 @@ int main( int argc, char** argv )
|
|||||||
std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
|
std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
printf( "\nSaving trace..." );
|
printf( "\nFrames: %" PRIu64 "\nTime span: %s\nZones: %s\nSaving trace...", worker.GetFrameCount(), TimeToString( worker.GetLastTime() - worker.GetFrameBegin( 0 ) ), RealToString( worker.GetZoneCount(), true ) );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
auto f = tracy::FileWrite::Open( output );
|
auto f = tracy::FileWrite::Open( output );
|
||||||
if( f )
|
if( f )
|
||||||
|
Loading…
Reference in New Issue
Block a user