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