1//===-- IntelPTThreadTraceCollection.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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef liblldb_IntelPTPerThreadTraceCollection_H_
10#define liblldb_IntelPTPerThreadTraceCollection_H_
11
12#include "IntelPTSingleBufferTrace.h"
13#include <optional>
14
15namespace lldb_private {
16namespace process_linux {
17
18/// Manages a list of thread traces.
19class IntelPTThreadTraceCollection {
20public:
21 IntelPTThreadTraceCollection() {}
22
23 /// Dispose of all traces
24 void Clear();
25
26 /// \return
27 /// \b true if and only if this instance of tracing the provided \p tid.
28 bool TracesThread(lldb::tid_t tid) const;
29
30 /// \return
31 /// The total sum of the intel pt trace buffer sizes used by this
32 /// collection.
33 size_t GetTotalBufferSize() const;
34
35 /// Execute the provided callback on each thread that is being traced.
36 ///
37 /// \param[in] callback.tid
38 /// The id of the thread that is being traced.
39 ///
40 /// \param[in] callback.core_trace
41 /// The single-buffer trace instance for the given core.
42 void ForEachThread(std::function<void(lldb::tid_t tid,
43 IntelPTSingleBufferTrace &thread_trace)>
44 callback);
45
46 llvm::Expected<IntelPTSingleBufferTrace &> GetTracedThread(lldb::tid_t tid);
47
48 /// Start tracing the thread given by its \p tid.
49 ///
50 /// \return
51 /// An error if the operation failed.
52 llvm::Error TraceStart(lldb::tid_t tid,
53 const TraceIntelPTStartRequest &request);
54
55 /// Stop tracing the thread given by its \p tid.
56 ///
57 /// \return
58 /// An error if the given thread is not being traced or tracing couldn't be
59 /// stopped.
60 llvm::Error TraceStop(lldb::tid_t tid);
61
62 size_t GetTracedThreadsCount() const;
63
64 /// \copydoc IntelPTProcessTrace::TryGetBinaryData()
65 llvm::Expected<std::optional<std::vector<uint8_t>>>
66 TryGetBinaryData(const TraceGetBinaryDataRequest &request);
67
68private:
69 llvm::DenseMap<lldb::tid_t, IntelPTSingleBufferTrace> m_thread_traces;
70 /// Total actual thread buffer size in bytes
71 size_t m_total_buffer_size = 0;
72};
73
74} // namespace process_linux
75} // namespace lldb_private
76
77#endif // liblldb_IntelPTPerThreadTraceCollection_H_
78

source code of lldb/source/Plugins/Process/Linux/IntelPTThreadTraceCollection.h