-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Record mainfile name in the Frontend time trace #99866
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-clang Author: Utkarsh Saxena (usx95) ChangesFull diff: https://github.com/llvm/llvm-project/pull/99866.diff 2 Files Affected:
diff --git a/clang/lib/Parse/ParseAST.cpp b/clang/lib/Parse/ParseAST.cpp
index 77ab3b556da58..53b0785b3e181 100644
--- a/clang/lib/Parse/ParseAST.cpp
+++ b/clang/lib/Parse/ParseAST.cpp
@@ -152,7 +152,13 @@ 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;
+ 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..9e2494da2bf35 100644
--- a/clang/unittests/Support/TimeProfilerTest.cpp
+++ b/clang/unittests/Support/TimeProfilerTest.cpp
@@ -81,7 +81,6 @@ std::string GetMetadata(json::Object *Event) {
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);
if (auto Line = Args->getInteger("line"))
@@ -209,7 +208,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 +265,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 +290,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>)
|
clang/lib/Parse/ParseAST.cpp
Outdated
llvm::TimeTraceMetadata M; | ||
const SourceManager &SM = S.getSourceManager(); | ||
if (const auto *FE = SM.getFileEntryForID(SM.getMainFileID())) | ||
M.File = FE->tryGetRealPathName(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we still put it under a flag for consistency?
I agree performance concerns are not an issue here, but we are outputting data in a different format now and the name of the main file is actually quite easy to get in most cases because it's passed as a command line argument.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
@@ -209,7 +208,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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT: a simple check in the test output code is probably a better trade-off than descreased readability because of a weird-looking(,
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed extraneous ,
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Summary: Test Plan: Reviewers: Subscribers: Tasks: Tags: Differential Revision: https://phabricator.intern.facebook.com/D60251280
This is done exactly once (only one Frontend event) and is therefore not expensive and does not require a flag.