LLVM  9.0.0svn
TimeProfiler.h
Go to the documentation of this file.
1 //===- llvm/Support/TimeProfiler.h - Hierarchical Time Profiler -*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_SUPPORT_TIME_PROFILER_H
10 #define LLVM_SUPPORT_TIME_PROFILER_H
11 
13 
14 namespace llvm {
15 
16 struct TimeTraceProfiler;
17 extern TimeTraceProfiler *TimeTraceProfilerInstance;
18 
19 /// Initialize the time trace profiler.
20 /// This sets up the global \p TimeTraceProfilerInstance
21 /// variable to be the profiler instance.
23 
24 /// Cleanup the time trace profiler, if it was initialized.
26 
27 /// Is the time trace profiler enabled, i.e. initialized?
28 inline bool timeTraceProfilerEnabled() {
29  return TimeTraceProfilerInstance != nullptr;
30 }
31 
32 /// Write profiling data to output file.
33 /// Data produced is JSON, in Chrome "Trace Event" format, see
34 /// https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview
36 
37 /// Manually begin a time section, with the given \p Name and \p Detail.
38 /// Profiler copies the string data, so the pointers can be given into
39 /// temporaries. Time sections can be hierarchical; every Begin must have a
40 /// matching End pair but they can nest.
43  llvm::function_ref<std::string()> Detail);
44 
45 /// Manually end the last time section.
47 
48 /// The TimeTraceScope is a helper class to call the begin and end functions
49 /// of the time trace profiler. When the object is constructed, it begins
50 /// the section; and when it is destroyed, it stops it. If the time profiler
51 /// is not initialized, the overhead is a single branch.
53 
54  TimeTraceScope() = delete;
55  TimeTraceScope(const TimeTraceScope &) = delete;
56  TimeTraceScope &operator=(const TimeTraceScope &) = delete;
57  TimeTraceScope(TimeTraceScope &&) = delete;
59 
61  if (TimeTraceProfilerInstance != nullptr)
62  timeTraceProfilerBegin(Name, Detail);
63  }
64  TimeTraceScope(StringRef Name, llvm::function_ref<std::string()> Detail) {
65  if (TimeTraceProfilerInstance != nullptr)
66  timeTraceProfilerBegin(Name, Detail);
67  }
69  if (TimeTraceProfilerInstance != nullptr)
71  }
72 };
73 
74 } // end namespace llvm
75 
76 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:23
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
TimeTraceScope(StringRef Name, StringRef Detail)
Definition: TimeProfiler.h:60
The TimeTraceScope is a helper class to call the begin and end functions of the time trace profiler...
Definition: TimeProfiler.h:52
An efficient, type-erasing, non-owning reference to a callable.
Definition: STLExtras.h:116
void timeTraceProfilerEnd()
Manually end the last time section.
void timeTraceProfilerInitialize()
Initialize the time trace profiler.
void timeTraceProfilerCleanup()
Cleanup the time trace profiler, if it was initialized.
bool timeTraceProfilerEnabled()
Is the time trace profiler enabled, i.e. initialized?
Definition: TimeProfiler.h:28
void timeTraceProfilerBegin(StringRef Name, StringRef Detail)
Manually begin a time section, with the given Name and Detail.
TimeTraceScope(StringRef Name, llvm::function_ref< std::string()> Detail)
Definition: TimeProfiler.h:64
TimeTraceScope & operator=(const TimeTraceScope &)=delete
void timeTraceProfilerWrite(raw_pwrite_stream &OS)
Write profiling data to output file.
TimeTraceProfiler * TimeTraceProfilerInstance
An abstract base class for streams implementations that also support a pwrite operation.
Definition: raw_ostream.h:340
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48