mirror of
https://git.yoctoproject.org/poky
synced 2026-03-11 09:49:41 +01:00
When we parallelised normal and setscene tasks, the task stats handling was left separate pending further thought. We had to remove handling of the setscene tasks from the UI in order to maintain consistent task numbering. Currently, "0 of 0" tasks can be shown as setscene tasks execute until the first normal task runs. The only use left for sq_stats is in the active task numbers which we can use the length of sq_ive for instead. We can therefore drop it and return stats in all cases. This removes the "0 of 0" task problem since the stats in all normal and setscene tasks matches. [YOCTO #14479] (Bitbake rev: fac319e2d5463be2a82335b9cb348c7893a1e65f) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit eae6e947e37e18cded053814bd2a268b44fb25cd) Signed-off-by: Anuj Mittal <anuj.mittal@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
#
|
|
# Copyright (C) 2006 - 2007 Michael 'Mickey' Lauer
|
|
# Copyright (C) 2006 - 2007 Richard Purdie
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
|
|
import bb.build
|
|
import time
|
|
|
|
class BBUIHelper:
|
|
def __init__(self):
|
|
self.needUpdate = False
|
|
self.running_tasks = {}
|
|
# Running PIDs preserves the order tasks were executed in
|
|
self.running_pids = []
|
|
self.failed_tasks = []
|
|
self.pidmap = {}
|
|
self.tasknumber_current = 0
|
|
self.tasknumber_total = 0
|
|
|
|
def eventHandler(self, event):
|
|
# PIDs are a bad idea as they can be reused before we process all UI events.
|
|
# We maintain a 'fuzzy' match for TaskProgress since there is no other way to match
|
|
def removetid(pid, tid):
|
|
self.running_pids.remove(tid)
|
|
del self.running_tasks[tid]
|
|
if self.pidmap[pid] == tid:
|
|
del self.pidmap[pid]
|
|
self.needUpdate = True
|
|
|
|
if isinstance(event, bb.build.TaskStarted):
|
|
tid = event._fn + ":" + event._task
|
|
if event._mc != "default":
|
|
self.running_tasks[tid] = { 'title' : "mc:%s:%s %s" % (event._mc, event._package, event._task), 'starttime' : time.time(), 'pid' : event.pid }
|
|
else:
|
|
self.running_tasks[tid] = { 'title' : "%s %s" % (event._package, event._task), 'starttime' : time.time(), 'pid' : event.pid }
|
|
self.running_pids.append(tid)
|
|
self.pidmap[event.pid] = tid
|
|
self.needUpdate = True
|
|
elif isinstance(event, bb.build.TaskSucceeded):
|
|
tid = event._fn + ":" + event._task
|
|
removetid(event.pid, tid)
|
|
elif isinstance(event, bb.build.TaskFailedSilent):
|
|
tid = event._fn + ":" + event._task
|
|
removetid(event.pid, tid)
|
|
# Don't add to the failed tasks list since this is e.g. a setscene task failure
|
|
elif isinstance(event, bb.build.TaskFailed):
|
|
tid = event._fn + ":" + event._task
|
|
removetid(event.pid, tid)
|
|
self.failed_tasks.append( { 'title' : "%s %s" % (event._package, event._task)})
|
|
elif isinstance(event, bb.runqueue.runQueueTaskStarted) or isinstance(event, bb.runqueue.sceneQueueTaskStarted):
|
|
self.tasknumber_current = event.stats.completed + event.stats.active + event.stats.failed + 1
|
|
self.tasknumber_total = event.stats.total
|
|
self.needUpdate = True
|
|
elif isinstance(event, bb.build.TaskProgress):
|
|
if event.pid > 0 and event.pid in self.pidmap:
|
|
self.running_tasks[self.pidmap[event.pid]]['progress'] = event.progress
|
|
self.running_tasks[self.pidmap[event.pid]]['rate'] = event.rate
|
|
self.needUpdate = True
|
|
else:
|
|
return False
|
|
return True
|
|
|
|
def getTasks(self):
|
|
self.needUpdate = False
|
|
return (self.running_tasks, self.failed_tasks)
|