# SOFTWARE.
import operator
+from ..common import format_utils
from .command import Command
from ..core import cputop
from . import mi
self._mi_clear_result_tables()
self._mi_append_result_table(summary_table)
- def _cleanup_prio_list(self, prio_list):
- prios = {}
- prio_str = None
- for p in prio_list:
- if p.prio in prios:
- prios[p.prio] += 1
- else:
- prios[p.prio] = 1
- for p in sorted(prios.keys()):
- if prios[p] > 1:
- count_str = " (%s times)" % prios[p]
- else:
- count_str = ""
- if prio_str is None:
- prio_str = "[%s%s" % (p, count_str)
- else:
- prio_str = "%s, %s%s" % (prio_str, p, count_str)
- prio_str = prio_str + "]"
- return prio_str
-
def _get_per_tid_usage_result_table(self, begin_ns, end_ns):
result_table = \
self._mi_create_result_table(self._MI_TABLE_CLASS_PER_PROC,
for tid in sorted(self._analysis.tids.values(),
key=operator.attrgetter('usage_percent'),
reverse=True):
- prio_list = self._cleanup_prio_list(tid.prio_list)
+ prio_list = format_utils.format_prio_list(tid.prio_list)
result_table.append_row(
process=mi.Process(tid.comm, tid=tid.tid),
from . import termgraph
from ..core import sched
from .command import Command
+from ..common import format_utils
from ..linuxautomaton import common
return stats_table
- def _cleanup_prio_list(self, prio_list):
- prios = {}
- prio_str = None
- for p in prio_list:
- if p.prio in prios:
- prios[p.prio] += 1
- else:
- prios[p.prio] = 1
- for p in sorted(prios.keys()):
- if prios[p] > 1:
- count_str = " (%s times)" % prios[p]
- else:
- count_str = ""
- if prio_str is None:
- prio_str = "[%s%s" % (p, count_str)
- else:
- prio_str = "%s, %s%s" % (prio_str, p, count_str)
- prio_str = prio_str + "]"
- return prio_str
-
def _get_per_tid_stats_result_table(self, begin_ns, end_ns):
stats_table = \
self._mi_create_result_table(self._MI_TABLE_CLASS_PER_TID_STATS,
else:
stdev = mi.Duration(stdev)
- prio_list = self._cleanup_prio_list(tid_stats.prio_list)
+ prio_list = format_utils.format_prio_list(tid_stats.prio_list)
stats_table.append_row(
process=mi.Process(tid=tid_stats.tid, name=tid_stats.comm),
format_str = '{:0.2f} {}'
return format_str.format(size, unit)
+
+def format_prio_list(prio_list):
+ """Format a list of prios into a string of unique prios with count
+
+ Args:
+ prio_list: a list of PrioEvent objects
+
+ Returns:
+ The formatted string containing the unique priorities and
+ their count if they occurred more than once.
+ """
+ prio_count = {}
+ prio_str = None
+
+ for prio_event in prio_list:
+ prio = prio_event.prio
+ if prio not in prio_count:
+ prio_count[prio] = 0
+
+ prio_count[prio] += 1
+
+ for prio in sorted(prio_count.keys()):
+ count = prio_count[prio]
+ if count > 1:
+ count_str = ' ({} times)'.format(count)
+ else:
+ count_str = ''
+
+ if prio_str is None:
+ prio_str = '[{}{}'.format(prio, count_str)
+ else:
+ prio_str += ', {}{}'.format(prio, count_str)
+
+ if prio_str is None:
+ prio_str = '[]'
+ else:
+ prio_str += ']'
+
+ return prio_str