-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathllg_graphs.py
More file actions
139 lines (121 loc) · 5.08 KB
/
llg_graphs.py
File metadata and controls
139 lines (121 loc) · 5.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from llg_results import Result, RtResult, NrtResult
from llg_renderdata import RenderData
from llg_renderstats import RtRenderStats, NrtRenderStats
from llg_rendertype import RenderType
def compare(render_type: RenderType, result: Result):
return render_type.pc_id == result.pc_id() and render_type.render_object == result.render_object()
def show_subgraph(render_data: RenderData):
x = np.arange(len(render_data.labels))
width = 0.35
fix, ax = plt.subplots()
rects = [
ax.bar(x-width/2, render_data.v_maxs, width, label='Vulkan max', color='#ff5555'),
ax.bar(x-width/2, render_data.v_avgs, width, label='Vulkan avg', color='#cc4444'),
ax.bar(x-width/2, render_data.v_mins, width, label='Vulkan min', color='#993333'),
ax.bar(x+width/2, render_data.d_maxs, width, label='DirectX max', color='#aaff55'),
ax.bar(x+width/2, render_data.d_avgs, width, label='DirectX avg', color='#88cc44'),
ax.bar(x+width/2, render_data.d_mins, width, label='DirectX min', color='#669933')
]
ax.set_ylabel('Scores')
ax.set_title('Scores by pc, object & render engine')
ax.set_xticks(x)
ax.set_xticklabels(render_data.labels)
ax.legend()
# requires ax, so needs to be inside
def autolabel(rects):
for rect in rects:
height = rect.get_height()
ax.annotate('{:0.2f}'.format(height),
xy=(rect.get_x() + rect.get_width() / 2,
height),
xytext=(0, 3),
textcoords="offset points",
ha='center',
va='center')
for rect in rects:
autolabel(rect)
# tutorial says to use this, but they never defined fig
#fig.tight_layout()
plt.show()
def show_graphs(results: []):
# --- prepare data for graphs ---
# region
render_types = []
for result in results:
existing_type = False
for render_type in render_types:
if compare(render_type, result):
existing_type = True
if not existing_type:
render_types.append(RenderType(result.pc_id(), result.render_object()))
for render_type in render_types:
if isinstance(results[0], RtResult):
render_type.init_rt();
elif isinstance(results[0], NrtResult):
render_type.init_nrt();
for result in results:
if compare(render_type, result):
# should only find one of each at most, as they should've been merged earlier
# (1 vulkan & 1 directx)
render_type.change_result(result)
# endregion prepare data for graphs
# --- cpu graph ---
# region
render_data = RenderData()
for render_type in render_types:
render_data.labels.append(render_type.pc_id + "\n" + render_type.render_object + "\ncpu")
# for readability's sake
v_stats = render_type.vulkan_stats
d_stats = render_type.directx_stats
# vulkan stats
render_data.v_mins.append(v_stats.cpu_min)
render_data.v_avgs.append(v_stats.cpu_avg)
render_data.v_maxs.append(v_stats.cpu_max)
# directx stats
render_data.d_mins.append(d_stats.cpu_min)
render_data.d_avgs.append(d_stats.cpu_avg)
render_data.d_maxs.append(d_stats.cpu_max)
show_subgraph(render_data)
# endregion cpu graph
# --- secondary graph ---
# region
render_data = RenderData()
# --- fps graph ---
# region
if isinstance(results[0], RtResult):
for render_type in render_types:
render_data.labels.append(render_type.pc_id + "\n" + render_type.render_object + "\nfps")
# for readability's sake
v_stats = render_type.vulkan_stats
d_stats = render_type.directx_stats
# vulkan stats
render_data.v_mins.append(v_stats.fps_min)
render_data.v_avgs.append(v_stats.fps_avg)
render_data.v_maxs.append(v_stats.fps_max)
# directx stats
render_data.d_mins.append(d_stats.fps_min)
render_data.d_avgs.append(d_stats.fps_avg)
render_data.d_maxs.append(d_stats.fps_max)
# endregion fps graph
# --- spf graph ---
# region
if isinstance(results[0], NrtResult):
for render_type in render_types:
render_data.labels.append(render_type.pc_id + "\n" + render_type.render_object + "\nspf")
# for readability's sake
v_stats = render_type.vulkan_stats
d_stats = render_type.directx_stats
# vulkan stats
render_data.v_mins.append(v_stats.spf_min)
render_data.v_avgs.append(v_stats.spf_avg)
render_data.v_maxs.append(v_stats.spf_max)
# directx stats
render_data.d_mins.append(d_stats.spf_min)
render_data.d_avgs.append(d_stats.spf_avg)
render_data.d_maxs.append(d_stats.spf_max)
# endregion spf graph
show_subgraph(render_data)
# endregion secondary graph