1import matplotlib.pyplot as plt 2import pandas as pd 3 4from .legend_picker import * 5from .helpers import * 6 7def show_memory_access(metricsParser, options, onePlotFigureSize, fontSize): 8 memoryEntries = metricsParser.get_memory_entries() 9 data = pd.DataFrame(memoryEntries, columns=['realTime', 'virtualTime', 'operation']) 10 11 reads = data[data['operation'] == bytes([2])] 12 writes = data[data['operation'] == bytes([3])] 13 14 fig, ax = plt.subplots(figsize=onePlotFigureSize, constrained_layout=True) 15 lines = _prepare_data(ax, reads, writes, 'realTime' if options.real_time else 'virtualTime') 16 17 fig.suptitle('Memory access', fontsize=fontSize) 18 handles, labels = ax.get_legend_handles_labels() 19 legend = fig.legend(handles, labels, loc='upper left') 20 set_legend_picker(fig, lines, legend) 21 ax.set_xlabel('{} time [ms]'.format('Real' if options.real_time else 'Virtual')) 22 23 save_fig(fig, 'memory.png', options) 24 25 26def _prepare_data(ax, reads, writes, columnName): 27 writeLines, = ax.plot(writes[columnName], range(0, len(writes)), label='Writes') 28 readLines, = ax.plot(reads[columnName], range(0, len(reads)), label='Reads') 29 ax.set_ylabel('Memory access operations') 30 return [writeLines, readLines] 31