As previously discussed with @jj10306, we didn't really have a name for the post-mortem (or offline) trace session representation, which is in fact a folder with a bunch of files. We decided to call this folder "trace bundle", and the main JSON file in it "trace bundle description file". This naming is pretty decent, so I'm refactoring all the existing code to account for that. Differential Revision: https://reviews.llvm.org/D128484
93 lines
2.6 KiB
C++
93 lines
2.6 KiB
C++
//===-- TraceIntelPTJSONStructs.h -----------------------------*- C++ //-*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACEINTELPTJSONSTRUCTS_H
|
|
#define LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACEINTELPTJSONSTRUCTS_H
|
|
|
|
#include "lldb/lldb-types.h"
|
|
|
|
#include "lldb/Utility/TraceIntelPTGDBRemotePackets.h"
|
|
|
|
#include "llvm/ADT/Optional.h"
|
|
#include "llvm/Support/JSON.h"
|
|
|
|
#include <intel-pt.h>
|
|
#include <vector>
|
|
|
|
namespace lldb_private {
|
|
namespace trace_intel_pt {
|
|
|
|
struct JSONModule {
|
|
std::string system_path;
|
|
llvm::Optional<std::string> file;
|
|
JSONUINT64 load_address;
|
|
llvm::Optional<std::string> uuid;
|
|
};
|
|
|
|
struct JSONThread {
|
|
uint64_t tid;
|
|
llvm::Optional<std::string> ipt_trace;
|
|
};
|
|
|
|
struct JSONProcess {
|
|
uint64_t pid;
|
|
llvm::Optional<std::string> triple;
|
|
std::vector<JSONThread> threads;
|
|
std::vector<JSONModule> modules;
|
|
};
|
|
|
|
struct JSONCpu {
|
|
lldb::cpu_id_t id;
|
|
std::string ipt_trace;
|
|
std::string context_switch_trace;
|
|
};
|
|
|
|
struct JSONTraceBundleDescription {
|
|
std::string type;
|
|
pt_cpu cpu_info;
|
|
std::vector<JSONProcess> processes;
|
|
llvm::Optional<std::vector<JSONCpu>> cpus;
|
|
llvm::Optional<LinuxPerfZeroTscConversion> tsc_perf_zero_conversion;
|
|
|
|
llvm::Optional<std::vector<lldb::cpu_id_t>> GetCpuIds();
|
|
};
|
|
|
|
llvm::json::Value toJSON(const JSONModule &module);
|
|
|
|
llvm::json::Value toJSON(const JSONThread &thread);
|
|
|
|
llvm::json::Value toJSON(const JSONProcess &process);
|
|
|
|
llvm::json::Value toJSON(const JSONCpu &cpu);
|
|
|
|
llvm::json::Value toJSON(const pt_cpu &cpu_info);
|
|
|
|
llvm::json::Value toJSON(const JSONTraceBundleDescription &bundle_description);
|
|
|
|
bool fromJSON(const llvm::json::Value &value, JSONModule &module,
|
|
llvm::json::Path path);
|
|
|
|
bool fromJSON(const llvm::json::Value &value, JSONThread &thread,
|
|
llvm::json::Path path);
|
|
|
|
bool fromJSON(const llvm::json::Value &value, JSONProcess &process,
|
|
llvm::json::Path path);
|
|
|
|
bool fromJSON(const llvm::json::Value &value, JSONCpu &cpu,
|
|
llvm::json::Path path);
|
|
|
|
bool fromJSON(const llvm::json::Value &value, pt_cpu &cpu_info,
|
|
llvm::json::Path path);
|
|
|
|
bool fromJSON(const llvm::json::Value &value, JSONTraceBundleDescription &bundle_description,
|
|
llvm::json::Path path);
|
|
} // namespace trace_intel_pt
|
|
} // namespace lldb_private
|
|
|
|
#endif // LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACEINTELPTJSONSTRUCTS_H
|