//===-- llvm/Support/Timer.h - Interval Timing Support ----------*- 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 LLVM_SUPPORT_TIMER_H #define LLVM_SUPPORT_TIMER_H #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/DataTypes.h" #include <cassert> #include <memory> #include <string> #include <vector> namespace llvm { class TimerGroup; class raw_ostream; class TimeRecord { … }; /// This class is used to track the amount of time spent between invocations of /// its startTimer()/stopTimer() methods. Given appropriate OS support it can /// also keep track of the RSS of the program at various points. By default, /// the Timer will print the amount of time it has captured to standard error /// when the last timer is destroyed, otherwise it is printed when its /// TimerGroup is destroyed. Timers do not print their information if they are /// never started. class Timer { … }; /// The TimeRegion class is used as a helper class to call the startTimer() and /// stopTimer() methods of the Timer class. When the object is constructed, it /// starts the timer specified as its argument. When it is destroyed, it stops /// the relevant timer. This makes it easy to time a region of code. class TimeRegion { … }; /// This class is basically a combination of TimeRegion and Timer. It allows /// you to declare a new timer, AND specify the region to time, all in one /// statement. All timers with the same name are merged. This is primarily /// used for debugging and for hunting performance problems. struct NamedRegionTimer : public TimeRegion { … }; /// The TimerGroup class is used to group together related timers into a single /// report that is printed when the TimerGroup is destroyed. It is illegal to /// destroy a TimerGroup object before all of the Timers in it are gone. A /// TimerGroup can be specified for a newly created timer in its constructor. class TimerGroup { … }; } // end namespace llvm #endif