brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 14240d9 Raw
94 lines · c
1//===-- TraceCursorIntelPT.h ------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACECURSORINTELPT_H10#define LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACECURSORINTELPT_H11 12#include "ThreadDecoder.h"13#include <optional>14 15namespace lldb_private {16namespace trace_intel_pt {17 18class TraceCursorIntelPT : public TraceCursor {19public:20  TraceCursorIntelPT(21      lldb::ThreadSP thread_sp, DecodedThreadSP decoded_thread_sp,22      const std::optional<LinuxPerfZeroTscConversion> &tsc_conversion,23      std::optional<uint64_t> beginning_of_time_nanos);24 25  bool Seek(int64_t offset, lldb::TraceCursorSeekType origin) override;26 27  void Next() override;28 29  bool HasValue() const override;30 31  llvm::StringRef GetError() const override;32 33  lldb::addr_t GetLoadAddress() const override;34 35  lldb::TraceEvent GetEventType() const override;36 37  lldb::cpu_id_t GetCPU() const override;38 39  std::optional<uint64_t> GetHWClock() const override;40 41  lldb::TraceItemKind GetItemKind() const override;42 43  bool GoToId(lldb::user_id_t id) override;44 45  lldb::user_id_t GetId() const override;46 47  bool HasId(lldb::user_id_t id) const override;48 49  std::optional<double> GetWallClockTime() const override;50 51  std::optional<std::string> GetSyncPointMetadata() const override;52 53private:54  /// Clear the current TSC and nanoseconds ranges if after moving they are not55  /// valid anymore.56  void ClearTimingRangesIfInvalid();57 58  /// Get or calculate the TSC range that includes the current trace item.59  const std::optional<DecodedThread::TSCRange> &GetTSCRange() const;60 61  /// Get or calculate the TSC range that includes the current trace item.62  const std::optional<DecodedThread::NanosecondsRange> &63  GetNanosecondsRange() const;64 65  /// Storage of the actual instructions66  DecodedThreadSP m_decoded_thread_sp;67  /// Internal instruction index currently pointing at.68  int64_t m_pos;69 70  /// Timing information and cached values.71  /// \{72 73  /// TSC -> nanos conversion utility. \a std::nullopt if not available at all.74  std::optional<LinuxPerfZeroTscConversion> m_tsc_conversion;75  /// Lowest nanoseconds timestamp seen in any thread trace, \a std::nullopt if76  /// not available at all.77  std::optional<uint64_t> m_beginning_of_time_nanos;78  /// Range of trace items with the same TSC that includes the current trace79  /// item, \a std::nullopt if not calculated or not available.80  std::optional<DecodedThread::TSCRange> mutable m_tsc_range;81  bool mutable m_tsc_range_calculated = false;82  /// Range of trace items with the same non-interpolated timestamps in83  /// nanoseconds that includes the current trace item, \a std::nullopt if not84  /// calculated or not available.85  std::optional<DecodedThread::NanosecondsRange> mutable m_nanoseconds_range;86  bool mutable m_nanoseconds_range_calculated = false;87  /// \}88};89 90} // namespace trace_intel_pt91} // namespace lldb_private92 93#endif // LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACECURSORINTELPT_H94