mirror of
https://github.com/wolfpld/tracy
synced 2025-05-01 21:23:52 +00:00
External process/thread name retrieval on linux.
This commit is contained in:
parent
26e93b35c6
commit
819ef2a82b
@ -213,6 +213,7 @@ void SysTraceSendExternalName( uint64_t thread )
|
|||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
# include <fcntl.h>
|
# include <fcntl.h>
|
||||||
|
# include <inttypes.h>
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
@ -393,8 +394,57 @@ void SysTraceWorker( void* ptr )
|
|||||||
|
|
||||||
void SysTraceSendExternalName( uint64_t thread )
|
void SysTraceSendExternalName( uint64_t thread )
|
||||||
{
|
{
|
||||||
// TODO
|
FILE* f;
|
||||||
|
char fn[256];
|
||||||
|
sprintf( fn, "/proc/%" PRIu64 "/comm", thread );
|
||||||
|
f = fopen( fn, "rb" );
|
||||||
|
if( f )
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
const auto sz = fread( buf, 1, 256, f );
|
||||||
|
if( sz > 0 && buf[sz-1] == '\n' ) buf[sz-1] = '\0';
|
||||||
|
GetProfiler().SendString( thread, buf, QueueType::ExternalThreadName );
|
||||||
|
fclose( f );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
GetProfiler().SendString( thread, "???", QueueType::ExternalThreadName );
|
GetProfiler().SendString( thread, "???", QueueType::ExternalThreadName );
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf( fn, "/proc/%" PRIu64 "/status", thread );
|
||||||
|
f = fopen( fn, "rb" );
|
||||||
|
if( f )
|
||||||
|
{
|
||||||
|
int pid = -1;
|
||||||
|
size_t lsz = 1024;
|
||||||
|
auto line = (char*)malloc( lsz );
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
auto rd = getline( &line, &lsz, f );
|
||||||
|
if( rd <= 0 ) break;
|
||||||
|
if( memcmp( "Tgid:\t", line, 6 ) == 0 )
|
||||||
|
{
|
||||||
|
pid = atoi( line + 6 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free( line );
|
||||||
|
fclose( f );
|
||||||
|
if( pid >= 0 )
|
||||||
|
{
|
||||||
|
sprintf( fn, "/proc/%i/comm", pid );
|
||||||
|
f = fopen( fn, "rb" );
|
||||||
|
if( f )
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
const auto sz = fread( buf, 1, 256, f );
|
||||||
|
if( sz > 0 && buf[sz-1] == '\n' ) buf[sz-1] = '\0';
|
||||||
|
GetProfiler().SendString( thread, buf, QueueType::ExternalName );
|
||||||
|
fclose( f );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
GetProfiler().SendString( thread, "???", QueueType::ExternalName );
|
GetProfiler().SendString( thread, "???", QueueType::ExternalName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user