Storing timestamps (TSCs) in a more efficient map at the decoded thread level to speed up TSC lookup, as well as reduce the amount of memory used by each decoded instruction. Also introduced TSC range which keeps the current timestamp valid for all subsequent instructions until the next timestamp is emitted. Differential Revision: https://reviews.llvm.org/D122603
53 lines
1.5 KiB
C++
53 lines
1.5 KiB
C++
//===-- TraceCursorIntelPT.h ------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACECURSORINTELPT_H
|
|
#define LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACECURSORINTELPT_H
|
|
|
|
#include "IntelPTDecoder.h"
|
|
#include "TraceIntelPTSessionFileParser.h"
|
|
|
|
namespace lldb_private {
|
|
namespace trace_intel_pt {
|
|
|
|
class TraceCursorIntelPT : public TraceCursor {
|
|
public:
|
|
TraceCursorIntelPT(lldb::ThreadSP thread_sp,
|
|
DecodedThreadSP decoded_thread_sp);
|
|
|
|
size_t Seek(int64_t offset, SeekType origin) override;
|
|
|
|
virtual bool Next() override;
|
|
|
|
const char *GetError() override;
|
|
|
|
lldb::addr_t GetLoadAddress() override;
|
|
|
|
llvm::Optional<uint64_t> GetCounter(lldb::TraceCounter counter_type) override;
|
|
|
|
lldb::TraceInstructionControlFlowType
|
|
GetInstructionControlFlowType() override;
|
|
|
|
bool IsError() override;
|
|
|
|
private:
|
|
size_t GetInternalInstructionSize();
|
|
|
|
/// Storage of the actual instructions
|
|
DecodedThreadSP m_decoded_thread_sp;
|
|
/// Internal instruction index currently pointing at.
|
|
size_t m_pos;
|
|
/// Tsc range covering the current instruction.
|
|
llvm::Optional<DecodedThread::TscRange> m_tsc_range;
|
|
};
|
|
|
|
} // namespace trace_intel_pt
|
|
} // namespace lldb_private
|
|
|
|
#endif // LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACECURSORINTELPT_H
|