11188faa7SWalter Erquinigo //===-- IntelPTThreadTraceCollection.h ------------------------ -*- C++ -*-===// 21188faa7SWalter Erquinigo // 31188faa7SWalter Erquinigo // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41188faa7SWalter Erquinigo // See https://llvm.org/LICENSE.txt for license information. 51188faa7SWalter Erquinigo // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61188faa7SWalter Erquinigo // 71188faa7SWalter Erquinigo //===----------------------------------------------------------------------===// 81188faa7SWalter Erquinigo 91188faa7SWalter Erquinigo #ifndef liblldb_IntelPTPerThreadTraceCollection_H_ 101188faa7SWalter Erquinigo #define liblldb_IntelPTPerThreadTraceCollection_H_ 111188faa7SWalter Erquinigo 121188faa7SWalter Erquinigo #include "IntelPTSingleBufferTrace.h" 131188faa7SWalter Erquinigo 141188faa7SWalter Erquinigo namespace lldb_private { 151188faa7SWalter Erquinigo namespace process_linux { 161188faa7SWalter Erquinigo 171188faa7SWalter Erquinigo /// Manages a list of thread traces. 181188faa7SWalter Erquinigo class IntelPTThreadTraceCollection { 191188faa7SWalter Erquinigo public: IntelPTThreadTraceCollection()201188faa7SWalter Erquinigo IntelPTThreadTraceCollection() {} 211188faa7SWalter Erquinigo 221188faa7SWalter Erquinigo /// Dispose of all traces 231188faa7SWalter Erquinigo void Clear(); 241188faa7SWalter Erquinigo 251188faa7SWalter Erquinigo /// \return 261188faa7SWalter Erquinigo /// \b true if and only if this instance of tracing the provided \p tid. 271188faa7SWalter Erquinigo bool TracesThread(lldb::tid_t tid) const; 281188faa7SWalter Erquinigo 291188faa7SWalter Erquinigo /// \return 30*6a5355e8SWalter Erquinigo /// The total sum of the intel pt trace buffer sizes used by this 31*6a5355e8SWalter Erquinigo /// collection. 321188faa7SWalter Erquinigo size_t GetTotalBufferSize() const; 331188faa7SWalter Erquinigo 341188faa7SWalter Erquinigo /// Execute the provided callback on each thread that is being traced. 351188faa7SWalter Erquinigo /// 361188faa7SWalter Erquinigo /// \param[in] callback.tid 371188faa7SWalter Erquinigo /// The id of the thread that is being traced. 381188faa7SWalter Erquinigo /// 391188faa7SWalter Erquinigo /// \param[in] callback.core_trace 401188faa7SWalter Erquinigo /// The single-buffer trace instance for the given core. 411188faa7SWalter Erquinigo void ForEachThread(std::function<void(lldb::tid_t tid, 421188faa7SWalter Erquinigo IntelPTSingleBufferTrace &thread_trace)> 431188faa7SWalter Erquinigo callback); 441188faa7SWalter Erquinigo 451188faa7SWalter Erquinigo llvm::Expected<IntelPTSingleBufferTrace &> GetTracedThread(lldb::tid_t tid); 461188faa7SWalter Erquinigo 471188faa7SWalter Erquinigo /// Start tracing the thread given by its \p tid. 481188faa7SWalter Erquinigo /// 491188faa7SWalter Erquinigo /// \return 501188faa7SWalter Erquinigo /// An error if the operation failed. 511188faa7SWalter Erquinigo llvm::Error TraceStart(lldb::tid_t tid, 521188faa7SWalter Erquinigo const TraceIntelPTStartRequest &request); 531188faa7SWalter Erquinigo 541188faa7SWalter Erquinigo /// Stop tracing the thread given by its \p tid. 551188faa7SWalter Erquinigo /// 561188faa7SWalter Erquinigo /// \return 571188faa7SWalter Erquinigo /// An error if the given thread is not being traced or tracing couldn't be 581188faa7SWalter Erquinigo /// stopped. 591188faa7SWalter Erquinigo llvm::Error TraceStop(lldb::tid_t tid); 601188faa7SWalter Erquinigo 611188faa7SWalter Erquinigo size_t GetTracedThreadsCount() const; 621188faa7SWalter Erquinigo 63fc5ef57cSWalter Erquinigo /// \copydoc IntelPTProcessTrace::TryGetBinaryData() 64fc5ef57cSWalter Erquinigo llvm::Expected<llvm::Optional<std::vector<uint8_t>>> 65fc5ef57cSWalter Erquinigo TryGetBinaryData(const TraceGetBinaryDataRequest &request); 66fc5ef57cSWalter Erquinigo 671188faa7SWalter Erquinigo private: 68a7582059SWalter Erquinigo llvm::DenseMap<lldb::tid_t, IntelPTSingleBufferTrace> m_thread_traces; 691188faa7SWalter Erquinigo /// Total actual thread buffer size in bytes 701188faa7SWalter Erquinigo size_t m_total_buffer_size = 0; 711188faa7SWalter Erquinigo }; 721188faa7SWalter Erquinigo 731188faa7SWalter Erquinigo } // namespace process_linux 741188faa7SWalter Erquinigo } // namespace lldb_private 751188faa7SWalter Erquinigo 761188faa7SWalter Erquinigo #endif // liblldb_IntelPTPerThreadTraceCollection_H_ 77