From 47ec7de47904706034b4351cf0ebafe4b412eb7e Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sat, 15 Oct 2022 00:39:25 +0200 Subject: Propagate inlines for hw sample impact. --- server/TracySourceView.cpp | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/server/TracySourceView.cpp b/server/TracySourceView.cpp index 69000440..abe1fb99 100644 --- a/server/TracySourceView.cpp +++ b/server/TracySourceView.cpp @@ -4951,28 +4951,35 @@ void SourceView::CountHwStats( AddrStatData& as, Worker& worker, const View& vie if( filename ) { - uint32_t line; - const auto fref = worker.GetLocationForAddress( addr, line ); - if( line != 0 ) + auto frame = worker.GetCallstackFrame( worker.PackPointer( addr ) ); + if( frame ) { - auto ffn = worker.GetString( fref ); - if( strcmp( ffn, filename ) == 0 ) + const auto end = m_propagateInlines ? frame->size : 1; + for( uint8_t i=0; idata[i].file ); + if( strcmp( ffn, filename ) == 0 ) { - const auto branchSum = it->second.local + branch; - const auto cacheSum = it->second.ext + cache; - it->second.local = branchSum; - it->second.ext = cacheSum; - if( as.hwMaxSrc.local < branchSum ) as.hwMaxSrc.local = branchSum; - if( as.hwMaxSrc.ext < cacheSum ) as.hwMaxSrc.ext = cacheSum; + const auto line = frame->data[i].line; + if( line != 0 ) + { + auto it = as.hwCountSrc.find( line ); + if( it == as.hwCountSrc.end() ) + { + as.hwCountSrc.emplace( line, AddrStat{ branch, cache } ); + if( as.hwMaxSrc.local < branch ) as.hwMaxSrc.local = branch; + if( as.hwMaxSrc.ext < cache ) as.hwMaxSrc.ext = cache; + } + else + { + const auto branchSum = it->second.local + branch; + const auto cacheSum = it->second.ext + cache; + it->second.local = branchSum; + it->second.ext = cacheSum; + if( as.hwMaxSrc.local < branchSum ) as.hwMaxSrc.local = branchSum; + if( as.hwMaxSrc.ext < cacheSum ) as.hwMaxSrc.ext = cacheSum; + } + } } } } -- cgit v1.2.3