diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
commit | d9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch) | |
tree | 76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/clang-modernize/Core/PerfSupport.cpp | |
parent | 6a23d212897d5402035cfaea82260f6dae1c8f2a (diff) | |
download | bcm5719-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.cpp | 101 |
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"; + } + } +} |