#ifndef __TRACYVIEW_HPP__ #define __TRACYVIEW_HPP__ #include #include #include #include #include #include #include #include "../common/TracySocket.hpp" #include "../common/TracyQueue.hpp" #include "TracyEvent.hpp" namespace tracy { struct QueueItem; class View { public: View() : View( "127.0.0.1" ) {} View( const char* addr ); ~View(); static bool ShouldExit(); private: void Worker(); void Process( const QueueItem& ev ); void ProcessZoneBegin( uint64_t id, const QueueZoneBegin& ev ); void ProcessZoneEnd( uint64_t id, const QueueZoneEnd& ev ); void CheckString( uint64_t ptr ); std::string m_addr; Socket m_sock; std::thread m_thread; std::atomic m_shutdown; int64_t m_timeBegin; std::mutex m_lock; std::vector m_data; std::vector m_timeline; std::unordered_map m_strings; // not used for vis - no need to lock std::unordered_map m_pendingEndZone; std::unordered_map m_openZones; std::unordered_set m_pendingStrings; }; } #endif