#include #include #include "TracyStorage.hpp" #include "TracyUserData.hpp" namespace tracy { constexpr auto FileDescription = "description"; UserData::UserData() : m_preserveState( false ) { } UserData::UserData( const char* program, uint64_t time ) : m_program( program ) , m_time( time ) { FILE* f = OpenFile( FileDescription, false ); if( f ) { fseek( f, 0, SEEK_END ); const auto sz = ftell( f ); fseek( f, 0, SEEK_SET ); auto buf = std::make_unique( sz ); fread( buf.get(), 1, sz, f ); fclose( f ); m_description.assign( buf.get(), buf.get() + sz ); } } void UserData::Init( const char* program, uint64_t time ) { assert( !Valid() ); m_program = program; m_time = time; } bool UserData::SetDescription( const char* description ) { assert( Valid() ); m_description = description; const auto sz = m_description.size(); FILE* f = OpenFile( FileDescription, true ); if( !f ) return false; fwrite( description, 1, sz, f ); fclose( f ); return true; } void UserData::StateShouldBePreserved() { m_preserveState = true; } FILE* UserData::OpenFile( const char* filename, bool write ) { const auto path = GetSavePath( m_program.c_str(), m_time, filename, write ); if( !path ) return nullptr; FILE* f = fopen( path, write ? "wb" : "rb" ); return f; } }