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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user