Share a single manual data instance across views.

The manual data is invariant — derived only from the embedded manual — so
each View re-parsed it needlessly. It's now computed once and shared by all
Views and the LLM.
This commit is contained in:
Bartosz Taudul
2026-10-07 01:31:37 +02:00
parent bae66a2ad9
commit e33ccfda76
5 changed files with 16 additions and 9 deletions

View File

@@ -115,4 +115,10 @@ void TracyManualData::AddManualChunk( const std::string_view& manual, int start,
}
}
const TracyManualData& GetManualData()
{
static TracyManualData data;
return data;
}
}

View File

@@ -34,6 +34,8 @@ private:
uint64_t m_hash;
};
const TracyManualData& GetManualData();
}
#endif

View File

@@ -54,13 +54,13 @@ View::View( void(*cbMainThread)(const std::function<void()>&, bool), const char*
, m_achievements( s_config.achievements )
, m_horizontalScrollMultiplier( s_config.horizontalScrollMultiplier )
, m_verticalScrollMultiplier( s_config.verticalScrollMultiplier )
, m_manualData( std::make_shared<TracyManualData>() )
, m_manualData( GetManualData() )
, m_markdown( this, &m_worker )
#ifdef __EMSCRIPTEN__
, m_td( 2, "ViewMt" )
#else
, m_td( std::thread::hardware_concurrency(), "ViewMt" )
, m_llm( m_worker, *this, *m_manualData )
, m_llm( m_worker, *this, m_manualData )
#endif
{
InitTextEditor();
@@ -86,13 +86,13 @@ View::View( void(*cbMainThread)(const std::function<void()>&, bool), FileRead& f
, m_achievements( s_config.achievements )
, m_horizontalScrollMultiplier( s_config.horizontalScrollMultiplier )
, m_verticalScrollMultiplier( s_config.verticalScrollMultiplier )
, m_manualData( std::make_shared<TracyManualData>() )
, m_manualData( GetManualData() )
, m_markdown( this, &m_worker )
#ifdef __EMSCRIPTEN__
, m_td( 2, "ViewMt" )
#else
, m_td( std::thread::hardware_concurrency(), "ViewMt" )
, m_llm( m_worker, *this, *m_manualData )
, m_llm( m_worker, *this, m_manualData )
#endif
{
m_notificationTime = 4;

View File

@@ -1083,7 +1083,7 @@ private:
double m_horizontalScrollMultiplier = 1.0;
double m_verticalScrollMultiplier = 1.0;
std::shared_ptr<TracyManualData> m_manualData;
const TracyManualData& m_manualData;
size_t m_activeManualChunk = 0;
Markdown m_markdown;

View File

@@ -41,7 +41,7 @@ void View::DrawManual()
ImGui::BeginChild( "##toc", ImVec2( 0, 0 ), ImGuiChildFlags_AlwaysUseWindowPadding );
int level = 0;
auto& chunks = m_manualData->GetChunks();
auto& chunks = m_manualData.GetChunks();
assert( !chunks.empty() );
for( size_t i=0; i<chunks.size(); i++ )
{
@@ -160,9 +160,8 @@ void View::DrawManual()
const TracyManualData::ManualChunk* View::GetManualChunk( const char* anchor ) const
{
assert( anchor && *anchor );
assert( m_manualData );
auto& chunks = m_manualData->GetChunks();
auto& chunks = m_manualData.GetChunks();
auto it = std::ranges::find_if( chunks, [anchor]( const auto& chunk ) { return chunk.link == anchor; } );
if( it != chunks.end() ) return &*it;
return nullptr;
@@ -173,7 +172,7 @@ bool View::ViewManualChunk( const char* anchor )
assert( anchor && *anchor );
const auto chunk = GetManualChunk( anchor );
if( !chunk ) return false;
m_activeManualChunk = std::distance( m_manualData->GetChunks().data(), chunk );
m_activeManualChunk = std::distance( m_manualData.GetChunks().data(), chunk );
m_showManual = true;
m_manualPositionReset = true;
return true;