@ 261012.1
current
#!/usr/bin/env Rscript

# Usage:
#
#     plot.r data.csv
#
# Output will be placed in SVG files.

library(ggplot2)

args <- commandArgs(trailingOnly = TRUE)

data <- read.table(args[1], header = TRUE, sep = ",")

jitterBoxPlot <- function(data, operation, titleText) {
    print(paste(operation, "---------------------------------------------------------------------------"))

    operationData <- subset(data, data$Operation == operation)

    operationData$Implementation.and.Browser <- factor(
        operationData$Implementation.and.Browser,
        levels = c(
            "JavaScript.Chrome.Canary",
            "WebAssembly.Chrome.Canary",
            "JavaScript.Firefox.Nightly",
            "WebAssembly.Firefox.Nightly"
        )
    )

    chromeJs <- subset(operationData,
                       operationData$Implementation.and.Browser == "JavaScript.Chrome.Canary")$Time
    print(paste("mean: scala.js: Chrome+JS =", mean(chromeJs)))
    print(paste("cv: scala.js: Chrome+JS =", sd(chromeJs) / mean(chromeJs)))

    chromeWasm <- subset(operationData,
                         operationData$Implementation.and.Browser == "WebAssembly.Chrome.Canary")$Time
    print(paste("mean: scala.js: Chrome+Wasm =", mean(chromeWasm)))
    print(paste("cv: scala.js: Chrome+Wasm =", sd(chromeWasm) / mean(chromeWasm)))

    firefoxJs <- subset(operationData,
                        operationData$Implementation.and.Browser == "JavaScript.Firefox.Nightly")$Time
    print(paste("mean: scala.js: Firefox+JS =", mean(firefoxJs)))
    print(paste("cv: scala.js: Firefox+JS =", sd(firefoxJs) / mean(firefoxJs)))

    firefoxWasm <- subset(operationData,
                          operationData$Implementation.and.Browser == "WebAssembly.Firefox.Nightly")$Time
    print(paste("mean: scala.js: Firefox+Wasm =", mean(firefoxWasm)))
    print(paste("cv: scala.js: Firefox+Wasm =", sd(firefoxWasm) / mean(firefoxWasm)))

    print(paste("normalized: Chrome =", mean(chromeWasm) / mean(chromeJs)))
    print(paste("normalized: Firefox =", mean(firefoxWasm) / mean(firefoxJs)))

    thePlot <- ggplot(operationData,
                      aes(x = operationData$Implementation.and.Browser,
                          y = operationData$Time,
                          color = operationData$Implementation.and.Browser,
                          pch = operationData$Implementation.and.Browser)) +
        geom_boxplot(outlier.shape = NA) +
        geom_jitter(position = position_jitter(width = 0.1)) +
        scale_y_continuous(limits = quantile(operationData$Time, c(NA, 0.99))) +
        expand_limits(y = 0) +
        theme(legend.position = "none",
              axis.text.x = element_text(angle = 45, hjust = 1),
              axis.title.x = element_blank()) +
        ggtitle(titleText) +
        labs(y = "Time (ms)",
             subtitle = "Scala.JS Source Map (Mappings String Size = 14,964,446)")

    ## print(thePlot)
    svgFile <- paste(operation, ".scalajs.svg", sep="")
    ggsave(plot = thePlot,
           file = svgFile,
           device = "svg")
}

largeData <- subset(data, Mappings.Size==14964446)

jitterBoxPlot(largeData, "set.first.breakpoint", "Set First Breakpoint")
jitterBoxPlot(largeData, "subsequent.setting.breakpoints", "Subsquent Setting Breakpoints")

jitterBoxPlot(largeData, "first.pause.at.exception", "First Pause at Exception")
jitterBoxPlot(largeData, "subsequent.pausing.at.exceptions", "Subsequent Pausing at Exceptions")

jitterBoxPlot(largeData, "parse.and.iterate", "Parse and Iterate Each Mapping")
jitterBoxPlot(largeData, "iterate.already.parsed", "Already Parsed, Iterate Each Mapping")

meanPlot <- function(data, operation, titleText) {
    operationData <- subset(data, data$Operation == operation)

    operationData$Implementation.and.Browser <- factor(
        operationData$Implementation.and.Browser,
        levels = c(
            "JavaScript.Chrome.Canary",
            "WebAssembly.Chrome.Canary",
            "JavaScript.Firefox.Nightly",
            "WebAssembly.Firefox.Nightly"
        )
    )

    thePlot <- ggplot(operationData,
                      aes(x = operationData$Mappings.Size,
                          y = operationData$Time,
                          color = operationData$Implementation.and.Browser,
                          pch = operationData$Implementation.and.Browser)) +
        stat_summary(fun.y = mean, geom = "line") +
        stat_summary(fun.y = mean, geom = "point") +
        geom_point() +
        theme(legend.position = "bottom",
              legend.direction="vertical",
              legend.title = element_blank()) +
        scale_y_continuous(limits = quantile(operationData$Time, c(NA, 0.99))) +
        ## scale_x_log10() +
        ## scale_y_log10() +
        expand_limits(y = 0) +
        ggtitle(titleText) +
        labs(x = "Mappings String Size",
             y = "Time (ms)",
             subtitle = "Mean")

    ## print(thePlot)
    svgFile <- paste(operation, ".mean.svg", sep="")
    ggsave(plot = thePlot,
           file = svgFile,
           device = "svg")
}

meanPlot(data, "set.first.breakpoint", "Set First Breakpoint")
meanPlot(data, "subsequent.setting.breakpoints", "Subsequent Setting Breakpoints")
meanPlot(data, "first.pause.at.exception", "First Pause at Exception")
meanPlot(data, "subsequent.pausing.at.exceptions", "Subsequent Pausing at Exceptions")
meanPlot(data, "parse.and.iterate", "Parse and Iterate Each Mapping")
meanPlot(data, "iterate.already.parsed", "Already Parsed, Iterate Each Mapping")