cmInstrumentation.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include "cmConfigure.h" // IWYU pragma: keep
  5. #include <chrono>
  6. #include <functional>
  7. #include <map>
  8. #include <set>
  9. #include <string>
  10. #include <vector>
  11. #include <cm/optional>
  12. #include <cm3p/json/value.h>
  13. #include <stdint.h>
  14. #include "cmInstrumentationQuery.h"
  15. class cmInstrumentation
  16. {
  17. public:
  18. cmInstrumentation(std::string const& binary_dir);
  19. int InstrumentCommand(
  20. std::string command_type, std::vector<std::string> const& command,
  21. std::function<int()> const& callback,
  22. cm::optional<std::map<std::string, std::string>> options = cm::nullopt,
  23. cm::optional<std::map<std::string, std::string>> arrayOptions =
  24. cm::nullopt,
  25. bool reloadQueriesAfterCommand = false);
  26. std::string InstrumentTest(std::string const& name,
  27. std::string const& command,
  28. std::vector<std::string> const& args,
  29. int64_t result,
  30. std::chrono::steady_clock::time_point steadyStart,
  31. std::chrono::system_clock::time_point systemStart,
  32. std::string config);
  33. void GetPreTestStats();
  34. void LoadQueries();
  35. bool HasQuery() const;
  36. bool HasQuery(cmInstrumentationQuery::Query) const;
  37. bool HasHook(cmInstrumentationQuery::Hook) const;
  38. bool HasPreOrPostBuildHook() const;
  39. bool ReadJSONQueries(std::string const& directory);
  40. void ReadJSONQuery(std::string const& file);
  41. void WriteJSONQuery(std::set<cmInstrumentationQuery::Query> const& queries,
  42. std::set<cmInstrumentationQuery::Hook> const& hooks,
  43. std::vector<std::vector<std::string>> const& callback);
  44. void ClearGeneratedQueries();
  45. int CollectTimingData(cmInstrumentationQuery::Hook hook);
  46. int SpawnBuildDaemon();
  47. int CollectTimingAfterBuild(int ppid);
  48. void AddHook(cmInstrumentationQuery::Hook hook);
  49. void AddQuery(cmInstrumentationQuery::Query query);
  50. std::string errorMsg;
  51. std::string const& GetCDashDir();
  52. private:
  53. void WriteInstrumentationJson(Json::Value& index,
  54. std::string const& directory,
  55. std::string const& file_name);
  56. static void InsertStaticSystemInformation(Json::Value& index);
  57. static void GetDynamicSystemInformation(double& memory, double& load);
  58. static void InsertDynamicSystemInformation(Json::Value& index,
  59. std::string const& instant);
  60. static void InsertTimingData(
  61. Json::Value& root, std::chrono::steady_clock::time_point steadyStart,
  62. std::chrono::system_clock::time_point systemStart);
  63. bool HasQueryFile(std::string const& file);
  64. static std::string GetCommandStr(std::vector<std::string> const& args);
  65. static std::string ComputeSuffixHash(std::string const& command_str);
  66. static std::string ComputeSuffixTime();
  67. void PrepareDataForCDash(std::string const& data_dir,
  68. std::string const& index_path);
  69. std::string binaryDir;
  70. std::string timingDirv1;
  71. std::string userTimingDirv1;
  72. std::string cdashDir;
  73. std::set<cmInstrumentationQuery::Query> queries;
  74. std::set<cmInstrumentationQuery::Hook> hooks;
  75. std::vector<std::string> callbacks;
  76. std::vector<std::string> queryFiles;
  77. std::map<std::string, std::string> cdashSnippetsMap;
  78. Json::Value preTestStats;
  79. bool hasQuery = false;
  80. };