#!/usr/bin/env python # # Copyright (C) 2013 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the 'License'); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an 'AS IS' BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os, sys import get_csv_report as psr import matplotlib.pyplot as plt import matplotlib.mlab as mlab import matplotlib.cbook as cbook import matplotlib.ticker as ticker """ A simple script to render the data from the benchmark as a graph. This uses MatPlotLib (http://matplotlib.org/) to plot which can be installed on linux with; sudo apt-get install python-matplotlib """ colors = { 'maguro':'#FF0000', 'mako':'#00FF00', 'manta':'#0000FF', 'tilapia':'#00FFFF' } def main(argv): if len(argv) != 2: print "grapher.py cts_report_dir" sys.exit(1) (_, tests) = psr.parseReports(os.path.abspath(argv[1])) # For each of the benchmarks for benchmark in tests: if benchmark.startswith('com.android.cts.opengl.primitive'): results = tests[benchmark] legend = [] # Create a new figure fig = plt.figure() # Set the title of the graph plt.title(benchmark[benchmark.index('#') + 1:]) # For each result in the data set for r in results: score = r.get('result', 'no results') x = [] y = [] if score == 'pass': y = r['details']['Fps Values'] x = range(1, len(y) + 1) # Get the score, then trim it to 2 decimal places score = r['summary']['Average Frames Per Second'] score = score[0:score.index('.') + 3] if score != 'no results': # Create a plot ax = fig.add_subplot(111) name = r['device'] lbl = name + ' (%s)'%score clr = colors.get(name, "#%06X" % (hash(name) % 0xFFFFFF)) # Plot the workload vs the values ax.plot(x, y, 'o-', label=lbl, color=clr) # Add a legend ax.legend(loc='upper right').get_frame().set_fill(False) (ymin, ymax) = plt.ylim() if ymax < 90:# So that on screen tests are easier to compare plt.ylim(0, 90) plt.xlabel('Iteration') plt.ylabel('FPS') fig.autofmt_xdate() # Show the plots plt.show() if __name__ == '__main__': main(sys.argv)