//===- Profile.h - XRay Profile Abstraction -------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // Defines the XRay Profile class representing the latency profile generated by // XRay's profiling mode. // //===----------------------------------------------------------------------===// #ifndef LLVM_XRAY_PROFILE_H #define LLVM_XRAY_PROFILE_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Error.h" #include <list> #include <utility> #include <vector> namespace llvm { namespace xray { class Profile; // We forward declare the Trace type for turning a Trace into a Profile. class Trace; /// This function will attempt to load an XRay Profiling Mode profile from the /// provided |Filename|. /// /// For any errors encountered in the loading of the profile data from /// |Filename|, this function will return an Error condition appropriately. Expected<Profile> loadProfile(StringRef Filename); /// This algorithm will merge two Profile instances into a single Profile /// instance, aggregating blocks by Thread ID. Profile mergeProfilesByThread(const Profile &L, const Profile &R); /// This algorithm will merge two Profile instances into a single Profile /// instance, aggregating blocks by function call stack. Profile mergeProfilesByStack(const Profile &L, const Profile &R); /// This function takes a Trace and creates a Profile instance from it. Expected<Profile> profileFromTrace(const Trace &T); /// Profile instances are thread-compatible. class Profile { … }; } // namespace xray } // namespace llvm #endif