[bitbake-devel] [PATCH] toaster: time data for tasks differ from buildstats
Alex Damian
alex.r.damian at gmail.com
Wed Feb 19 17:31:34 UTC 2014
Please hold merging this patch.
I have discovered a unrelated problem processing bb.build.Task* events
which will affect how this patch is structured.
Alex
On Wed, Feb 19, 2014 at 9:52 AM, Marius Avram <marius.avram at intel.com>wrote:
> The BuildInfoHelper class was measuring separately the time for a build.
> This was causing many difference in the time measured by buildstats class
> and
> the time measured here. The main problem is toaster does database
> operations
> which delay the arrival of events.
>
> The simplest solution, which is implemented in this fix, is to keep the
> time
> of creation for every BaseTask and calculate the duration by making a
> difference between the creation time of TaskSucceeded and TaskStarted.
>
> [YOCTO #5727]
>
> Signed-off-by: Marius Avram <marius.avram at intel.com>
> ---
> bitbake/lib/bb/build.py | 2 ++
> bitbake/lib/bb/ui/buildinfohelper.py | 17 +++++++++++------
> bitbake/lib/bb/ui/toasterui.py | 6 +++++-
> 3 files changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
> index 50a28dc..03e7996 100644
> --- a/bitbake/lib/bb/build.py
> +++ b/bitbake/lib/bb/build.py
> @@ -30,6 +30,7 @@ import sys
> import logging
> import shlex
> import glob
> +import time
> import bb
> import bb.msg
> import bb.process
> @@ -75,6 +76,7 @@ class TaskBase(event.Event):
> self.taskfile = d.getVar("FILE", True)
> self.taskname = self._task
> self.logfile = logfile
> + self.time = time.time()
> event.Event.__init__(self)
> self._message = "recipe %s: task %s: %s" % (d.getVar("PF", True),
> t, self.getDisplayName())
>
> diff --git a/bitbake/lib/bb/ui/buildinfohelper.py
> b/bitbake/lib/bb/ui/buildinfohelper.py
> index da777f1..093d685 100644
> --- a/bitbake/lib/bb/ui/buildinfohelper.py
> +++ b/bitbake/lib/bb/ui/buildinfohelper.py
> @@ -102,10 +102,9 @@ class ORMWrapper(object):
> elif outcome_task_setscene == Task.OUTCOME_FAILED:
> task_object.sstate_result = Task.SSTATE_FAILED
>
> - # mark down duration if we have a start time
> - if 'start_time' in task_information.keys():
> - duration = datetime.datetime.now() -
> task_information['start_time']
> - task_object.elapsed_time = duration.total_seconds()
> + # mark down duration if we have an end time
> + if 'end_time' in task_information.keys():
> + task_object.elapsed_time = task_information['end_time'] -
> task_information['start_time']
>
> task_object.save()
> return task_object
> @@ -448,6 +447,10 @@ class BuildInfoHelper(object):
> task_information = self._get_task_information(event, recipe)
> task_information['outcome'] = Task.OUTCOME_NA
>
> + self.internal_state[identifier] = {}
> + if isinstance(event, bb.build.TaskStarted):
> + self.internal_state[identifier]['start_time'] = event.time
> +
> if isinstance(event, bb.runqueue.runQueueTaskSkipped):
> task_information['task_executed'] = False
> if event.reason == "covered":
> @@ -468,8 +471,6 @@ class BuildInfoHelper(object):
>
> task_obj =
> self.orm_wrapper.get_update_task_object(task_information)
>
> - self.internal_state[identifier] = {'start_time':
> datetime.datetime.now()}
> -
>
> def store_tasks_stats(self, event):
> for (taskfile, taskname, taskstats) in event.data:
> @@ -507,6 +508,10 @@ class BuildInfoHelper(object):
> else:
> task_information['script_type'] = Task.CODING_SHELL
>
> + if isinstance(event, bb.build.TaskSucceeded):
> + task_information['start_time'] =
> self.internal_state[identifier]['start_time']
> + task_information['end_time'] = event.time
> +
> if isinstance(event, (bb.runqueue.runQueueTaskCompleted,
> bb.runqueue.sceneQueueTaskCompleted)):
> task_information['outcome'] = Task.OUTCOME_SUCCESS
> del self.internal_state[identifier]
> diff --git a/bitbake/lib/bb/ui/toasterui.py
> b/bitbake/lib/bb/ui/toasterui.py
> index e469d93..58abfd3 100644
> --- a/bitbake/lib/bb/ui/toasterui.py
> +++ b/bitbake/lib/bb/ui/toasterui.py
> @@ -109,7 +109,11 @@ def main(server, eventHandler, params ):
> if isinstance(event, bb.event.BuildStarted):
> buildinfohelper.store_started_build(event)
>
> - if isinstance(event, (bb.build.TaskStarted,
> bb.build.TaskSucceeded, bb.build.TaskFailedSilent)):
> + if isinstance(event, bb.build.TaskStarted):
> + buildinfohelper.store_started_task(event)
> + continue
> +
> + if isinstance(event, (bb.build.TaskSucceeded,
> bb.build.TaskFailedSilent)):
> buildinfohelper.update_and_store_task(event)
> continue
>
> --
> 1.7.9.5
>
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/bitbake-devel/attachments/20140219/52e4b6dd/attachment-0002.html>
More information about the bitbake-devel
mailing list