- //===- Timer.h ----------------------------------------------*- 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 LLD_COMMON_TIMER_H 
- #define LLD_COMMON_TIMER_H 
-   
- #include "llvm/ADT/DenseMap.h" 
- #include "llvm/ADT/StringRef.h" 
- #include <assert.h> 
- #include <atomic> 
- #include <chrono> 
- #include <map> 
- #include <memory> 
- #include <vector> 
-   
- namespace lld { 
-   
- class Timer; 
-   
- struct ScopedTimer { 
-   explicit ScopedTimer(Timer &t); 
-   
-   ~ScopedTimer(); 
-   
-   void stop(); 
-   
-   std::chrono::time_point<std::chrono::high_resolution_clock> startTime; 
-   
-   Timer *t = nullptr; 
- }; 
-   
- class Timer { 
- public: 
-   Timer(llvm::StringRef name, Timer &parent); 
-   
-   // Creates the root timer. 
-   explicit Timer(llvm::StringRef name); 
-   
-   void addToTotal(std::chrono::nanoseconds time) { total += time.count(); } 
-   void print(); 
-   
-   double millis() const; 
-   
- private: 
-   void print(int depth, double totalDuration, bool recurse = true) const; 
-   
-   std::atomic<std::chrono::nanoseconds::rep> total; 
-   std::vector<Timer *> children; 
-   std::string name; 
- }; 
-   
- } // namespace lld 
-   
- #endif 
-