[clang-tools-extra] [clang-doc] add ftime profiling (PR #97644)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 4 00:07:51 PDT 2024
https://github.com/PeterChou1 updated https://github.com/llvm/llvm-project/pull/97644
>From ff278188403a6f89e8c13f7a2330d978f31b1ab5 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Wed, 3 Jul 2024 15:42:22 -0400
Subject: [PATCH 1/4] [clang-doc] add ftime trace option
---
clang-tools-extra/clang-doc/BitcodeReader.cpp | 8 ++++
clang-tools-extra/clang-doc/Mapper.cpp | 11 ++++-
.../clang-doc/Representation.cpp | 2 +
clang-tools-extra/clang-doc/Representation.h | 5 +-
.../clang-doc/tool/ClangDocMain.cpp | 47 ++++++++++++++++++-
5 files changed, 69 insertions(+), 4 deletions(-)
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index bfb04e7407b38..975dbca3a2ce2 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -10,6 +10,7 @@
#include "llvm/ADT/IndexedMap.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/TimeProfiler.h"
#include <optional>
namespace clang {
@@ -670,6 +671,7 @@ llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, T I) {
template <>
llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, Reference *I) {
+ llvm::TimeTraceScope("clang-doc", "readRecord Reference");
Record R;
llvm::StringRef Blob;
llvm::Expected<unsigned> MaybeRecID = Stream.readRecord(ID, R, &Blob);
@@ -681,6 +683,7 @@ llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, Reference *I) {
// Read a block of records into a single info.
template <typename T>
llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) {
+ llvm::TimeTraceScope("clang-doc", "readBlock");
if (llvm::Error Err = Stream.EnterSubBlock(ID))
return Err;
@@ -711,6 +714,7 @@ llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) {
template <typename T>
llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
+ llvm::TimeTraceScope("clang-doc", "readSubBlock");
switch (ID) {
// Blocks can only have certain types of sub blocks.
case BI_COMMENT_BLOCK_ID: {
@@ -817,6 +821,7 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
ClangDocBitcodeReader::Cursor
ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) {
+ llvm::TimeTraceScope("clang-doc", "skipUntilRecordOrBlock");
BlockOrRecordID = 0;
while (!Stream.AtEndOfStream()) {
@@ -878,6 +883,7 @@ llvm::Error ClangDocBitcodeReader::validateStream() {
}
llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() {
+ llvm::TimeTraceScope("clang-doc", "readBlockInfoBlock");
Expected<std::optional<llvm::BitstreamBlockInfo>> MaybeBlockInfo =
Stream.ReadBlockInfoBlock();
if (!MaybeBlockInfo)
@@ -894,6 +900,7 @@ llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() {
template <typename T>
llvm::Expected<std::unique_ptr<Info>>
ClangDocBitcodeReader::createInfo(unsigned ID) {
+ llvm::TimeTraceScope("clang-doc", "createInfo");
std::unique_ptr<Info> I = std::make_unique<T>();
if (auto Err = readBlock(ID, static_cast<T *>(I.get())))
return std::move(Err);
@@ -902,6 +909,7 @@ ClangDocBitcodeReader::createInfo(unsigned ID) {
llvm::Expected<std::unique_ptr<Info>>
ClangDocBitcodeReader::readBlockToInfo(unsigned ID) {
+ llvm::TimeTraceScope("clang-doc", "readBlockToInfo");
switch (ID) {
case BI_NAMESPACE_BLOCK_ID:
return createInfo<NamespaceInfo>(ID);
diff --git a/clang-tools-extra/clang-doc/Mapper.cpp b/clang-tools-extra/clang-doc/Mapper.cpp
index bb8b7952980ac..a8875473649c1 100644
--- a/clang-tools-extra/clang-doc/Mapper.cpp
+++ b/clang-tools-extra/clang-doc/Mapper.cpp
@@ -13,11 +13,14 @@
#include "clang/Index/USRGeneration.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Error.h"
+#include "llvm/Support/TimeProfiler.h"
namespace clang {
namespace doc {
void MapASTVisitor::HandleTranslationUnit(ASTContext &Context) {
+ if (CDCtx.FTimeTrace)
+ llvm::timeTraceProfilerInitialize(CDCtx.Granularity, "clang-doc");
TraverseDecl(Context.getTranslationUnitDecl());
}
@@ -30,6 +33,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) {
if (D->getParentFunctionOrMethod())
return true;
+ llvm::timeTraceProfilerBegin("clang-doc", "emit info");
llvm::SmallString<128> USR;
// If there is an error generating a USR for the decl, skip this decl.
if (index::generateUSRForDecl(D, USR))
@@ -40,7 +44,9 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) {
auto I = serialize::emitInfo(D, getComment(D, D->getASTContext()),
getLine(D, D->getASTContext()), File,
IsFileInRootDir, CDCtx.PublicOnly);
+ llvm::timeTraceProfilerEnd();
+ llvm::timeTraceProfilerBegin("clang-doc", "serialize info");
// A null in place of I indicates that the serializer is skipping this decl
// for some reason (e.g. we're only reporting public decls).
if (I.first)
@@ -49,6 +55,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) {
if (I.second)
CDCtx.ECtx->reportResult(llvm::toHex(llvm::toStringRef(I.second->USR)),
serialize::serialize(I.second));
+ llvm::timeTraceProfilerEnd();
return true;
}
@@ -56,7 +63,9 @@ bool MapASTVisitor::VisitNamespaceDecl(const NamespaceDecl *D) {
return mapDecl(D);
}
-bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) { return mapDecl(D); }
+bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) {
+ return mapDecl(D);
+}
bool MapASTVisitor::VisitEnumDecl(const EnumDecl *D) { return mapDecl(D); }
diff --git a/clang-tools-extra/clang-doc/Representation.cpp b/clang-tools-extra/clang-doc/Representation.cpp
index d08afbb962189..23e739a675789 100644
--- a/clang-tools-extra/clang-doc/Representation.cpp
+++ b/clang-tools-extra/clang-doc/Representation.cpp
@@ -366,10 +366,12 @@ void Index::sort() {
ClangDocContext::ClangDocContext(tooling::ExecutionContext *ECtx,
StringRef ProjectName, bool PublicOnly,
+ bool FTimeTrace, int Granularity,
StringRef OutDirectory, StringRef SourceRoot,
StringRef RepositoryUrl,
std::vector<std::string> UserStylesheets)
: ECtx(ECtx), ProjectName(ProjectName), PublicOnly(PublicOnly),
+ FTimeTrace(FTimeTrace), Granularity(Granularity),
OutDirectory(OutDirectory), UserStylesheets(UserStylesheets) {
llvm::SmallString<128> SourceRootDir(SourceRoot);
if (SourceRoot.empty())
diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h
index d70c279f7a2bd..619fa34da8779 100644
--- a/clang-tools-extra/clang-doc/Representation.h
+++ b/clang-tools-extra/clang-doc/Representation.h
@@ -480,12 +480,15 @@ mergeInfos(std::vector<std::unique_ptr<Info>> &Values);
struct ClangDocContext {
ClangDocContext() = default;
ClangDocContext(tooling::ExecutionContext *ECtx, StringRef ProjectName,
- bool PublicOnly, StringRef OutDirectory, StringRef SourceRoot,
+ bool PublicOnly, bool FTimeTrace, int Granularity,
+ StringRef OutDirectory, StringRef SourceRoot,
StringRef RepositoryUrl,
std::vector<std::string> UserStylesheets);
tooling::ExecutionContext *ECtx;
std::string ProjectName; // Name of project clang-doc is documenting.
bool PublicOnly; // Indicates if only public declarations are documented.
+ bool FTimeTrace; // Indicates if ftime trace is turned on
+ int Granularity; // Granularity of ftime trace
std::string OutDirectory; // Directory for outputting generated files.
std::string SourceRoot; // Directory where processed files are stored. Links
// to definition locations will only be generated if
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index 6198a6e0cdcc3..db04d4ca9d62f 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -42,6 +42,7 @@
#include "llvm/Support/Signals.h"
#include "llvm/Support/ThreadPool.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/TimeProfiler.h"
#include <atomic>
#include <mutex>
#include <string>
@@ -99,6 +100,16 @@ URL of repository that hosts code.
Used for links to definition locations.)"),
llvm::cl::cat(ClangDocCategory));
+static llvm::cl::opt<bool> FTimeTrace(
+ "ftime-trace", llvm::cl::desc(R"(
+Turn on time profiler. Generates clang-doc-tracing.json)"),
+ llvm::cl::init(false), llvm::cl::cat(ClangDocCategory));
+
+static llvm::cl::opt<int> FTimeGranularity(
+ "ftime-gran", llvm::cl::desc(R"(
+Specify granularity for ftime-trace defaults to 200)"),
+ llvm::cl::init(200), llvm::cl::cat(ClangDocCategory));
+
enum OutputFormatTy {
md,
yaml,
@@ -229,6 +240,12 @@ Example usage for a project using a compile commands database:
return 1;
}
+ // turns on ftime trace profiling
+ if (FTimeTrace)
+ llvm::timeTraceProfilerInitialize(FTimeGranularity, "clang-doc");
+
+ llvm::TimeTraceScope("clang-doc", "main");
+
// Fail early if an invalid format was provided.
std::string Format = getFormatString();
llvm::outs() << "Emiting docs in " << Format << " format.\n";
@@ -249,6 +266,8 @@ Example usage for a project using a compile commands database:
Executor->get()->getExecutionContext(),
ProjectName,
PublicOnly,
+ FTimeTrace,
+ FTimeGranularity,
OutDirectory,
SourceRoot,
RepositoryUrl,
@@ -262,6 +281,7 @@ Example usage for a project using a compile commands database:
}
}
+ llvm::timeTraceProfilerBegin("clang-doc", "mapping phase");
// Mapping phase
llvm::outs() << "Mapping decls...\n";
auto Err =
@@ -276,10 +296,12 @@ Example usage for a project using a compile commands database:
return 1;
}
}
+ llvm::timeTraceProfilerEnd();
// Collect values into output by key.
// In ToolResults, the Key is the hashed USR and the value is the
// bitcode-encoded representation of the Info object.
+ llvm::timeTraceProfilerBegin("clang-doc", "collection phase");
llvm::outs() << "Collecting infos...\n";
llvm::StringMap<std::vector<StringRef>> USRToBitcode;
Executor->get()->getToolResults()->forEachResult(
@@ -287,6 +309,7 @@ Example usage for a project using a compile commands database:
auto R = USRToBitcode.try_emplace(Key, std::vector<StringRef>());
R.first->second.emplace_back(Value);
});
+ llvm::timeTraceProfilerEnd();
// Collects all Infos according to their unique USR value. This map is added
// to from the thread pool below and is protected by the USRToInfoMutex.
@@ -294,6 +317,7 @@ Example usage for a project using a compile commands database:
llvm::StringMap<std::unique_ptr<doc::Info>> USRToInfo;
// First reducing phase (reduce all decls into one info per decl).
+ llvm::timeTraceProfilerBegin("clang-doc", "reduction phase");
llvm::outs() << "Reducing " << USRToBitcode.size() << " infos...\n";
std::atomic<bool> Error;
Error = false;
@@ -302,8 +326,11 @@ Example usage for a project using a compile commands database:
llvm::DefaultThreadPool Pool(llvm::hardware_concurrency(ExecutorConcurrency));
for (auto &Group : USRToBitcode) {
Pool.async([&]() {
- std::vector<std::unique_ptr<doc::Info>> Infos;
+ if (FTimeTrace)
+ llvm::timeTraceProfilerInitialize(FTimeGranularity, "clang-doc");
+ llvm::timeTraceProfilerBegin("clang-doc", "decoding bitcode phase");
+ std::vector<std::unique_ptr<doc::Info>> Infos;
for (auto &Bitcode : Group.getValue()) {
llvm::BitstreamCursor Stream(Bitcode);
doc::ClangDocBitcodeReader Reader(Stream);
@@ -316,12 +343,16 @@ Example usage for a project using a compile commands database:
std::move(ReadInfos->begin(), ReadInfos->end(),
std::back_inserter(Infos));
}
+ llvm::timeTraceProfilerEnd();
+ llvm::timeTraceProfilerBegin("clang-doc", "merging bitcode phase");
auto Reduced = doc::mergeInfos(Infos);
if (!Reduced) {
llvm::errs() << llvm::toString(Reduced.takeError());
return;
}
+ llvm::timeTraceProfilerEnd();
+
// Add a reference to this Info in the Index
{
@@ -336,12 +367,14 @@ Example usage for a project using a compile commands database:
}
});
}
+ llvm::timeTraceProfilerEnd();
Pool.wait();
if (Error)
return 1;
+ llvm::timeTraceProfilerBegin("clang-doc", "generating phase");
// Ensure the root output directory exists.
if (std::error_code Err = llvm::sys::fs::create_directories(OutDirectory);
Err != std::error_code()) {
@@ -362,6 +395,16 @@ Example usage for a project using a compile commands database:
if (Err) {
llvm::outs() << "warning: " << toString(std::move(Err)) << "\n";
}
-
+ llvm::timeTraceProfilerEnd();
+
+ if (FTimeTrace) {
+ std::error_code EC;
+ llvm::raw_fd_ostream OS("clang-doc-tracing.json", EC, llvm::sys::fs::OF_Text);
+ if (!EC) {
+ llvm::timeTraceProfilerWrite(OS);
+ } else {
+ llvm::errs() << "Error opening file: " << EC.message() << "\n";
+ }
+ }
return 0;
}
>From 7367a758a14a5a07d4bbf4eb07d9dd0850f25b07 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Wed, 3 Jul 2024 17:56:02 -0400
Subject: [PATCH 2/4] [clang-doc] add ftime trace
---
clang-tools-extra/clang-doc/BitcodeReader.cpp | 12 ++++++------
clang-tools-extra/clang-doc/Mapper.cpp | 14 ++++++--------
clang-tools-extra/clang-doc/tool/ClangDocMain.cpp | 14 +++++++++-----
3 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index 975dbca3a2ce2..2fa228dd7b180 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -683,7 +683,7 @@ llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, Reference *I) {
// Read a block of records into a single info.
template <typename T>
llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) {
- llvm::TimeTraceScope("clang-doc", "readBlock");
+ llvm::TimeTraceScope("readBlock", "ClangDocBitcodeReader");
if (llvm::Error Err = Stream.EnterSubBlock(ID))
return Err;
@@ -714,7 +714,7 @@ llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) {
template <typename T>
llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
- llvm::TimeTraceScope("clang-doc", "readSubBlock");
+ llvm::TimeTraceScope("readSubBlock", "ClangDocBitcodeReader");
switch (ID) {
// Blocks can only have certain types of sub blocks.
case BI_COMMENT_BLOCK_ID: {
@@ -821,7 +821,7 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
ClangDocBitcodeReader::Cursor
ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) {
- llvm::TimeTraceScope("clang-doc", "skipUntilRecordOrBlock");
+ llvm::TimeTraceScope("skipUntilRecordOrBlock", "ClangDocBitcodeReader");
BlockOrRecordID = 0;
while (!Stream.AtEndOfStream()) {
@@ -883,7 +883,7 @@ llvm::Error ClangDocBitcodeReader::validateStream() {
}
llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() {
- llvm::TimeTraceScope("clang-doc", "readBlockInfoBlock");
+ llvm::TimeTraceScope("readBlockInfoBlock", "ClangDocBitcodeReader");
Expected<std::optional<llvm::BitstreamBlockInfo>> MaybeBlockInfo =
Stream.ReadBlockInfoBlock();
if (!MaybeBlockInfo)
@@ -900,7 +900,7 @@ llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() {
template <typename T>
llvm::Expected<std::unique_ptr<Info>>
ClangDocBitcodeReader::createInfo(unsigned ID) {
- llvm::TimeTraceScope("clang-doc", "createInfo");
+ llvm::TimeTraceScope("createInfo", "ClangDocBitcodeReader");
std::unique_ptr<Info> I = std::make_unique<T>();
if (auto Err = readBlock(ID, static_cast<T *>(I.get())))
return std::move(Err);
@@ -909,7 +909,7 @@ ClangDocBitcodeReader::createInfo(unsigned ID) {
llvm::Expected<std::unique_ptr<Info>>
ClangDocBitcodeReader::readBlockToInfo(unsigned ID) {
- llvm::TimeTraceScope("clang-doc", "readBlockToInfo");
+ llvm::TimeTraceScope("readBlockToInfo", "ClangDocBitcodeReader");
switch (ID) {
case BI_NAMESPACE_BLOCK_ID:
return createInfo<NamespaceInfo>(ID);
diff --git a/clang-tools-extra/clang-doc/Mapper.cpp b/clang-tools-extra/clang-doc/Mapper.cpp
index a8875473649c1..a60e6c70f9419 100644
--- a/clang-tools-extra/clang-doc/Mapper.cpp
+++ b/clang-tools-extra/clang-doc/Mapper.cpp
@@ -22,6 +22,8 @@ void MapASTVisitor::HandleTranslationUnit(ASTContext &Context) {
if (CDCtx.FTimeTrace)
llvm::timeTraceProfilerInitialize(CDCtx.Granularity, "clang-doc");
TraverseDecl(Context.getTranslationUnitDecl());
+ if (CDCtx.FTimeTrace)
+ llvm::timeTraceProfilerFinishThread();
}
template <typename T> bool MapASTVisitor::mapDecl(const T *D) {
@@ -33,7 +35,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) {
if (D->getParentFunctionOrMethod())
return true;
- llvm::timeTraceProfilerBegin("clang-doc", "emit info");
+ llvm::timeTraceProfilerBegin("emit info phase", "emit info");
llvm::SmallString<128> USR;
// If there is an error generating a USR for the decl, skip this decl.
if (index::generateUSRForDecl(D, USR))
@@ -46,7 +48,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) {
IsFileInRootDir, CDCtx.PublicOnly);
llvm::timeTraceProfilerEnd();
- llvm::timeTraceProfilerBegin("clang-doc", "serialize info");
+ llvm::timeTraceProfilerBegin("serializing info", "serializing");
// A null in place of I indicates that the serializer is skipping this decl
// for some reason (e.g. we're only reporting public decls).
if (I.first)
@@ -63,9 +65,7 @@ bool MapASTVisitor::VisitNamespaceDecl(const NamespaceDecl *D) {
return mapDecl(D);
}
-bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) {
- return mapDecl(D);
-}
+bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) { return mapDecl(D); }
bool MapASTVisitor::VisitEnumDecl(const EnumDecl *D) { return mapDecl(D); }
@@ -80,9 +80,7 @@ bool MapASTVisitor::VisitFunctionDecl(const FunctionDecl *D) {
return mapDecl(D);
}
-bool MapASTVisitor::VisitTypedefDecl(const TypedefDecl *D) {
- return mapDecl(D);
-}
+bool MapASTVisitor::VisitTypedefDecl(const TypedefDecl *D) { return mapDecl(D);}
bool MapASTVisitor::VisitTypeAliasDecl(const TypeAliasDecl *D) {
return mapDecl(D);
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index db04d4ca9d62f..4cd4a845629fa 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -281,7 +281,7 @@ Example usage for a project using a compile commands database:
}
}
- llvm::timeTraceProfilerBegin("clang-doc", "mapping phase");
+ llvm::timeTraceProfilerBegin("mapping phase", "mapping");
// Mapping phase
llvm::outs() << "Mapping decls...\n";
auto Err =
@@ -317,7 +317,7 @@ Example usage for a project using a compile commands database:
llvm::StringMap<std::unique_ptr<doc::Info>> USRToInfo;
// First reducing phase (reduce all decls into one info per decl).
- llvm::timeTraceProfilerBegin("clang-doc", "reduction phase");
+ llvm::timeTraceProfilerBegin("reduction phase", "reducing");
llvm::outs() << "Reducing " << USRToBitcode.size() << " infos...\n";
std::atomic<bool> Error;
Error = false;
@@ -329,7 +329,7 @@ Example usage for a project using a compile commands database:
if (FTimeTrace)
llvm::timeTraceProfilerInitialize(FTimeGranularity, "clang-doc");
- llvm::timeTraceProfilerBegin("clang-doc", "decoding bitcode phase");
+ llvm::timeTraceProfilerBegin("decoding bitcode phase", "decoding");
std::vector<std::unique_ptr<doc::Info>> Infos;
for (auto &Bitcode : Group.getValue()) {
llvm::BitstreamCursor Stream(Bitcode);
@@ -345,7 +345,7 @@ Example usage for a project using a compile commands database:
}
llvm::timeTraceProfilerEnd();
- llvm::timeTraceProfilerBegin("clang-doc", "merging bitcode phase");
+ llvm::timeTraceProfilerBegin("merging bitcode phase", "merging");
auto Reduced = doc::mergeInfos(Infos);
if (!Reduced) {
llvm::errs() << llvm::toString(Reduced.takeError());
@@ -365,6 +365,10 @@ Example usage for a project using a compile commands database:
std::lock_guard<llvm::sys::Mutex> Guard(USRToInfoMutex);
USRToInfo[Group.getKey()] = std::move(Reduced.get());
}
+
+ if (CDCtx.FTimeTrace)
+ llvm::timeTraceProfilerFinishThread();
+
});
}
llvm::timeTraceProfilerEnd();
@@ -374,7 +378,7 @@ Example usage for a project using a compile commands database:
if (Error)
return 1;
- llvm::timeTraceProfilerBegin("clang-doc", "generating phase");
+ llvm::timeTraceProfilerBegin("generating phase", "generating");
// Ensure the root output directory exists.
if (std::error_code Err = llvm::sys::fs::create_directories(OutDirectory);
Err != std::error_code()) {
>From 73d03758acbbe42f85b713684ea852d02fb8e2b1 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Wed, 3 Jul 2024 18:42:58 -0400
Subject: [PATCH 3/4] [clang-doc] clang-format
---
clang-tools-extra/clang-doc/tool/ClangDocMain.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index 4cd4a845629fa..bb278a858fd1d 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -271,8 +271,7 @@ Example usage for a project using a compile commands database:
OutDirectory,
SourceRoot,
RepositoryUrl,
- {UserStylesheets.begin(), UserStylesheets.end()}
- };
+ {UserStylesheets.begin(), UserStylesheets.end()}};
if (Format == "html") {
if (auto Err = getHtmlAssetFiles(argv[0], CDCtx)) {
@@ -403,7 +402,8 @@ Example usage for a project using a compile commands database:
if (FTimeTrace) {
std::error_code EC;
- llvm::raw_fd_ostream OS("clang-doc-tracing.json", EC, llvm::sys::fs::OF_Text);
+ llvm::raw_fd_ostream OS("clang-doc-tracing.json", EC,
+ llvm::sys::fs::OF_Text);
if (!EC) {
llvm::timeTraceProfilerWrite(OS);
} else {
>From b47fb667b48d484f617e0f2a2bfa16553ce8a310 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Thu, 4 Jul 2024 03:07:19 -0400
Subject: [PATCH 4/4] [clang-doc] clang-format
---
clang-tools-extra/clang-doc/BitcodeReader.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index 2fa228dd7b180..eef8c1b6e7f0a 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -9,8 +9,8 @@
#include "BitcodeReader.h"
#include "llvm/ADT/IndexedMap.h"
#include "llvm/Support/Error.h"
-#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/TimeProfiler.h"
+#include "llvm/Support/raw_ostream.h"
#include <optional>
namespace clang {
More information about the cfe-commits
mailing list