mirror of
https://git.yoctoproject.org/poky
synced 2026-02-26 11:29:40 +01:00
The recent fixes to merge setscene and normal task accounting in runqueue fixed some display issues but broke the task numbering of setscene tasks. Add new accounting methods to the stats structure specifically designed for setscene. This accounts for the fact that setscene tasks can rerun multiple times in the build. Then use the new data in the UI to correctly display the numbers the user wants to see to understand progress. (Bitbake rev: 7d938703d9321cde5a32e4dff005f07e8821b704) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit ed7e2da88bf4b7bfc7ebfc12b9bd6c0fb7d8c1aa) 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 + event.stats.setscene_active + 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)
|