summaryrefslogtreecommitdiff
path: root/src/buildstream/_state.py
diff options
context:
space:
mode:
authorTom Pollard <tom.pollard@codethink.co.uk>2019-08-20 16:36:53 +0100
committerbst-marge-bot <marge-bot@buildstream.build>2019-09-10 10:44:53 +0000
commitbe757fab5e8dc3d603e8f61e6ffbbf00053467a6 (patch)
tree464d78dc7f3e89af0c01b519850c0a77e8c6f6be /src/buildstream/_state.py
parent56365356a20540c3319107fe647d0852321a64cb (diff)
downloadbuildstream-be757fab5e8dc3d603e8f61e6ffbbf00053467a6.tar.gz
scheduler.py: Move elapsed_time() to shared State()
The starttime relative to the scheduler, used to track deltas for time spent not suspended across Stream--Scheduler is now synced via a notification. This removes the need to call into the scheduler from the 'frontend' to determine the time difference for scheduler relative queries.
Diffstat (limited to 'src/buildstream/_state.py')
-rw-r--r--src/buildstream/_state.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/buildstream/_state.py b/src/buildstream/_state.py
index df3bceff2..c99434018 100644
--- a/src/buildstream/_state.py
+++ b/src/buildstream/_state.py
@@ -272,7 +272,9 @@ class State():
# it from other tasks with the same action name
# e.g. an element's name.
# elapsed_offset (timedelta): (Optional) The time the task started, relative
- # to buildstream's start time.
+ # to buildstream's start time. Note scheduler tasks
+ # use this as they don't report relative to wallclock time
+ # if the Scheduler has been suspended.
#
def add_task(self, action_name, full_name, elapsed_offset=None):
task_key = (action_name, full_name)
@@ -280,7 +282,7 @@ class State():
"Trying to add task '{}:{}' to '{}'".format(action_name, full_name, self.tasks)
if not elapsed_offset:
- elapsed_offset = datetime.datetime.now() - self._session_start
+ elapsed_offset = self.elapsed_time()
task = _Task(self, action_name, full_name, elapsed_offset)
self.tasks[task_key] = task
@@ -330,6 +332,24 @@ class State():
for cb in self._task_failed_cbs:
cb(action_name, full_name, element)
+ # elapsed_time()
+ #
+ # Fetches the current session elapsed time
+ #
+ # Args:
+ # start_time(time): Optional explicit start time, relative to caller.
+ #
+ # Returns:
+ # (timedelta): The amount of time since the start of the session,
+ # discounting any time spent while jobs were suspended if
+ # start_time given relative to the Scheduler
+ #
+ def elapsed_time(self, start_time=None):
+ time_now = datetime.datetime.now()
+ if start_time is None:
+ start_time = self._session_start or time_now
+ return time_now - start_time
+
# _Task
#