1//===- unittests/TimeProfilerTest.cpp - TimeProfiler tests ----------------===//
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// These are bare-minimum 'smoke' tests of the time profiler. Not tested:
9// - multi-threading
10// - 'Total' entries
11// - elision of short or ill-formed entries
12// - detail callback
13// - no calls to now() if profiling is disabled
14// - suppression of contributions to total entries for nested entries
15//===----------------------------------------------------------------------===//
16
17#include "llvm/Support/TimeProfiler.h"
18#include "gtest/gtest.h"
19
20using namespace llvm;
21
22namespace {
23
24void setupProfiler() {
25 timeTraceProfilerInitialize(/*TimeTraceGranularity=*/0, ProcName: "test");
26}
27
28std::string teardownProfiler() {
29 SmallVector<char, 1024> smallVector;
30 raw_svector_ostream os(smallVector);
31 timeTraceProfilerWrite(OS&: os);
32 timeTraceProfilerCleanup();
33 return os.str().str();
34}
35
36TEST(TimeProfiler, Scope_Smoke) {
37 setupProfiler();
38
39 { TimeTraceScope scope("event", "detail"); }
40
41 std::string json = teardownProfiler();
42 ASSERT_TRUE(json.find(R"("name":"event")") != std::string::npos);
43 ASSERT_TRUE(json.find(R"("detail":"detail")") != std::string::npos);
44}
45
46TEST(TimeProfiler, Begin_End_Smoke) {
47 setupProfiler();
48
49 timeTraceProfilerBegin(Name: "event", Detail: "detail");
50 timeTraceProfilerEnd();
51
52 std::string json = teardownProfiler();
53 ASSERT_TRUE(json.find(R"("name":"event")") != std::string::npos);
54 ASSERT_TRUE(json.find(R"("detail":"detail")") != std::string::npos);
55}
56
57TEST(TimeProfiler, Async_Begin_End_Smoke) {
58 setupProfiler();
59
60 auto *Profiler = timeTraceAsyncProfilerBegin(Name: "event", Detail: "detail");
61 timeTraceProfilerEnd(E: Profiler);
62
63 std::string json = teardownProfiler();
64 ASSERT_TRUE(json.find(R"("name":"event")") != std::string::npos);
65 ASSERT_TRUE(json.find(R"("detail":"detail")") != std::string::npos);
66}
67
68TEST(TimeProfiler, Begin_End_Disabled) {
69 // Nothing should be observable here. The test is really just making sure
70 // we've not got a stray nullptr deref.
71 timeTraceProfilerBegin(Name: "event", Detail: "detail");
72 timeTraceProfilerEnd();
73}
74
75} // namespace
76

source code of llvm/unittests/Support/TimeProfilerTest.cpp