summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-modernize/Core/PerfSupport.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
commitd9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch)
tree76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/clang-modernize/Core/PerfSupport.cpp
parent6a23d212897d5402035cfaea82260f6dae1c8f2a (diff)
downloadbcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.tar.gz
bcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.zip
Rename cpp11-migrate to clang-modernize.
There is no reason to expect this tool to be limited to C++11, it seems very likely to be of on-going interest. It seems likely to be useful for modernizing even as new libraries come out in TSes and other formats than a complete standard. Fundamentally, we need something a bit more general. After some discussion on the list, going with 'clang-modernize'. I've tried to do a reasonably comprehensive job of fixing up the names, but I may still have missed some. Feel free to poke me if you spot any fallout here. Things I've tried reasonably hard to find and fix: - cpp11-migrate -> clang-modernize - Migrator -> Modernizer - Clean up the introductory documentation that was C++11 specific. I'll also point out that this tool continues to delight me. =] Also, a huge thanks to those who have so carefully, thoroughly documented the tool. The docs here are simply phenomenal. Every tool should be this well documented. I hope I have updated the documentation reasonably well, but I'm not very good at documentation, so review much appreciated. llvm-svn: 189960
Diffstat (limited to 'clang-tools-extra/clang-modernize/Core/PerfSupport.cpp')
-rw-r--r--clang-tools-extra/clang-modernize/Core/PerfSupport.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-modernize/Core/PerfSupport.cpp b/clang-tools-extra/clang-modernize/Core/PerfSupport.cpp
new file mode 100644
index 00000000000..e074bd123ef
--- /dev/null
+++ b/clang-tools-extra/clang-modernize/Core/PerfSupport.cpp
@@ -0,0 +1,101 @@
+//===-- Core/PerfSupport.cpp - Perf measurement helpers -------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// \brief This file provides implementations for performance measuring helpers.
+///
+//===----------------------------------------------------------------------===//
+
+#include "PerfSupport.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Format.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/Process.h"
+#include "llvm/Support/Path.h"
+
+void collectSourcePerfData(const Transform &T, SourcePerfData &Data) {
+ for (Transform::TimingVec::const_iterator I = T.timing_begin(),
+ E = T.timing_end();
+ I != E; ++I) {
+ SourcePerfData::iterator DataI = Data.insert(
+ SourcePerfData::value_type(I->first, std::vector<PerfItem>())).first;
+ DataI->second
+ .push_back(PerfItem(T.getName(), I->second.getProcessTime() * 1000.0));
+ }
+}
+
+void writePerfDataJSON(
+ const llvm::StringRef DirectoryName,
+ const SourcePerfData &TimingResults) {
+ // Create directory path if it doesn't exist
+ llvm::sys::fs::create_directories(DirectoryName);
+
+ // Get PID and current time.
+ // FIXME: id_type on Windows is NOT a process id despite the function name.
+ // Need to call GetProcessId() providing it what get_id() returns. For now
+ // disabling PID-based file names until this is fixed properly.
+ //llvm::sys::self_process *SP = llvm::sys::process::get_self();
+ //id_type Pid = SP->get_id();
+ unsigned Pid = 0;
+ llvm::TimeRecord T = llvm::TimeRecord::getCurrentTime();
+
+ std::string FileName;
+ llvm::raw_string_ostream SS(FileName);
+ SS << DirectoryName << "/" << static_cast<int>(T.getWallTime()) << "_" << Pid
+ << ".json";
+
+ std::string ErrorInfo;
+ llvm::raw_fd_ostream FileStream(SS.str().c_str(), ErrorInfo);
+ FileStream << "{\n";
+ FileStream << " \"Sources\" : [\n";
+ for (SourcePerfData::const_iterator I = TimingResults.begin(),
+ E = TimingResults.end();
+ I != E; ++I) {
+ // Terminate the last source with a comma before continuing to the next one.
+ if (I != TimingResults.begin())
+ FileStream << ",\n";
+
+ FileStream << " {\n";
+ FileStream << " \"Source \" : \"" << I->first << "\",\n";
+ FileStream << " \"Data\" : [\n";
+ for (std::vector<PerfItem>::const_iterator IE = I->second.begin(),
+ EE = I->second.end();
+ IE != EE; ++IE) {
+ // Terminate the last perf item with a comma before continuing to the next
+ // one.
+ if (IE != I->second.begin())
+ FileStream << ",\n";
+
+ FileStream << " {\n";
+ FileStream << " \"TimerId\" : \"" << IE->Label << "\",\n";
+ FileStream << " \"Time\" : " << llvm::format("%.2f", IE->Duration)
+ << "\n";
+
+ FileStream << " }";
+
+ }
+ FileStream << "\n ]\n";
+ FileStream << " }";
+ }
+ FileStream << "\n ]\n";
+ FileStream << "}";
+}
+
+void dumpPerfData(const SourcePerfData &Data) {
+ for (SourcePerfData::const_iterator I = Data.begin(), E = Data.end(); I != E;
+ ++I) {
+ llvm::errs() << I->first << ":\n";
+ for (std::vector<PerfItem>::const_iterator VecI = I->second.begin(),
+ VecE = I->second.end();
+ VecI != VecE; ++VecI) {
+ llvm::errs() << " " << VecI->Label << ": "
+ << llvm::format("%.1f", VecI->Duration) << "ms\n";
+ }
+ }
+}
OpenPOWER on IntegriCloud