//===-- xray-graph-diff.h - XRay Graph Diff Renderer ------------*- 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 // //===----------------------------------------------------------------------===// // // Generate a DOT file to represent the difference between the function call // graph of two differnent traces. // //===----------------------------------------------------------------------===// #ifndef XRAY_GRAPH_DIFF_H #define XRAY_GRAPH_DIFF_H #include "xray-graph.h" #include "llvm/XRay/Graph.h" namespace llvm { namespace xray { // This class creates a graph representing the difference between two // xray-graphs And allows you to print it to a dot file, with optional color // coding. class GraphDiffRenderer { static const int N = 2; public: using StatType = GraphRenderer::StatType; using TimeStat = GraphRenderer::TimeStat; using GREdgeValueType = GraphRenderer::GraphT::EdgeValueType; using GRVertexValueType = GraphRenderer::GraphT::VertexValueType; struct EdgeAttribute { std::array CorrEdgePtr = {}; }; struct VertexAttribute { std::array CorrVertexPtr = {}; }; using GraphT = Graph; class Factory { std::array, N> G; public: template Factory(Ts &... Args) : G{{Args...}} {} Expected getGraphDiffRenderer(); }; private: GraphT G; GraphDiffRenderer() = default; public: void exportGraphAsDOT(raw_ostream &OS, StatType EdgeLabel = StatType::NONE, StatType EdgeColor = StatType::NONE, StatType VertexLabel = StatType::NONE, StatType VertexColor = StatType::NONE, int TruncLen = 40); const GraphT &getGraph() { return G; } }; } // namespace xray } // namespace llvm #endif