1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 04:23:51 +00:00

Messages may now use serialized queue.

This commit is contained in:
Bartosz Taudul 2021-10-10 15:54:21 +02:00
parent f8d37b45a3
commit 082255f940
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
3 changed files with 66 additions and 8 deletions

View File

@ -2428,6 +2428,26 @@ Profiler::DequeueStatus Profiler::DequeueSerial()
tracy_free_fast( (void*)ptr );
break;
}
case QueueType::Message:
case QueueType::MessageCallstack:
{
ThreadCtxCheckSerial( messageFatThread );
ptr = MemRead<uint64_t>( &item->messageFat.text );
uint16_t size = MemRead<uint16_t>( &item->messageFat.size );
SendSingleString( (const char*)ptr, size );
tracy_free_fast( (void*)ptr );
break;
}
case QueueType::MessageColor:
case QueueType::MessageColorCallstack:
{
ThreadCtxCheckSerial( messageColorFatThread );
ptr = MemRead<uint64_t>( &item->messageColorFat.text );
uint16_t size = MemRead<uint16_t>( &item->messageColorFat.size );
SendSingleString( (const char*)ptr, size );
tracy_free_fast( (void*)ptr );
break;
}
#endif
default:
assert( false );
@ -2454,6 +2474,18 @@ Profiler::DequeueStatus Profiler::DequeueSerial()
ThreadCtxCheckSerial( zoneValidationThread );
break;
}
case QueueType::MessageLiteral:
case QueueType::MessageLiteralCallstack:
{
ThreadCtxCheckSerial( messageLiteralThread );
break;
}
case QueueType::MessageLiteralColor:
case QueueType::MessageLiteralColorCallstack:
{
ThreadCtxCheckSerial( messageColorLiteralThread );
break;
}
default:
break;
}

View File

@ -318,13 +318,14 @@ public:
tracy::GetProfiler().SendCallstack( callstack );
}
TracyLfqPrepare( callstack == 0 ? QueueType::Message : QueueType::MessageCallstack );
auto ptr = (char*)tracy_malloc( size );
memcpy( ptr, txt, size );
TracyQueuePrepare( callstack == 0 ? QueueType::Message : QueueType::MessageCallstack );
MemWrite( &item->messageFat.time, GetTime() );
MemWrite( &item->messageFat.text, (uint64_t)ptr );
MemWrite( &item->messageFat.size, (uint16_t)size );
TracyLfqCommit;
TracyQueueCommit( messageFatThread );
}
static tracy_force_inline void Message( const char* txt, int callstack )
@ -337,10 +338,10 @@ public:
tracy::GetProfiler().SendCallstack( callstack );
}
TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack );
TracyQueuePrepare( callstack == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack );
MemWrite( &item->messageLiteral.time, GetTime() );
MemWrite( &item->messageLiteral.text, (uint64_t)txt );
TracyLfqCommit;
TracyQueueCommit( messageLiteralThread );
}
static tracy_force_inline void MessageColor( const char* txt, size_t size, uint32_t color, int callstack )
@ -354,16 +355,17 @@ public:
tracy::GetProfiler().SendCallstack( callstack );
}
TracyLfqPrepare( callstack == 0 ? QueueType::MessageColor : QueueType::MessageColorCallstack );
auto ptr = (char*)tracy_malloc( size );
memcpy( ptr, txt, size );
TracyQueuePrepare( callstack == 0 ? QueueType::MessageColor : QueueType::MessageColorCallstack );
MemWrite( &item->messageColorFat.time, GetTime() );
MemWrite( &item->messageColorFat.text, (uint64_t)ptr );
MemWrite( &item->messageColorFat.r, uint8_t( ( color ) & 0xFF ) );
MemWrite( &item->messageColorFat.g, uint8_t( ( color >> 8 ) & 0xFF ) );
MemWrite( &item->messageColorFat.b, uint8_t( ( color >> 16 ) & 0xFF ) );
MemWrite( &item->messageColorFat.size, (uint16_t)size );
TracyLfqCommit;
TracyQueueCommit( messageColorFatThread );
}
static tracy_force_inline void MessageColor( const char* txt, uint32_t color, int callstack )
@ -376,13 +378,13 @@ public:
tracy::GetProfiler().SendCallstack( callstack );
}
TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack );
TracyQueuePrepare( callstack == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack );
MemWrite( &item->messageColorLiteral.time, GetTime() );
MemWrite( &item->messageColorLiteral.text, (uint64_t)txt );
MemWrite( &item->messageColorLiteral.r, uint8_t( ( color ) & 0xFF ) );
MemWrite( &item->messageColorLiteral.g, uint8_t( ( color >> 8 ) & 0xFF ) );
MemWrite( &item->messageColorLiteral.b, uint8_t( ( color >> 16 ) & 0xFF ) );
TracyLfqCommit;
TracyQueueCommit( messageColorLiteralThread );
}
static tracy_force_inline void MessageAppInfo( const char* txt, size_t size )

View File

@ -317,23 +317,43 @@ struct QueueMessageLiteral : public QueueMessage
uint64_t text; // ptr
};
struct QueueMessageLiteralThread : public QueueMessageLiteral
{
uint32_t thread;
};
struct QueueMessageColorLiteral : public QueueMessageColor
{
uint64_t text; // ptr
};
struct QueueMessageColorLiteralThread : public QueueMessageColorLiteral
{
uint32_t thread;
};
struct QueueMessageFat : public QueueMessage
{
uint64_t text; // ptr
uint16_t size;
};
struct QueueMessageFatThread : public QueueMessageFat
{
uint32_t thread;
};
struct QueueMessageColorFat : public QueueMessageColor
{
uint64_t text; // ptr
uint16_t size;
};
struct QueueMessageColorFatThread : public QueueMessageColorFat
{
uint32_t thread;
};
// Don't change order, only add new entries at the end, this is also used on trace dumps!
enum class GpuContextType : uint8_t
{
@ -589,9 +609,13 @@ struct QueueItem
QueueMessage message;
QueueMessageColor messageColor;
QueueMessageLiteral messageLiteral;
QueueMessageLiteralThread messageLiteralThread;
QueueMessageColorLiteral messageColorLiteral;
QueueMessageColorLiteralThread messageColorLiteralThread;
QueueMessageFat messageFat;
QueueMessageFatThread messageFatThread;
QueueMessageColorFat messageColorFat;
QueueMessageColorFatThread messageColorFatThread;
QueueGpuNewContext gpuNewContext;
QueueGpuZoneBegin gpuZoneBegin;
QueueGpuZoneBeginLean gpuZoneBeginLean;