/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include #include #include #include #include #include #include "cmInstrumentationQuery.h" class cmInstrumentation { public: // Read Queries cmInstrumentation(std::string const& binary_dir, bool clear_generated = false); // Create Query cmInstrumentation(std::string const& binary_dir, std::set& queries, std::set& hooks, std::string& callback); int InstrumentCommand( std::string command_type, std::vector const& command, std::function const& callback, cm::optional> options = cm::nullopt, cm::optional> arrayOptions = cm::nullopt, bool reloadQueriesAfterCommand = false); int InstrumentTest(std::string const& name, std::string const& command, std::vector const& args, int64_t result, std::chrono::steady_clock::time_point steadyStart, std::chrono::system_clock::time_point systemStart); void GetPreTestStats(); void LoadQueries(); bool HasQuery(); bool HasQuery(cmInstrumentationQuery::Query); bool ReadJSONQueries(std::string const& directory); void ReadJSONQuery(std::string const& file); void WriteJSONQuery(); int CollectTimingData(cmInstrumentationQuery::Hook hook); std::string errorMsg; private: void WriteInstrumentationJson(Json::Value& index, std::string const& directory, std::string const& file_name); static void InsertStaticSystemInformation(Json::Value& index); static void GetDynamicSystemInformation(double& memory, double& load); static void InsertDynamicSystemInformation(Json::Value& index, std::string const& instant); static void InsertTimingData( Json::Value& root, std::chrono::steady_clock::time_point steadyStart, std::chrono::system_clock::time_point systemStart); void ClearGeneratedQueries(); bool HasQueryFile(std::string const& file); static std::string GetCommandStr(std::vector const& args); static std::string ComputeSuffixHash(std::string const& command_str); static std::string ComputeSuffixTime(); std::string binaryDir; std::string timingDirv1; std::string userTimingDirv1; std::set queries; std::set hooks; std::vector callbacks; std::vector queryFiles; Json::Value preTestStats; bool hasQuery = false; };