Maintain a history of viewed symbols.

This commit is contained in:
Bartosz Taudul 2023-10-07 01:00:59 +02:00
parent 5e31910510
commit 2a6a082c93
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
2 changed files with 26 additions and 2 deletions

View File

@ -606,7 +606,7 @@ void SourceView::OpenSource( const char* fileName, int line, const View& view, c
assert( !m_source.empty() );
}
void SourceView::OpenSymbol( const char* fileName, int line, uint64_t baseAddr, uint64_t symAddr, Worker& worker, const View& view )
void SourceView::OpenSymbol( const char* fileName, int line, uint64_t baseAddr, uint64_t symAddr, Worker& worker, const View& view, bool updateHistory )
{
m_targetLine = line;
m_targetAddr = symAddr;
@ -623,6 +623,19 @@ void SourceView::OpenSymbol( const char* fileName, int line, uint64_t baseAddr,
SelectViewMode();
if( !worker.GetInlineSymbolList( baseAddr, m_codeLen ) ) m_calcInlineStats = false;
if( updateHistory )
{
m_history.erase( m_history.begin() + m_historyCursor, m_history.end() );
History entry = { fileName, line, baseAddr, symAddr };
if( m_history.empty() || memcmp( &m_history.back(), &entry, sizeof( History ) ) != 0 )
{
m_history.emplace_back( entry );
if( m_history.size() > 100 ) m_history.erase( m_history.begin() );
m_historyCursor = m_history.size();
}
}
}
void SourceView::SelectViewMode()

View File

@ -153,6 +153,14 @@ private:
unordered_flat_map<uint64_t, AddrStat> hwCountSrc, hwCountAsm;
};
struct History
{
const char* fileName;
int64_t line;
uint64_t baseAddr;
uint64_t symAddr;
};
public:
SourceView();
@ -160,7 +168,7 @@ public:
void SetCpuId( uint32_t cpuid );
void OpenSource( const char* fileName, int line, const View& view, const Worker& worker );
void OpenSymbol( const char* fileName, int line, uint64_t baseAddr, uint64_t symAddr, Worker& worker, const View& view );
void OpenSymbol( const char* fileName, int line, uint64_t baseAddr, uint64_t symAddr, Worker& worker, const View& view, bool updateHistory = true );
void Render( Worker& worker, View& view );
void CalcInlineStats( bool val ) { m_calcInlineStats = val; }
@ -287,6 +295,9 @@ private:
size_t sel;
std::vector<uint64_t> target;
} m_asmTarget;
std::vector<History> m_history;
size_t m_historyCursor = 0;
};
}