1
0
Эх сурвалжийг харах

Profiling: Profile genex evaluation

Kyle Edwards 2 жил өмнө
parent
commit
4d70a94545

+ 12 - 1
Source/cmGeneratorExpression.cxx

@@ -16,6 +16,7 @@
 #include "cmLocalGenerator.h"
 #include "cmStringAlgorithms.h"
 #include "cmSystemTools.h"
+#include "cmake.h"
 
 cmGeneratorExpression::cmGeneratorExpression(cmake& cmakeInstance,
                                              cmListFileBacktrace backtrace)
@@ -43,6 +44,11 @@ std::string cmGeneratorExpression::Evaluate(
   cmGeneratorTarget const* currentTarget, std::string const& language)
 {
   if (Find(input) != std::string::npos) {
+#ifndef CMAKE_BOOTSTRAP
+    auto profilingRAII = lg->GetCMakeInstance()->CreateProfilingEntry(
+      "genex_compile_eval", input);
+#endif
+
     cmCompiledGeneratorExpression cge(*lg->GetCMakeInstance(),
                                       cmListFileBacktrace(), std::move(input));
     return cge.Evaluate(lg, config, headTarget, dagChecker, currentTarget,
@@ -102,10 +108,15 @@ const std::string& cmCompiledGeneratorExpression::EvaluateWithContext(
 }
 
 cmCompiledGeneratorExpression::cmCompiledGeneratorExpression(
-  cmake& /*cmakeInstance*/, cmListFileBacktrace backtrace, std::string input)
+  cmake& cmakeInstance, cmListFileBacktrace backtrace, std::string input)
   : Backtrace(std::move(backtrace))
   , Input(std::move(input))
 {
+#ifndef CMAKE_BOOTSTRAP
+  auto profilingRAII =
+    cmakeInstance.CreateProfilingEntry("genex_compile", this->Input);
+#endif
+
   cmGeneratorExpressionLexer l;
   std::vector<cmGeneratorExpressionToken> tokens = l.Tokenize(this->Input);
   this->NeedsEvaluation = l.GetSawGeneratorExpression();

+ 30 - 1
Source/cmGeneratorExpressionEvaluator.cxx

@@ -4,8 +4,14 @@
 
 #include <sstream>
 
+#ifndef CMAKE_BOOTSTRAP
+#  include <cm3p/json/value.h>
+#endif
+
 #include "cmGeneratorExpressionContext.h"
 #include "cmGeneratorExpressionNode.h"
+#include "cmLocalGenerator.h"
+#include "cmake.h"
 
 GeneratorExpressionContent::GeneratorExpressionContent(
   const char* startContent, size_t length)
@@ -61,6 +67,12 @@ std::string GeneratorExpressionContent::Evaluate(
   cmGeneratorExpressionContext* context,
   cmGeneratorExpressionDAGChecker* dagChecker) const
 {
+#ifndef CMAKE_BOOTSTRAP
+  auto evalProfilingRAII =
+    context->LG->GetCMakeInstance()->CreateProfilingEntry(
+      "genex_eval", this->GetOriginalExpression());
+#endif
+
   std::string identifier;
   {
     for (const auto& pExprEval : this->IdentifierChildren) {
@@ -101,7 +113,24 @@ std::string GeneratorExpressionContent::Evaluate(
     return std::string();
   }
 
-  return node->Evaluate(parameters, context, this, dagChecker);
+  {
+#ifndef CMAKE_BOOTSTRAP
+    auto execProfilingRAII =
+      context->LG->GetCMakeInstance()->CreateProfilingEntry(
+        "genex_exec", identifier, [&parameters]() -> Json::Value {
+          Json::Value args = Json::objectValue;
+          if (!parameters.empty()) {
+            args["genexArgs"] = Json::arrayValue;
+            for (auto const& parameter : parameters) {
+              args["genexArgs"].append(parameter);
+            }
+          }
+          return args;
+        });
+#endif
+
+    return node->Evaluate(parameters, context, this, dagChecker);
+  }
 }
 
 std::string GeneratorExpressionContent::EvaluateParameters(