zrthxn updated this revision to Diff 416826. zrthxn added a comment. Ingore errored instructions
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D122093/new/ https://reviews.llvm.org/D122093 Files: lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp lldb/source/Plugins/Trace/intel-pt/DecodedThread.h lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp lldb/test/API/commands/trace/TestTraceDumpInfo.py Index: lldb/test/API/commands/trace/TestTraceDumpInfo.py =================================================================== --- lldb/test/API/commands/trace/TestTraceDumpInfo.py +++ lldb/test/API/commands/trace/TestTraceDumpInfo.py @@ -38,5 +38,6 @@ substrs=['''Trace technology: intel-pt thread #1: tid = 3842849 - Raw trace size: 4096 bytes - Total number of instructions: 21''']) + Raw trace size: 4 KiB + Total number of instructions: 21 + Total approximate memory usage: 5.38 KiB''']) Index: lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp =================================================================== --- lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp +++ lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp @@ -111,9 +111,13 @@ return; } s.Printf("\n"); - s.Printf(" Raw trace size: %zu bytes\n", *raw_size); - s.Printf(" Total number of instructions: %zu\n", - Decode(thread)->GetInstructions().size()); + + size_t mem_used = Decode(thread)->CalculateApproximateMemoryUsage(); + s.Printf(" Raw trace size: %zu KiB\n", *raw_size / 1024); + s.Printf(" Total number of instructions: %zu\n", + Decode(thread)->GetInstructions().size()); + s.Printf(" Total approximate memory usage: %0.2lf KiB\n", + (double)mem_used / 1024); return; } Index: lldb/source/Plugins/Trace/intel-pt/DecodedThread.h =================================================================== --- lldb/source/Plugins/Trace/intel-pt/DecodedThread.h +++ lldb/source/Plugins/Trace/intel-pt/DecodedThread.h @@ -81,6 +81,9 @@ /// The instruction pointer address, or \a LLDB_INVALID_ADDRESS if it is /// an error. lldb::addr_t GetLoadAddress() const; + + /// Get the size in bytes of a non-error instance of this class + static size_t GetNonErrorMemoryUsage(); /// \return /// An \a llvm::Error object if this class corresponds to an Error, or an @@ -112,6 +115,8 @@ IntelPTInstruction(const IntelPTInstruction &other) = delete; const IntelPTInstruction &operator=(const IntelPTInstruction &other) = delete; + // When adding new members to this class, make sure to update + // IntelPTInstruction::GetNonErrorMemoryUsage() if needed. pt_insn m_pt_insn; llvm::Optional<uint64_t> m_timestamp; std::unique_ptr<llvm::ErrorInfoBase> m_error; @@ -150,7 +155,13 @@ /// The size of the trace. size_t GetRawTraceSize() const; + /// The approximate size in bytes used by this instance, + /// including all the already decoded instructions. + size_t CalculateApproximateMemoryUsage() const; + private: + /// When adding new members to this class, make sure + /// to update \a CalculateApproximateMemoryUsage() accordingly. lldb::ThreadSP m_thread_sp; std::vector<IntelPTInstruction> m_instructions; size_t m_raw_trace_size; Index: lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp =================================================================== --- lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp +++ lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp @@ -48,6 +48,8 @@ lldb::addr_t IntelPTInstruction::GetLoadAddress() const { return m_pt_insn.ip; } +size_t IntelPTInstruction::GetNonErrorMemoryUsage() { return sizeof(IntelPTInstruction); } + Optional<uint64_t> IntelPTInstruction::GetTimestampCounter() const { return m_timestamp; } @@ -116,3 +118,9 @@ lldb::TraceCursorUP DecodedThread::GetCursor() { return std::make_unique<TraceCursorIntelPT>(m_thread_sp, shared_from_this()); } + +size_t DecodedThread::CalculateApproximateMemoryUsage() const { + return m_raw_trace_size + + IntelPTInstruction::GetNonErrorMemoryUsage() * m_instructions.size() + + sizeof(DecodedThread); +}
Index: lldb/test/API/commands/trace/TestTraceDumpInfo.py =================================================================== --- lldb/test/API/commands/trace/TestTraceDumpInfo.py +++ lldb/test/API/commands/trace/TestTraceDumpInfo.py @@ -38,5 +38,6 @@ substrs=['''Trace technology: intel-pt thread #1: tid = 3842849 - Raw trace size: 4096 bytes - Total number of instructions: 21''']) + Raw trace size: 4 KiB + Total number of instructions: 21 + Total approximate memory usage: 5.38 KiB''']) Index: lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp =================================================================== --- lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp +++ lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp @@ -111,9 +111,13 @@ return; } s.Printf("\n"); - s.Printf(" Raw trace size: %zu bytes\n", *raw_size); - s.Printf(" Total number of instructions: %zu\n", - Decode(thread)->GetInstructions().size()); + + size_t mem_used = Decode(thread)->CalculateApproximateMemoryUsage(); + s.Printf(" Raw trace size: %zu KiB\n", *raw_size / 1024); + s.Printf(" Total number of instructions: %zu\n", + Decode(thread)->GetInstructions().size()); + s.Printf(" Total approximate memory usage: %0.2lf KiB\n", + (double)mem_used / 1024); return; } Index: lldb/source/Plugins/Trace/intel-pt/DecodedThread.h =================================================================== --- lldb/source/Plugins/Trace/intel-pt/DecodedThread.h +++ lldb/source/Plugins/Trace/intel-pt/DecodedThread.h @@ -81,6 +81,9 @@ /// The instruction pointer address, or \a LLDB_INVALID_ADDRESS if it is /// an error. lldb::addr_t GetLoadAddress() const; + + /// Get the size in bytes of a non-error instance of this class + static size_t GetNonErrorMemoryUsage(); /// \return /// An \a llvm::Error object if this class corresponds to an Error, or an @@ -112,6 +115,8 @@ IntelPTInstruction(const IntelPTInstruction &other) = delete; const IntelPTInstruction &operator=(const IntelPTInstruction &other) = delete; + // When adding new members to this class, make sure to update + // IntelPTInstruction::GetNonErrorMemoryUsage() if needed. pt_insn m_pt_insn; llvm::Optional<uint64_t> m_timestamp; std::unique_ptr<llvm::ErrorInfoBase> m_error; @@ -150,7 +155,13 @@ /// The size of the trace. size_t GetRawTraceSize() const; + /// The approximate size in bytes used by this instance, + /// including all the already decoded instructions. + size_t CalculateApproximateMemoryUsage() const; + private: + /// When adding new members to this class, make sure + /// to update \a CalculateApproximateMemoryUsage() accordingly. lldb::ThreadSP m_thread_sp; std::vector<IntelPTInstruction> m_instructions; size_t m_raw_trace_size; Index: lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp =================================================================== --- lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp +++ lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp @@ -48,6 +48,8 @@ lldb::addr_t IntelPTInstruction::GetLoadAddress() const { return m_pt_insn.ip; } +size_t IntelPTInstruction::GetNonErrorMemoryUsage() { return sizeof(IntelPTInstruction); } + Optional<uint64_t> IntelPTInstruction::GetTimestampCounter() const { return m_timestamp; } @@ -116,3 +118,9 @@ lldb::TraceCursorUP DecodedThread::GetCursor() { return std::make_unique<TraceCursorIntelPT>(m_thread_sp, shared_from_this()); } + +size_t DecodedThread::CalculateApproximateMemoryUsage() const { + return m_raw_trace_size + + IntelPTInstruction::GetNonErrorMemoryUsage() * m_instructions.size() + + sizeof(DecodedThread); +}
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits