1#! /usr/bin/python 2# 3# Copyright (c) 2017 ARM Limited 4# All rights reserved 5# 6# The license below extends only to copyright in the software and shall 7# not be construed as granting a license to any other intellectual 8# property including but not limited to intellectual property relating 9# to a hardware implementation of the functionality of the software 10# licensed hereunder. You may use the software subject to the license 11# terms below provided that you ensure that this notice is replicated 12# unmodified and in its entirety in all distributions of the software, 13# modified or unmodified, in source code or in binary form. 14# 15# Redistribution and use in source and binary forms, with or without 16# modification, are permitted provided that the following conditions are 17# met: redistributions of source code must retain the above copyright 18# notice, this list of conditions and the following disclaimer; 19# redistributions in binary form must reproduce the above copyright 20# notice, this list of conditions and the following disclaimer in the 21# documentation and/or other materials provided with the distribution; 22# neither the name of the copyright holders nor the names of its 23# contributors may be used to endorse or promote products derived from 24# this software without specific prior written permission. 25# 26# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 29# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 30# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 31# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 32# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37# 38# Authors: Radhika Jagtap 39 40import PlotPowerStates as plotter 41import argparse 42import os 43from subprocess import call 44 45parser = argparse.ArgumentParser(formatter_class= 46 argparse.ArgumentDefaultsHelpFormatter) 47 48parser.add_argument("--statsfile", required=True, help="stats file path") 49 50parser.add_argument("--bankutils", default="b1 b2 b3", help="target bank " \ 51 "utilization values separated by space, e.g. \"1 4 8\"") 52 53parser.add_argument("--seqbytes", default="s1 s2 s3", help="no. of " \ 54 "sequential bytes requested by each traffic gen request." \ 55 " e.g. \"64 256 512\"") 56 57parser.add_argument("--delays", default="d1 d2 d3", help="string of delay" 58 " values separated by a space. e.g. \"1 20 100\"") 59 60parser.add_argument("--outdir", help="directory to output plots", 61 default='plot_test') 62 63parser.add_argument("--pdf", action='store_true', help="output Latex and pdf") 64 65def main(): 66 args = parser.parse_args() 67 if not os.path.isfile(args.statsfile): 68 exit('Error! File not found: %s' % args.statsfile) 69 if not os.path.isdir(args.outdir): 70 os.mkdir(args.outdir) 71 72 bank_util_list = args.bankutils.strip().split() 73 seqbyte_list = args.seqbytes.strip().split() 74 delays = args.delays.strip().split() 75 plotter.plotLowPStates(args.outdir + '/', args.statsfile, bank_util_list, 76 seqbyte_list, delays) 77 78 if args.pdf: 79 textwidth = '0.5' 80 81 ### Time and energy plots ### 82 ############################# 83 # place tex and pdf files in outdir 84 os.chdir(args.outdir) 85 texfile_s = 'stacked_lowp_sweep.tex' 86 print "\t", texfile_s 87 outfile = open(texfile_s, 'w') 88 89 startDocText(outfile) 90 outfile.write("\\begin{figure} \n\centering\n") 91 ## Time plots for all delay values 92 for delay in delays: 93 # Time 94 filename = plotter.stateTimePlotName(str(delay) + '-') 95 outfile.write(wrapForGraphic(filename, textwidth)) 96 outfile.write(getCaption(delay)) 97 outfile.write("\end{figure}\n") 98 99 # Energy plots for all delay values 100 outfile.write("\\begin{figure} \n\centering\n") 101 for delay in delays: 102 # Energy 103 filename = plotter.stateEnergyPlotName(str(delay) + '-') 104 outfile.write(wrapForGraphic(filename, textwidth)) 105 outfile.write(getCaption(delay)) 106 outfile.write("\end{figure}\n") 107 108 endDocText(outfile) 109 outfile.close() 110 111 print "\n Generating pdf file" 112 print "*******************************" 113 print "\tpdflatex ", texfile_s 114 # Run pdflatex to generate to pdf 115 call(["pdflatex", texfile_s]) 116 call(["open", texfile_s.split('.')[0] + '.pdf']) 117 118 119def getCaption(delay): 120 return ('\caption{' + 121 'itt delay = ' + str(delay) + 122 '}\n') 123 124def wrapForGraphic(filename, width='1.0'): 125 # \t is tab and needs to be escaped, therefore \\textwidth 126 return '\includegraphics[width=' + width + \ 127 '\\textwidth]{' + filename + '}\n' 128 129def startDocText(outfile): 130 131 start_stuff = ''' 132\documentclass[a4paper,landscape,twocolumn]{article} 133 134\usepackage{graphicx} 135\usepackage[margin=0.5cm]{geometry} 136\\begin{document} 137''' 138 outfile.write(start_stuff) 139 140def endDocText(outfile): 141 142 end_stuff = ''' 143 144\end{document} 145 146''' 147 outfile.write(end_stuff) 148 149# Call main 150if __name__ == '__main__': 151 main()