Extract prio list formatting into format_utils
authorAntoine Busque <abusque@efficios.com>
Fri, 26 Feb 2016 23:38:57 +0000 (18:38 -0500)
committerAntoine Busque <abusque@efficios.com>
Fri, 26 Feb 2016 23:38:57 +0000 (18:38 -0500)
Signed-off-by: Antoine Busque <abusque@efficios.com>
lttnganalyses/cli/cputop.py
lttnganalyses/cli/sched.py
lttnganalyses/common/format_utils.py

index 0a21c6e9172e0fce7fb61c32c5d79d02cbc31109..1a0cfe46d7bf0ade26cdbbcf976f402ee3bfbacd 100644 (file)
@@ -23,6 +23,7 @@
 # SOFTWARE.
 
 import operator
+from ..common import format_utils
 from .command import Command
 from ..core import cputop
 from . import mi
@@ -105,26 +106,6 @@ class Cputop(Command):
         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,
@@ -134,7 +115,7 @@ class Cputop(Command):
         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),
index 24ce1f69d96245b33b8fc0086be9cc4790398849..52b529a3072d8abf6289647dc0770455d8e8b469 100644 (file)
@@ -30,6 +30,7 @@ from . import mi
 from . import termgraph
 from ..core import sched
 from .command import Command
+from ..common import format_utils
 from ..linuxautomaton import common
 
 
@@ -393,26 +394,6 @@ class SchedAnalysisCommand(Command):
 
         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,
@@ -431,7 +412,7 @@ class SchedAnalysisCommand(Command):
             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),
index 9d8224f0d0f5fd47fdf9f3319b21102baa7651bc..e74b092d3873de7a2ae8285b6c9cc79d55603258 100644 (file)
@@ -66,3 +66,42 @@ def format_size(size, binary_prefix=True):
         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
This page took 0.025603 seconds and 5 git commands to generate.