12 #include <string_view>
17 static const util::BijectiveMap<Statistics::Id, std::string_view> &
71 std::ostringstream ss;
73 ss <<
GetName() << fieldSeparator;
81 ss << mName << nameValueSeparator;
83 [&](
const auto & value)
89 for (
const auto & [mName, timer] :
Timers_)
94 ss << mName <<
"[ns]" << nameValueSeparator << timer.ns();
103 for (
const auto & [mName, _] : Measurements_)
127 for (
const auto & [mName, _] : Timers_)
136 for (
auto & [mName, timer] :
Timers_)
159 auto & timer =
Timers_.back().second;
174 fprintf(file.fd(),
"%s\n", statistics.Serialize(
' ',
':').c_str());
189 auto firstDot = fileNameSuffix.find(
'.');
190 if (firstDot == std::string::npos)
191 firstDot = fileNameSuffix.size();
194 strfmt(fileNameSuffix.substr(0, firstDot),
"-", count, fileNameSuffix.substr(firstDot));
197 std::string fileName;
202 fileName += fileNameSuffix;
204 auto fullPath = directory.Join(fileName);
205 if (fullPath.Exists())
206 throw Error(
"The generated output file name already exists: " + fullPath.to_str());
208 return File(fullPath);
std::size_t Size() const noexcept
const std::string & to_str() const noexcept
bool HasOutputDirectory() const noexcept
const std::string & GetUniqueString() const noexcept
const FilePath & GetOrCreateOutputDirectory() const noexcept
const std::string & GetModuleName() const noexcept
void PrintStatistics()
Print collected statistics to file. If no statistics have been collected, this is a no-op.
StatisticsCollectorSettings Settings_
std::unordered_map< std::string, size_t > OutputFileCounter_
StatisticsRange CollectedStatistics() const noexcept
File createOutputFile(std::string fileNameSuffix, bool includeCount=false)
size_t NumCollectedStatistics() const noexcept
util::Timer & GetTimer(const std::string &name)
util::FilePath SourceFile_
std::string_view GetName() const
const util::FilePath & GetSourceFile() const
Statistics::Id StatisticsId_
MeasurementList Measurements_
bool HasTimer(const std::string &name) const noexcept
std::string Serialize(char fieldSeparator, char nameValueSeparator) const
const Measurement & GetMeasurement(const std::string &name) const
util::Timer & AddTimer(std::string name)
IteratorRange< MeasurementList::const_iterator > GetMeasurements() const
IteratorRange< TimerList::const_iterator > GetTimers() const
bool HasMeasurement(const std::string &name) const noexcept
@ InvariantValueRedirection
@ AliasAnalysisPrecisionEvaluation
@ AgnosticModRefSummarizer
@ RegionAwareModRefSummarizer
std::variant< std::string, int64_t, uint64_t, double > Measurement
#define JLM_UNREACHABLE(msg)
static std::string strfmt(Args... args)
static const util::BijectiveMap< Statistics::Id, std::string_view > & GetStatisticsIdNames()