mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-02 20:46:06 +00:00

This NFC prepares the TimeProfiler to support the construction and completion of time profiling 'entries' across threads. Add ClockType alias so we can change the clock in one place. (trivial) Use c++ usings instead of typedefs Rename Entry to TimeTraceProfilerEntry since this type will eventually become public. Add an intro comment. Add some smoke unit tests. Reviewed By: russell.gallop, rriddle, lattner, jloser Differential Revision: https://reviews.llvm.org/D133153
65 lines
1.9 KiB
C++
65 lines
1.9 KiB
C++
//===- unittests/TimeProfilerTest.cpp - TimeProfiler tests ----------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
// These are bare-minimum 'smoke' tests of the time profiler. Not tested:
|
|
// - multi-threading
|
|
// - 'Total' entries
|
|
// - elision of short or ill-formed entries
|
|
// - detail callback
|
|
// - no calls to now() if profiling is disabled
|
|
// - suppression of contributions to total entries for nested entries
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/TimeProfiler.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
|
|
void setupProfiler() {
|
|
timeTraceProfilerInitialize(/*TimeTraceGranularity=*/0, "test");
|
|
}
|
|
|
|
std::string teardownProfiler() {
|
|
SmallVector<char, 1024> smallVector;
|
|
raw_svector_ostream os(smallVector);
|
|
timeTraceProfilerWrite(os);
|
|
timeTraceProfilerCleanup();
|
|
return os.str().str();
|
|
}
|
|
|
|
TEST(TimeProfiler, Scope_Smoke) {
|
|
setupProfiler();
|
|
|
|
{ TimeTraceScope scope("event", "detail"); }
|
|
|
|
std::string json = teardownProfiler();
|
|
ASSERT_TRUE(json.find(R"("name":"event")") != std::string::npos);
|
|
ASSERT_TRUE(json.find(R"("detail":"detail")") != std::string::npos);
|
|
}
|
|
|
|
TEST(TimeProfiler, Begin_End_Smoke) {
|
|
setupProfiler();
|
|
|
|
timeTraceProfilerBegin("event", "detail");
|
|
timeTraceProfilerEnd();
|
|
|
|
std::string json = teardownProfiler();
|
|
ASSERT_TRUE(json.find(R"("name":"event")") != std::string::npos);
|
|
ASSERT_TRUE(json.find(R"("detail":"detail")") != std::string::npos);
|
|
}
|
|
|
|
TEST(TimeProfiler, Begin_End_Disabled) {
|
|
// Nothing should be observable here. The test is really just making sure
|
|
// we've not got a stray nullptr deref.
|
|
timeTraceProfilerBegin("event", "detail");
|
|
timeTraceProfilerEnd();
|
|
}
|
|
|
|
} // namespace
|