diff options
Diffstat (limited to 'testsuites/tmtests/tmfine01/tmfine01.py')
-rw-r--r-- | testsuites/tmtests/tmfine01/tmfine01.py | 93 |
1 files changed, 37 insertions, 56 deletions
diff --git a/testsuites/tmtests/tmfine01/tmfine01.py b/testsuites/tmtests/tmfine01/tmfine01.py index 9345e245c5..54363bee34 100644 --- a/testsuites/tmtests/tmfine01/tmfine01.py +++ b/testsuites/tmtests/tmfine01/tmfine01.py @@ -1,9 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -#!/usr/bin/env python - -# -# Copyright (c) 2016 embedded brains GmbH. All rights reserved. +# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,57 +22,41 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# +import json import re -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -data = open('tmfine01.scn').read() -data = re.sub(r'\*\*\*.*\*\*\*', '', data) -doc = libxml2.parseDoc(data) -ctx = doc.xpathNewContext() - -plt.yscale('log') -plt.title('Uncontested Mutex Performance') -plt.xlabel('Active Workers') -plt.ylabel('Operation Count') - -def m(n): - return int(n.getContent()) - -def getCounterSums(variant): - w = 1 - y = [] - while True: - c = map(m, ctx.xpathEval('/TestTimeFine01/' + variant + '[@activeWorker="' + str(w) + '"]/Counter')) - if not c: - break - y.append(sum(c)) - w = w + 1 - return y - -y = getCounterSums('ManySysLockMutex') -x = range(1, len(y) + 1) -plt.plot(x, y, label = 'Sys Lock Mutex', marker = 'o') - -y = getCounterSums('ManyMutex') -plt.plot(x, y, label = 'Classic Inheritance Mutex', marker = 'o') - -y = getCounterSums('ManyClassicCeilingMutex') -plt.plot(x, y, label = 'Classic Ceiling Mutex', marker = 'o') - -y = getCounterSums('ManyClassicMrsPMutex') -plt.plot(x, y, label = 'Classic MrsP Mutex', marker = 'o') - -y = getCounterSums('ManyPthreadSpinlock') -plt.plot(x, y, label = 'Pthread Spinlock', marker = 'o') - -y = getCounterSums('ManyPthreadMutexInherit') -plt.plot(x, y, label = 'Pthread Mutex Inherit', marker = 'o') - -y = getCounterSums('ManyPthreadMutexProtect') -plt.plot(x, y, label = 'Pthread Mutex Protect', marker = 'o') - -plt.legend(loc = 'best') -plt.show() +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("Uncontested Mutex Performance") + axes.set_xlabel("Active Workers") + axes.set_ylabel("Operation Count") + x = list(range(1, len(data[0]["counter"]) + 1)) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for samples in data: + if samples["type"] != "private-mutex": + continue + y = [sum(values) for values in samples["counter"]] + axes.plot(x, + y, + label=samples["description"].replace( + "Obtain/Release Private ", ""), + marker="o") + axes.legend(loc="best") + plt.savefig("tmfine01.png") + plt.savefig("tmfine01.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("tmfine01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) |