wallace added inline comments.
================ Comment at: lldb/docs/lldb-gdb-remote.txt:465-474 // "tid": <decimal integer>, // "binaryData": [ // { // "kind": <string>, // Identifier for some binary data related to this thread to // fetch with the jLLDBTraceGetBinaryData packet. // "size": <decimal integer>, ---------------- jj10306 wrote: > wallace wrote: > > wallace wrote: > > > jj10306 wrote: > > > > Should the thread info be optional now that we have an optional > > > > `cores`? If not, can you explain how this output works in the case that > > > > you are doing per core tracing? Will both the tid binary data and the > > > > cores binary data section be populated? > > > I'll make this field optional and include more documentation below > > in the end i didn't make this optional but instead forced the per-core case > > to return all threads > so the tid field of a tracedThread object will be populated but the > binaryData will not be populated in the tracedThread object but instead in > the cores section? yes, exactly ================ Comment at: lldb/source/Plugins/Process/Linux/IntelPTCollector.h:152-156 + IntelPTPerThreadProcessTraceUP m_per_thread_process_trace_up; + /// Cores traced due to per-core "process tracing". Only one active + /// "process tracing" instance is allowed for a single process. + /// This might be \b nullptr. + IntelPTMultiCoreTraceUP m_per_core_process_trace_up; ---------------- jj10306 wrote: > wallace wrote: > > jj10306 wrote: > > > So these are mutually exclusive tight? > > yes, I'll leave a comment about that here > this could be overkill, but potentially we could use a union here to enforce > this invariant and a boolean flag/enum to determine which process tracing > "handler" is being used > ``` > bool is_per_core_process_tracing_enabled; // used to determine how to > interpret the union > union { > IntelPTPerThreadProcessTraceUP m_per_thread_process_trace_up; > IntelPTMultiCoreTraceUP m_per_core_process_trace_up; > > }; > ``` > imo this is much more clearly expresses the invariant of only one of the > process tracing "handles" being non null at a time. > wdyt? I tried this, but using unions with complex types requires some non-trivial work. std::variant would be a good choice but is not available in the c++ version used by llvm. So in this case I think the current implementation is the simpler. However, I'd rather create an interface and have one single instance based on that interface. I'll try that ================ Comment at: lldb/source/Plugins/Process/Linux/Perf.h:119 /// /// \param[in] group_fd + /// File descriptor of the group leader. \b -1 indicated that this ---------------- jj10306 wrote: > nit: we could make this optional as well and just default to passing in -1 to > be consistent with cpu and pid good idea ================ Comment at: lldb/source/Utility/TraceGDBRemotePackets.cpp:124 +json::Value toJSON(const TraceCoreState &packet) { + return json::Value(Object{{"coreId", static_cast<int64_t>(packet.core_id)}, + {"binaryData", packet.binary_data}}); ---------------- jj10306 wrote: > isn't uint64_t serialization and deserialization now supported? good catch Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D124858/new/ https://reviews.llvm.org/D124858 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits