| import matplotlib.pyplot as plt |
| import pandas as pd |
| |
| from .legend_picker import * |
| from .helpers import * |
| |
| def show_memory_access(metricsParser, options, onePlotFigureSize, fontSize): |
| memoryEntries = metricsParser.get_memory_entries() |
| data = pd.DataFrame(memoryEntries, columns=['realTime', 'virtualTime', 'operation']) |
| |
| reads = data[data['operation'] == bytes([2])] |
| writes = data[data['operation'] == bytes([3])] |
| |
| fig, ax = plt.subplots(figsize=onePlotFigureSize, constrained_layout=True) |
| lines = _prepare_data(ax, reads, writes, 'realTime' if options.real_time else 'virtualTime') |
| |
| fig.suptitle('Memory access', fontsize=fontSize) |
| handles, labels = ax.get_legend_handles_labels() |
| legend = fig.legend(handles, labels, loc='upper left') |
| set_legend_picker(fig, lines, legend) |
| ax.set_xlabel('{} time [ms]'.format('Real' if options.real_time else 'Virtual')) |
| |
| save_fig(fig, 'memory.png', options) |
| |
| |
| def _prepare_data(ax, reads, writes, columnName): |
| writeLines, = ax.plot(writes[columnName], range(0, len(writes)), label='Writes') |
| readLines, = ax.plot(reads[columnName], range(0, len(reads)), label='Reads') |
| ax.set_ylabel('Memory access operations') |
| return [writeLines, readLines] |