python: more readable Ruby dot topology

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>
This commit is contained in:
Tiago Mück
2019-09-12 14:57:44 -05:00
parent dd270656f0
commit 8839beb492

View 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(