diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2022-07-27 19:50:45 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2022-07-27 19:50:54 +0000 |
| commit | 08e8dd7b9db7bb4a9de26d44c1cbfd24e869c014 (patch) | |
| tree | 041e72e32710b1e742516d8c9f1575bf0116d3e3 /lldb/source/Plugins/Trace/intel-pt/ThreadDecoder.cpp | |
| parent | 4b4fe385e49bd883fd183b5f21c1ea486c722e61 (diff) | |
vendor/llvm-project/llvmorg-15-init-17827-gd77882e66779vendor/llvm-project/llvmorg-15-init-17826-g1f8ae9d7e7e4
Diffstat (limited to 'lldb/source/Plugins/Trace/intel-pt/ThreadDecoder.cpp')
| -rw-r--r-- | lldb/source/Plugins/Trace/intel-pt/ThreadDecoder.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lldb/source/Plugins/Trace/intel-pt/ThreadDecoder.cpp b/lldb/source/Plugins/Trace/intel-pt/ThreadDecoder.cpp index d3ac61f7e658..920992d9d636 100644 --- a/lldb/source/Plugins/Trace/intel-pt/ThreadDecoder.cpp +++ b/lldb/source/Plugins/Trace/intel-pt/ThreadDecoder.cpp @@ -23,6 +23,21 @@ using namespace llvm; ThreadDecoder::ThreadDecoder(const ThreadSP &thread_sp, TraceIntelPT &trace) : m_thread_sp(thread_sp), m_trace(trace) {} +Expected<Optional<uint64_t>> ThreadDecoder::FindLowestTSC() { + Optional<uint64_t> lowest_tsc; + Error err = m_trace.OnThreadBufferRead( + m_thread_sp->GetID(), [&](llvm::ArrayRef<uint8_t> data) -> llvm::Error { + Expected<Optional<uint64_t>> tsc = FindLowestTSCInTrace(m_trace, data); + if (!tsc) + return tsc.takeError(); + lowest_tsc = *tsc; + return Error::success(); + }); + if (err) + return std::move(err); + return lowest_tsc; +} + Expected<DecodedThreadSP> ThreadDecoder::Decode() { if (!m_decoded_thread.hasValue()) { if (Expected<DecodedThreadSP> decoded_thread = DoDecode()) { @@ -38,8 +53,8 @@ llvm::Expected<DecodedThreadSP> ThreadDecoder::DoDecode() { return m_trace.GetThreadTimer(m_thread_sp->GetID()) .TimeTask( "Decoding instructions", [&]() -> Expected<DecodedThreadSP> { - DecodedThreadSP decoded_thread_sp = - std::make_shared<DecodedThread>(m_thread_sp); + DecodedThreadSP decoded_thread_sp = std::make_shared<DecodedThread>( + m_thread_sp, m_trace.GetPerfZeroTscConversion()); Error err = m_trace.OnThreadBufferRead( m_thread_sp->GetID(), [&](llvm::ArrayRef<uint8_t> data) { |
