python: more readable Ruby dot topology
authorTiago Mück <tiago.muck@arm.com>
Thu, 12 Sep 2019 19:57:44 +0000 (14:57 -0500)
committerTiago Mück <tiago.muck@arm.com>
Thu, 11 Feb 2021 22:13:38 +0000 (22:13 +0000)
Controllers may have the same name under different parents, thus
the controller full path is used as label. To avoid long and redundant
labels, common prefixes and suffixes are removed from the path.

Change-Id: Id793b59a4c38f3425ae5348138ae1d74c823edd7
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/41093
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/python/m5/util/dot_writer_ruby.py

index 9356a946c7b9e3c31715859bead9e239d5ee9cd0..4123cac2c3d9e6d59d89d31a607fdf767667972e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2019 ARM Limited
+# Copyright (c) 2019,2021 ARM Limited
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
@@ -90,9 +90,24 @@ def _dot_create(network, callgraph):
         )
         connected[link.dst_node.path()] = link.src_node.path()
 
+    # Find common prefixes and sufixes to generate names
+    paths = [link.ext_node.path() for link in network.ext_links]
+    rpaths = [link.ext_node.path()[::-1] for link in network.ext_links]
+    preffix = os.path.commonprefix(paths)
+    suffix = os.path.commonprefix(rpaths)[::-1]
+    def strip_right(text, suffix):
+        if not text.endswith(suffix):
+            return text
+        return text[:len(text)-len(suffix)]
+    def strip_left(text, prefix):
+        if not text.startswith(prefix):
+            return text
+        return text[len(prefix):]
+
+
     for link in network.ext_links:
         ctrl = link.ext_node
-        label = ctrl._name
+        label = strip_right(strip_left(ctrl.path(), preffix), suffix)
         if hasattr(ctrl, '_node_type'):
             label += ' (' + ctrl._node_type + ')'
         callgraph.add_node(