7 #ifndef JLM_UTIL_STATISTICS_HPP
8 #define JLM_UTIL_STATISTICS_HPP
20 #include <unordered_map>
66 using Measurement = std::variant<std::string, int64_t, uint64_t, double>;
69 using TimerList = std::list<std::pair<std::string, util::Timer>>;
87 [[nodiscard]] std::string_view
106 [[nodiscard]] std::string
107 Serialize(
char fieldSeparator,
char nameValueSeparator)
const;
129 [[nodiscard]]
const T &
133 return std::get<T>(measurement);
147 HasTimer(
const std::string & name)
const noexcept;
177 Measurements_.emplace_back(std::make_pair(std::move(name), std::move(value)));
197 GetTimer(
const std::string & name)
const;
226 "#PointsToGraphExternallyAvailableNodes";
228 "#PointsToGraphNodesTargetsAllExternallyAvailable";
240 static inline const char *
Timer =
"Time";
293 std::optional<FilePath> directory,
294 std::string moduleName)
387 [[nodiscard]]
const std::string &
405 [[nodiscard]]
const std::string &
497 std::vector<std::unique_ptr<Statistics>>::const_iterator
it_;
576 [[nodiscard]] std::unique_ptr<Statistics>
583 if (it->get()->GetId() ==
id)
585 auto result = std::move(*it);
590 throw std::out_of_range(
"No Statistics with the given id has been collected");
std::size_t Size() const noexcept
bool Contains(const ItemType &item) const noexcept
void SetOutputDirectory(FilePath directory)
size_t NumDemandedStatistics() const noexcept
bool HasOutputDirectory() const noexcept
std::optional< FilePath > Directory_
void SetUniqueString(std::string uniqueString)
void SetDemandedStatistics(HashSet< Statistics::Id > demandedStatistics)
const std::string & GetUniqueString() const noexcept
const HashSet< Statistics::Id > & GetDemandedStatistics() const noexcept
HashSet< Statistics::Id > DemandedStatistics_
StatisticsCollectorSettings()
StatisticsCollectorSettings(HashSet< Statistics::Id > demandedStatistics, std::optional< FilePath > directory, std::string moduleName)
const FilePath & GetOutputDirectory() const noexcept
void SetModuleName(std::string moduleName)
const FilePath & GetOrCreateOutputDirectory() const noexcept
bool isDemanded(Statistics::Id id) const noexcept
Checks if a statistics is demanded.
const std::string & GetModuleName() const noexcept
StatisticsCollectorSettings(HashSet< Statistics::Id > demandedStatistics)
std::string UniqueString_
friend StatisticsCollector
StatisticsIterator & operator++()
std::ptrdiff_t difference_type
const Statistics * GetStatistics() const noexcept
StatisticsIterator(const std::vector< std::unique_ptr< Statistics >>::const_iterator &it)
bool operator!=(const StatisticsIterator &other) const
const Statistics & operator*() const
const Statistics * operator->() const
bool operator==(const StatisticsIterator &other) const
StatisticsIterator operator++(int)
std::forward_iterator_tag iterator_category
std::vector< std::unique_ptr< Statistics > >::const_iterator it_
std::unique_ptr< Statistics > releaseStatistic(Statistics::Id id)
IteratorRange< StatisticsIterator > StatisticsRange
bool IsDemanded(const Statistics &statistics) const noexcept
void PrintStatistics()
Print collected statistics to file. If no statistics have been collected, this is a no-op.
bool IsDemanded(Statistics::Id id) const noexcept
const StatisticsCollectorSettings & GetSettings() const noexcept
StatisticsCollectorSettings Settings_
std::vector< std::unique_ptr< Statistics > > CollectedStatistics_
std::unordered_map< std::string, size_t > OutputFileCounter_
void CollectDemandedStatistics(std::unique_ptr< Statistics > statistics)
StatisticsRange CollectedStatistics() const noexcept
File createOutputFile(std::string fileNameSuffix, bool includeCount=false)
StatisticsCollector(StatisticsCollectorSettings settings)
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
std::list< std::pair< std::string, util::Timer > > TimerList
Statistics::Id StatisticsId_
Statistics(const Statistics::Id &statisticsId, util::FilePath sourceFile)
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
const T & GetMeasurementValue(const std::string &name) const
util::Timer & AddTimer(std::string name)
IteratorRange< MeasurementList::const_iterator > GetMeasurements() const
IteratorRange< TimerList::const_iterator > GetTimers() const
size_t GetTimerElapsedNanoseconds(const std::string &name) const
bool HasMeasurement(const std::string &name) const noexcept
@ InvariantValueRedirection
@ AliasAnalysisPrecisionEvaluation
@ AgnosticModRefSummarizer
@ RegionAwareModRefSummarizer
Statistics::Id GetId() const noexcept
std::variant< std::string, int64_t, uint64_t, double > Measurement
std::list< std::pair< std::string, Measurement > > MeasurementList
void AddMeasurement(std::string name, T value)
std::string CreateRandomAlphanumericString(std::size_t length)
static const char * FunctionNameLabel_
static const char * NumPointsToGraphAllocaNodes
static const char * NumPointsToGraphMemoryNodes
static const char * NumRvsdgNodes
static const char * NumFirstOrderRecurrences
static const char * NumPointsToGraphDeltaNodes
static const char * NumThreeAddressCodes
static const char * NumRvsdgNodesBefore
static const char * NumPointsToGraphRegisterNodes
static const char * NumSecondOrderRecurrences
static const char * NumPointsToGraphNodes
static const char * NumPointsToGraphMallocNodes
static const char * NumPointsToGraphImportNodes
static const char * NumRvsdgNodesAfter
static const char * NumPointsToGraphExternallyAvailableNodes
static const char * NumPointsToGraphExplicitEdges
static const char * NumTotalRecurrences
static const char * NumPointsToGraphLambdaNodes
static const char * NumPointsToGraphEdges
static const char * NumPointsToGraphNodesTargetsAllExternallyAvailable
static const char * NumLoopVariablesTotal
static const char * NumCfgNodes
static const char * NumRvsdgInputsAfter
static const char * NumConstantRecurrences
static const char * NumThirdOrderRecurrences
static const char * NumRvsdgInputsBefore