library("mosaic") args = commandArgs(trailingOnly=TRUE) #myolors=c("#339933","#0066ff","#993300") # grün, balu, rot myolors=c("green","blue","red", "yellow", "pink", "black") # grün, balu, rot if (length(args)==0) { runtype="timedump" target="waters" filename_1=sprintf("%s.png",target) filename_2=sprintf("%s_maxline.png",target) filename_3=sprintf("%s_hist.png",target) } else { runtype=args[1] target=args[2] filename_1=sprintf("%s.png",args[2]) filename_2=sprintf("%s_maxline.png",args[2]) filename_3=sprintf("%s_hist.png",args[2]) # filename_1=args[3] } library("dplyr") COLORS <- c("dark grey","blue", "red", "green", "magenta", "orange", "cyan", "pink", "black", "orange") BENCHDIR=sprintf("~/code/FRET/LibAFL/fuzzers/FRET/benchmark/%s",runtype) BASENAMES=Filter(function(x) x!="",list.dirs(BENCHDIR,full.names=FALSE)) PATTERNS=c(".*.0", ".*.1", ".*.2", ".*.3", ".*.4", ".*.5", ".*.6", ".*.7", ".*.8", ".*.9") # Trimm a list of data frames to common length trim_data <- function(input,len=NULL) { if (is.null(len)) { len <- min(sapply(input, function(v) dim(v)[1])) } return(lapply(input, function(d) slice_head(d,n=len))) } length_of_data <- function(input) { min(sapply(input, function(v) dim(v)[1])) } # Takes a flat list trace2maxline <- function(tr) { maxline = tr for (var in seq_len(length(maxline))[2:length(maxline)]) { maxline[var] = max(maxline[var],maxline[var-1]) } #plot(seq_len(length(maxline)),maxline,"l",xlab="Index",ylab="WOET") return(maxline) } # Take a list of data frames, output same form but maxlines data2maxlines <- function(tr) { min_length <- min(sapply(tr, function(v) dim(v)[1])) maxline <- tr for (var in seq_len(length(tr))) { maxline[[var]][[1]]=trace2maxline(tr[[var]][[1]]) } return(maxline) } # Take a multi-column data frame, output same form but maxlines frame2maxlines <- function(tr) { for (var in seq_len(length(tr))) { tr[[var]]=trace2maxline(tr[[var]]) } return(tr) } maxlines2plot <- function(maxlines) { min_length <- min(sapply(maxlines, function(v) dim(v)[1])) ml_cut <- lapply(maxlines, function(v) v[1:min_length,]) plot(seq_len(min_length),unlist(ml_cut[[1]]),"l",xlab="Index",ylab="WOET",col=COLORS[1],ylim=c(best, worst)) for (ml in seq_len(length(maxlines))[2:length(maxlines)]) { lines(seq_len(min_length),unlist(ml_cut[ml]),"l",col=COLORS[ml]) } lines(seq_len(min_length),rep_len(best, min_length),col="black") lines(seq_len(min_length),rep_len(best_success, min_length),col="black") lines(seq_len(min_length),rep_len(worst_trace, min_length),col="green") lines(seq_len(min_length),rep_len(worst, min_length),col="black") legend("bottomright",legend=lapply(maxlines,names),col = COLORS[1:length(maxlines)], lwd=2) } frame2plot <- function(maxlines,colors=NULL,draw_extreme=TRUE,doint=FALSE,over_name=NULL) { if (is.null(colors)) { colors <- COLORS } min_length <- dim(maxlines)[1] cur_worst <- worst if (doint) { cur_worst <- worst_int } plot(seq_len(min_length),unlist(maxlines[[1]]),"l",xlab="Execution",ylab="Worst observed response time",col=colors[1],ylim=c(min(best,min(maxlines)), max(cur_worst,max(maxlines)))) for (ml in seq_len(length(maxlines))[2:length(maxlines)]) { lines(seq_len(min_length),unlist(maxlines[ml]),"l",col=colors[ml]) } if (draw_extreme) { if (!doint) { nam <- c(names(maxlines),"worst case") #,"best case" col <- c(colors[1:length(maxlines)],"black") #,"black" ltp <- c(rep_len("solid",length(maxlines)),"longdash") # ,"longdash" lines(seq_len(min_length),rep_len(worst, min_length),col=col[length(maxlines)+1],lty=ltp[length(maxlines)+1]) #nam <- c(names(maxlines),"worst trace","worst case") #,"best case" #col <- c(colors[1:length(maxlines)],"black","black") #,"black" #ltp <- c(rep_len("solid",length(maxlines)),"dotted","longdash") # ,"longdash" #lines(seq_len(min_length),rep_len(best, min_length),col=col[length(maxlines)+1],lty=ltp[length(maxlines)+1]) #lines(seq_len(min_length),rep_len(best_success, min_length),col="black") #lines(seq_len(min_length),rep_len(worst_trace, min_length),col=col[length(maxlines)+1],lty=ltp[length(maxlines)+1]) #lines(seq_len(min_length),rep_len(worst, min_length),col=col[length(maxlines)+2],lty=ltp[length(maxlines)+2]) } else { nam <- c(names(maxlines),"worst case") col <- c(colors[1:length(maxlines)],"black") ltp <- c(rep_len("solid",length(maxlines)),"longdash") lines(seq_len(min_length),rep_len(worst_int, min_length),col=col[length(maxlines)+1],lty=ltp[length(maxlines)+1]) } } else { nam <- names(maxlines) col <- colors[1:length(maxlines)] ltp <- rep_len("solid",length(maxlines)) } if (is.null(over_name)) { legend("bottomright", legend=nam, col=col, lty=ltp) } else { legend("bottomright", legend=over_name, col=col, lty=ltp) } } all_maxlines = c() for (bn in BASENAMES) { runtypefiles <- list.files(file.path(BENCHDIR,bn),pattern=sprintf("%s.[0-9]$",target),full.names = TRUE) if (length(runtypefiles) > 0) { runtypetables = lapply(runtypefiles, function(x) read.table(x, quote="\"", comment.char="", col.names=c(bn))) runtypetables = trim_data(runtypetables) list_of_maxlines = data2maxlines(runtypetables) mean_maxline<-Reduce(function(a,b) a+b,list_of_maxlines,0)/length(runtypetables) all_maxlines=append(all_maxlines,mean_maxline) } } min_length <- min(sapply(all_maxlines, length)) all_maxlines=lapply(all_maxlines, function(v) v[1:min_length]) one_frame<-data.frame(all_maxlines) one_frame[length(one_frame)+1] <- seq_len(length(one_frame[[1]])) names(one_frame)[length(one_frame)] <- 'iters' ylow=min(one_frame[1:length(one_frame)-1]) yhigh=max(one_frame[1:length(one_frame)-1]) plot(c(1,length(one_frame[[1]])),c(ylow,yhigh), col='white', xlab="iters", ylab="wcet", pch='.') typenames = names(one_frame)[which(names(one_frame) != 'iters')] for (t in seq_len(length(typenames))) { points(one_frame[c('iters',typenames[t])], col=myolors[t], pch='.') } legend("bottomright", legend=typenames, col=myolors, lty="solid")