| import matplotlib.pyplot as plt |
| import pandas as pd |
| |
| from .legend_picker import * |
| from .helpers import * |
| |
| |
| def show_peripheral_access(metricsParser, options, twoPlotFigureSize, fontSize): |
| peripherals, peripheralEntries = metricsParser.get_peripheral_entries() |
| data = pd.DataFrame(peripheralEntries, columns=['realTime', 'virtualTime', 'operation', 'address']) |
| fig, (writesAx, readsAx) = plt.subplots(2, 1, figsize=twoPlotFigureSize, constrained_layout=True) |
| |
| writeLines = [] |
| readLines = [] |
| time_column = 'realTime' if options.real_time else 'virtualTime' |
| |
| for key, value in peripherals.items(): |
| tempData = data[data.address >= value[0]] |
| peripheralEntries = tempData[tempData.address <= value[1]] |
| readOperationFilter = peripheralEntries['operation'] == bytes([0]) |
| writeOperationFilter = peripheralEntries['operation'] == bytes([1]) |
| readEntries = peripheralEntries[readOperationFilter] |
| writeEntries = peripheralEntries[writeOperationFilter] |
| if not writeEntries.empty: |
| writeLine, = writesAx.plot(writeEntries[time_column], range(0, len(writeEntries)), label=key) |
| writeLines.append(writeLine) |
| if not readEntries.empty: |
| readLine, = readsAx.plot(readEntries[time_column], range(0, len(readEntries)), label=key) |
| readLines.append(readLine) |
| |
| fig.suptitle('Peripheral access', fontsize=fontSize) |
| writeHandles, writeLabels = writesAx.get_legend_handles_labels() |
| readHandles, readLabels = readsAx.get_legend_handles_labels() |
| writeLegend = fig.legend(writeHandles, writeLabels, loc='upper left') |
| readLegend = fig.legend(readHandles, readLabels, loc='center left') |
| set_legend_picker(fig, writeLines, writeLegend) |
| set_legend_picker(fig, readLines, readLegend) |
| |
| x_label = '{} time [ms]'.format('Real' if options.real_time else 'Virtual') |
| writesAx.set_xlabel(x_label) |
| readsAx.set_xlabel(x_label) |
| writesAx.set_ylabel('Write operations') |
| readsAx.set_ylabel('Read operations') |
| |
| save_fig(fig, 'peripherals.png', options) |