You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by gi...@apache.org on 2020/12/29 13:02:06 UTC

[buildstream] 16/27: _variables: ENABLE PROFILING

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch tristan/partial-variables-manual-string-join
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 4a148bc3ccdfe509e64240e1b59d186bd6764c13
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Tue Jul 7 22:32:46 2020 +0900

    _variables: ENABLE PROFILING
---
 src/buildstream/_profile.py    |  2 ++
 src/buildstream/_variables.pyx | 21 ++++++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/buildstream/_profile.py b/src/buildstream/_profile.py
index 0219e83..bc3958e 100644
--- a/src/buildstream/_profile.py
+++ b/src/buildstream/_profile.py
@@ -48,6 +48,8 @@ class Topics:
     LOAD_PIPELINE = "load-pipeline"
     LOAD_SELECTION = "load-selection"
     SCHEDULER = "scheduler"
+    VARIABLES_INIT = "variables-init"
+    VARIABLES_CHECK = "variables-check"
     ALL = "all"
 
 
diff --git a/src/buildstream/_variables.pyx b/src/buildstream/_variables.pyx
index c1c368a..c1d7b92 100644
--- a/src/buildstream/_variables.pyx
+++ b/src/buildstream/_variables.pyx
@@ -28,6 +28,7 @@ from cpython.mem cimport PyMem_Malloc, PyMem_Free, PyMem_Realloc
 from cpython.object cimport PyObject
 from cpython.ref cimport Py_XINCREF, Py_XDECREF
 
+from ._profile import Topics, PROFILER
 from ._exceptions import LoadError
 from .exceptions import LoadErrorReason
 from .node cimport MappingNode, Node, ScalarNode, SequenceNode, ProvenanceInformation
@@ -57,9 +58,12 @@ ctypedef struct ObjectArray:
 cdef class Variables:
 
     cdef dict _values  # The Value objects
+    cdef MappingNode _origin
 
     def __init__(self, MappingNode node):
 
+        self._origin = node
+
         # Special case, if notparallel is specified in the variables for this
         # element, then override max-jobs to be 1.
         # Initialize it as a string as all variables are processed as strings.
@@ -173,9 +177,10 @@ cdef class Variables:
     cpdef check(self):
         cdef object key
 
-        # Resolve all variables.
-        for key in self._values.keys():
-            self._resolve(<str> key, None)
+        with PROFILER.profile(Topics.VARIABLES_CHECK, id(self._origin)):
+            # Resolve all variables.
+            for key in self._values.keys():
+                self._resolve(<str> key, None)
 
     # _init_values()
     #
@@ -188,10 +193,12 @@ cdef class Variables:
         cdef object value_node
         cdef Value value
 
-        for key, value_node in node.items():
-            value = Value()
-            value.init(<ScalarNode> value_node)
-            ret[key] = value
+        with PROFILER.profile(Topics.VARIABLES_INIT, id(self._origin)):
+
+            for key, value_node in node.items():
+                value = Value()
+                value.init(<ScalarNode> value_node)
+                ret[key] = value
 
         return ret