[clang] 280b04f - Record mainfile name in the Frontend time trace (#99866)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 22 08:10:44 PDT 2024
Author: Utkarsh Saxena
Date: 2024-07-22T17:10:41+02:00
New Revision: 280b04f65a169f09249031e5e12a30584ce2e8e0
URL: https://github.com/llvm/llvm-project/commit/280b04f65a169f09249031e5e12a30584ce2e8e0
DIFF: https://github.com/llvm/llvm-project/commit/280b04f65a169f09249031e5e12a30584ce2e8e0.diff
LOG: Record mainfile name in the Frontend time trace (#99866)
Added:
Modified:
clang/lib/Parse/ParseAST.cpp
clang/unittests/Support/TimeProfilerTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Parse/ParseAST.cpp b/clang/lib/Parse/ParseAST.cpp
index 77ab3b556da58..e008cc0e38ced 100644
--- a/clang/lib/Parse/ParseAST.cpp
+++ b/clang/lib/Parse/ParseAST.cpp
@@ -152,7 +152,15 @@ void clang::ParseAST(Sema &S, bool PrintStats, bool SkipFunctionBodies) {
bool HaveLexer = S.getPreprocessor().getCurrentLexer();
if (HaveLexer) {
- llvm::TimeTraceScope TimeScope("Frontend");
+ llvm::TimeTraceScope TimeScope("Frontend", [&]() {
+ llvm::TimeTraceMetadata M;
+ if (llvm::isTimeTraceVerbose()) {
+ const SourceManager &SM = S.getSourceManager();
+ if (const auto *FE = SM.getFileEntryForID(SM.getMainFileID()))
+ M.File = FE->tryGetRealPathName();
+ }
+ return M;
+ });
P.Initialize();
Parser::DeclGroupPtrTy ADecl;
Sema::ModuleImportState ImportState;
diff --git a/clang/unittests/Support/TimeProfilerTest.cpp b/clang/unittests/Support/TimeProfilerTest.cpp
index 56d880cffde61..f53fe71d630bf 100644
--- a/clang/unittests/Support/TimeProfilerTest.cpp
+++ b/clang/unittests/Support/TimeProfilerTest.cpp
@@ -76,18 +76,18 @@ bool compileFromString(StringRef Code, StringRef Standard, StringRef File,
}
std::string GetMetadata(json::Object *Event) {
- std::string Metadata;
- llvm::raw_string_ostream OS(Metadata);
+ std::string M;
+ llvm::raw_string_ostream OS(M);
if (json::Object *Args = Event->getObject("args")) {
if (auto Detail = Args->getString("detail"))
OS << Detail;
// Use only filename to not include os-specific path separators.
if (auto File = Args->getString("file"))
- OS << ", " << llvm::sys::path::filename(*File);
+ OS << (M.empty() ? "" : ", ") << llvm::sys::path::filename(*File);
if (auto Line = Args->getInteger("line"))
OS << ":" << *Line;
}
- return Metadata;
+ return M;
}
// Returns pretty-printed trace graph.
@@ -209,7 +209,7 @@ constexpr int slow_init_list[] = {1, 1, 2, 3, 5, 8, 13, 21}; // 25th line
ASSERT_TRUE(compileFromString(Code, "-std=c++20", "test.cc"));
std::string Json = teardownProfiler();
ASSERT_EQ(R"(
-Frontend
+Frontend (test.cc)
| ParseDeclarationOrFunctionDefinition (test.cc:2:1)
| ParseDeclarationOrFunctionDefinition (test.cc:6:1)
| | ParseFunctionDefinition (slow_func)
@@ -266,7 +266,7 @@ TEST(TimeProfilerTest, TemplateInstantiations) {
/*Headers=*/{{"a.h", A_H}, {"b.h", B_H}}));
std::string Json = teardownProfiler();
ASSERT_EQ(R"(
-Frontend
+Frontend (test.cc)
| ParseFunctionDefinition (fooB)
| ParseFunctionDefinition (fooMTA)
| ParseFunctionDefinition (fooA)
@@ -291,7 +291,7 @@ struct {
ASSERT_TRUE(compileFromString(Code, "-std=c99", "test.c"));
std::string Json = teardownProfiler();
ASSERT_EQ(R"(
-Frontend
+Frontend (test.c)
| ParseDeclarationOrFunctionDefinition (test.c:2:1)
| | isIntegerConstantExpr (<test.c:3:18>)
| | EvaluateKnownConstIntCheckOverflow (<test.c:3:18>)
More information about the cfe-commits
mailing list