| //===-- xray-graph.h - XRay Function Call Graph 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // A class to get a color from a specified gradient. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef XRAY_COLOR_HELPER_H |
| #define XRAY_COLOR_HELPER_H |
| |
| #include <tuple> |
| |
| #include "llvm/ADT/ArrayRef.h" |
| |
| namespace llvm { |
| namespace xray { |
| |
| /// The color helper class it a healper class which allows you to easily get a |
| /// color in a gradient. This is used to color-code edges in XRay-Graph tools. |
| /// |
| /// There are two types of color schemes in this class: |
| /// - Sequential schemes, which are used to represent information from some |
| /// minimum to some maximum. These take an input in the range [0,1] |
| /// - Diverging schemes, which are used to represent information representing |
| /// differenes, or a range that goes from negative to positive. These take |
| /// an input in the range [-1,1]. |
| /// Usage; |
| /// ColorHelper S(ColorHelper::SequentialScheme::OrRd); //Chose a color scheme. |
| /// for (double p = 0.0; p <= 1; p += 0.1){ |
| /// cout() << S.getColor(p) << " \n"; // Sample the gradient at 0.1 intervals |
| /// } |
| /// |
| /// ColorHelper D(ColorHelper::DivergingScheme::Spectral); // Choose a color |
| /// // scheme. |
| /// for (double p= -1; p <= 1 ; p += 0.1){ |
| /// cout() << D.getColor(p) << " \n"; // sample the gradient at 0.1 intervals |
| /// } |
| class ColorHelper { |
| double MinIn; |
| double MaxIn; |
| |
| ArrayRef<std::tuple<uint8_t, uint8_t, uint8_t>> ColorMap; |
| ArrayRef<std::tuple<uint8_t, uint8_t, uint8_t>> BoundMap; |
| |
| public: |
| /// Enum of the availible Sequential Color Schemes |
| enum class SequentialScheme { |
| // Schemes based on the ColorBrewer Color schemes of the same name from |
| // http://www.colorbrewer.org/ by Cynthis A Brewer Penn State University. |
| Greys, |
| OrRd, |
| PuBu |
| }; |
| |
| ColorHelper(SequentialScheme S); |
| |
| /// Enum of the availible Diverging Color Schemes |
| enum class DivergingScheme { |
| // Schemes based on the ColorBrewer Color schemes of the same name from |
| // http://www.colorbrewer.org/ by Cynthis A Brewer Penn State University. |
| PiYG |
| }; |
| |
| ColorHelper(DivergingScheme S); |
| |
| // Sample the gradient at the input point. |
| std::tuple<uint8_t, uint8_t, uint8_t> getColorTuple(double Point) const; |
| |
| std::string getColorString(double Point) const; |
| |
| // Get the Default color, at the moment allways black. |
| std::tuple<uint8_t, uint8_t, uint8_t> getDefaultColorTuple() const { |
| return std::make_tuple(0, 0, 0); |
| } |
| |
| std::string getDefaultColorString() const { return "black"; } |
| |
| // Convert a tuple to a string |
| static std::string getColorString(std::tuple<uint8_t, uint8_t, uint8_t> t); |
| }; |
| } // namespace xray |
| } // namespace llvm |
| #endif |