1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Lua zone text.

This commit is contained in:
Bartosz Taudul
2017-11-07 00:35:15 +01:00
parent 27dd46a97d
commit 68f66a923e
2 changed files with 43 additions and 9 deletions
+42 -8
View File
@@ -21,10 +21,24 @@ static inline void LuaRegister( lua_State* L )
lua_pushcfunction( L, detail::noop );
lua_setfield( L, -2, "ZoneEnd" );
lua_pushcfunction( L, detail::noop );
lua_setfield( L, -2, "ZoneText" );
lua_pushcfunction( L, detail::noop );
lua_setfield( L, -2, "Message" );
lua_setglobal( L, "tracy" );
}
static inline char* FindEnd( char* ptr )
{
unsigned int cnt = 1;
while( cnt != 0 )
{
if( *ptr == '(' ) cnt++;
else if( *ptr == ')' ) cnt--;
ptr++;
}
return ptr;
}
static inline void LuaRemove( char* script )
{
while( *script )
@@ -43,6 +57,12 @@ static inline void LuaRemove( char* script )
memset( script, ' ', 17 );
script += 17;
}
else if( strncmp( script + 10, "Text(", 5 ) == 0 )
{
auto end = FindEnd( script + 15 );
memset( script, ' ', end - script );
script = end;
}
else
{
script += 10;
@@ -50,14 +70,7 @@ static inline void LuaRemove( char* script )
}
else if( strncmp( script + 6, "Message(", 8 ) == 0 )
{
unsigned int cnt = 1;
auto end = script + 14;
while( cnt != 0 )
{
if( *end == '(' ) cnt++;
else if( *end == ')' ) cnt--;
end++;
}
auto end = FindEnd( script + 14 );
memset( script, ' ', end - script );
script = end;
}
@@ -139,6 +152,25 @@ static inline int LuaZoneEnd( lua_State* L )
return 0;
}
static inline int LuaZoneText( lua_State* L )
{
auto txt = lua_tostring( L, 1 );
const auto size = strlen( txt );
Magic magic;
auto& token = s_token.ptr;
auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size );
ptr[size] = '\0';
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::ZoneText;
item->zoneText.thread = GetThreadHandle();
item->zoneText.text = (uint64_t)ptr;
tail.store( magic + 1, std::memory_order_release );
return 0;
}
static inline int LuaMessage( lua_State* L )
{
auto txt = lua_tostring( L, 1 );
@@ -168,6 +200,8 @@ static inline void LuaRegister( lua_State* L )
lua_setfield( L, -2, "ZoneBegin" );
lua_pushcfunction( L, detail::LuaZoneEnd );
lua_setfield( L, -2, "ZoneEnd" );
lua_pushcfunction( L, detail::LuaZoneText );
lua_setfield( L, -2, "ZoneText" );
lua_pushcfunction( L, detail::LuaMessage );
lua_setfield( L, -2, "Message" );
lua_setglobal( L, "tracy" );