| //===- Timer.h ----------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Linker |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLD_COMMON_TIMER_H |
| #define LLD_COMMON_TIMER_H |
| |
| #include "llvm/ADT/DenseMap.h" |
| #include "llvm/ADT/StringRef.h" |
| #include <assert.h> |
| #include <chrono> |
| #include <map> |
| #include <memory> |
| |
| namespace lld { |
| |
| class Timer; |
| |
| struct ScopedTimer { |
| explicit ScopedTimer(Timer &T); |
| |
| ~ScopedTimer(); |
| |
| void stop(); |
| |
| Timer *T = nullptr; |
| }; |
| |
| class Timer { |
| public: |
| Timer(llvm::StringRef Name, Timer &Parent); |
| |
| static Timer &root(); |
| |
| void start(); |
| void stop(); |
| void print(); |
| |
| double millis() const; |
| |
| private: |
| explicit Timer(llvm::StringRef Name); |
| void print(int Depth, double TotalDuration, bool Recurse = true) const; |
| |
| std::chrono::time_point<std::chrono::high_resolution_clock> StartTime; |
| std::chrono::nanoseconds Total; |
| std::vector<Timer *> Children; |
| std::string Name; |
| Timer *Parent; |
| }; |
| |
| } // namespace lld |
| |
| #endif |