Files
clang-p2996/lld/include/lld/Common/Timer.h
Amy Huang 6f7483b1ec Reland "[LLD] Remove global state in lld/COFF" after fixing asan and msan test failures
Original commit description:

  [LLD] Remove global state in lld/COFF

  This patch removes globals from the lldCOFF library, by moving globals
  into a context class (COFFLinkingContext) and passing it around wherever
  it's needed.

  See https://lists.llvm.org/pipermail/llvm-dev/2021-June/151184.html for
  context about removing globals from LLD.

  I also haven't moved the `driver` or `config` variables yet.

  Differential Revision: https://reviews.llvm.org/D109634

This reverts commit a2fd05ada9.

Original commits were b4fa71eed3
and e03c7e367a.
2021-09-17 17:18:42 -07:00

60 lines
1.3 KiB
C++

//===- 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