mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
2cd2b31d1c
Minimal tool to convert xray traces to Chrome's Trace Event Format. Summary: Make use of Chrome Trace Event format's Duration events and stack frame dict to produce Json files that chrome://tracing can visualize from xray function call traces. Trace Event format is more robust and has several features like argument logging, function categorization, multi process traces, etc. that we can add as needed. Duration events cover an important base case. Part of this change is rearranging the code so that the TrieNode data structure can be used from multiple tools and can carry parameterized baggage on the nodes. I put the actual behavior changes in llvm-xray convert exclusively. Exploring the trace of instrumented llc was pretty nifty if overwhelming. I can envision this being very useful for analyzing contention scenarios or tuning parameters like batch sizes in a producer consumer queue. For more targeted traces likemthis, let's talk about how we want to approach trace pruning. Reviewers: dberris, pelikan Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D39362 llvm-svn: 317531
45 lines
1.5 KiB
C++
45 lines
1.5 KiB
C++
//===- xray-converter.h - XRay Trace Conversion ---------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Defines the TraceConverter class for turning binary traces into
|
|
// human-readable text and vice versa.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef LLVM_TOOLS_LLVM_XRAY_XRAY_CONVERTER_H
|
|
#define LLVM_TOOLS_LLVM_XRAY_XRAY_CONVERTER_H
|
|
|
|
#include "func-id-helper.h"
|
|
#include "llvm/XRay/Trace.h"
|
|
#include "llvm/XRay/XRayRecord.h"
|
|
|
|
namespace llvm {
|
|
namespace xray {
|
|
|
|
class TraceConverter {
|
|
FuncIdConversionHelper &FuncIdHelper;
|
|
bool Symbolize;
|
|
|
|
public:
|
|
TraceConverter(FuncIdConversionHelper &FuncIdHelper, bool Symbolize = false)
|
|
: FuncIdHelper(FuncIdHelper), Symbolize(Symbolize) {}
|
|
|
|
void exportAsYAML(const Trace &Records, raw_ostream &OS);
|
|
void exportAsRAWv1(const Trace &Records, raw_ostream &OS);
|
|
|
|
/// For this conversion, the Function records within each thread are expected
|
|
/// to be in sorted TSC order. The trace event format encodes stack traces, so
|
|
/// the linear history is essential for correct output.
|
|
void exportAsChromeTraceEventFormat(const Trace &Records, raw_ostream &OS);
|
|
};
|
|
|
|
} // namespace xray
|
|
} // namespace llvm
|
|
|
|
#endif // LLVM_TOOLS_LLVM_XRAY_XRAY_CONVERTER_H
|