[pypy-svn] r70801 - in pypy/build/bot2/jsplot: . js test test/data

fijal at codespeak.net fijal at codespeak.net
Sun Jan 24 19:53:17 CET 2010


Author: fijal
Date: Sun Jan 24 19:53:16 2010
New Revision: 70801

Added:
   pypy/build/bot2/jsplot/plotone.html
   pypy/build/bot2/jsplot/test/data/dir.html
      - copied unchanged from r70799, pypy/build/bot2/jsplot/test/data/dir
Removed:
   pypy/build/bot2/jsplot/test/data/dir
Modified:
   pypy/build/bot2/jsplot/js/collect.js
   pypy/build/bot2/jsplot/js/plot.js
   pypy/build/bot2/jsplot/test/jstest_collect_any.js
Log:
Add plotone.html, which maps last revision on logarithmic scale


Modified: pypy/build/bot2/jsplot/js/collect.js
==============================================================================
--- pypy/build/bot2/jsplot/js/collect.js	(original)
+++ pypy/build/bot2/jsplot/js/collect.js	Sun Jan 24 19:53:16 2010
@@ -29,30 +29,81 @@
     }
 }
 
-function collect_data(plot_function, revlist_url, base_url, async)
+function _collect(foreachrev, plot_function, revlist_url, base_url, async)
 {
     $.ajax({
         url: revlist_url,
         dataType: 'html',
         success: function(htmlstr) {
             var revnos = extract_revnos($(htmlstr));
-            var collector = new Collector(revnos);
-            collector.plot = plot_function;
-            for (var i in revnos) {
-                $.ajax({
-                    url: base_url + revnos[i] + '.json',
-                    success: function(data) {
-                    collector.collect(data)
-                    },
-                    dataType: 'json',
-                    async: async,
-                });
-            }
+            foreachrev(revnos);
         },
         async: async,
     });
 }
 
+function collect_data(plot_function, revlist_url, base_url, async)
+{
+    _collect(function (revnos) {
+        var collector = new Collector(revnos);
+            collector.plot = plot_function;
+        for (var i in revnos) {
+            $.ajax({
+                url: base_url + revnos[i] + '.json',
+                success: function(data) {
+                    collector.collect(data)
+                },
+                dataType: 'json',
+                async: async,
+            });
+        }
+    }, plot_function, revlist_url, base_url, async);
+}
+
+function collect_latest_data(plot_function, revlist_url, base_url, async)
+{
+    function extract_ch(elem) {
+        if (elem.avg_changed) {
+            return elem.avg_changed;
+        }
+        return elem.changed_time;
+    }
+
+    function extract_base(elem) {
+        if (elem.avg_base) {
+            return elem.avg_base;
+        }
+        return elem.base_time;
+    }
+
+    function postprocess(data) {
+        var res = [[], []];
+        var benchnames = [];
+        for (var i = 0; i < data.results.length; ++i) {
+            var elem = data.results[i];
+            benchnames.push(elem[0]);
+            res[0].push(extract_ch(elem[2]));
+            res[1].push(extract_base(elem[2]));
+        }
+        data.results = res;
+        data.benchnames = benchnames;
+        return data;
+    }
+
+    _collect(function (revnos) {
+        revnos.sort();
+        var lastrev = revnos[revnos.length - 1];
+        $.ajax({
+            url: base_url + lastrev + '.json',
+            success: function(data) {
+                plot_function(postprocess(data));
+            },
+            dataType: 'json',
+            async: async,
+        });
+    }, plot_function, revlist_url, base_url, async);
+}
+
 function extract_benchmark_data(data)
 {
     var retval = {};

Modified: pypy/build/bot2/jsplot/js/plot.js
==============================================================================
--- pypy/build/bot2/jsplot/js/plot.js	(original)
+++ pypy/build/bot2/jsplot/js/plot.js	Sun Jan 24 19:53:16 2010
@@ -6,7 +6,7 @@
     JSON_DIR_LIST = JSON_DIR_URL;
 } else {
     JSON_DIR_URL  = "test/data/";
-    JSON_DIR_LIST = JSON_DIR_URL + "dir";
+    JSON_DIR_LIST = JSON_DIR_URL + "dir.html";
 }
 
 var large_displayed = false;
@@ -110,3 +110,62 @@
     var plotinput = get_plot_input(benchresults, cpython_results)
     $.plot($("#placeholder").children(":last"), plotinput, common_attrs());
 }
+
+function plot_one(plotdata) {
+    function lg(v) {
+        return Math.log(v) / Math.log(2);
+    }
+
+    var results = plotdata.results;
+    var data = [];
+    var min = 1, max = 1;
+    for (var i = 0; i < results[0].length; ++i) {
+        var next = lg(results[1][i] / results[0][i]);
+        if (next < min) {
+            min = Math.floor(next);
+        }
+        if (next > max) {
+            max = Math.ceil(next);
+        }
+        data.push([i - .3, next]);
+    }
+    var yticks = [];
+    for (var i = min; i < max; i++) {
+        var v = Math.pow(2, i);
+        if (v < 1) {
+            yticks.push([i, 1/v + "x slower"]);
+        } else if (v == 1) {
+            yticks.push([i, "equal"]);
+        } else {
+            yticks.push([i, v + "x faster"]);
+        }
+    }
+    var xticks = [];
+    for (var i = 0; i < plotdata.benchnames.length; ++i) {
+        xticks.push([i, plotdata.benchnames[i]]);
+    }
+    $.plot($("#placeholder"), [data],
+           {
+               series: {
+                   bars: {
+                       show: true,
+                       barWidth: .6,
+                       align: 'left',
+                   },
+                   hoverable: true,
+               },
+               yaxis: {
+                   ticks: yticks,
+               },
+               xaxis: {
+                   ticks: xticks,
+               },
+               grid: {
+                   hoverable: true,
+               }
+           });
+    $("#placeholder").bind("plothover", function (event, pos, item) {
+        if (item) {
+        }
+    });
+}
\ No newline at end of file

Added: pypy/build/bot2/jsplot/plotone.html
==============================================================================
--- (empty file)
+++ pypy/build/bot2/jsplot/plotone.html	Sun Jan 24 19:53:16 2010
@@ -0,0 +1,22 @@
+
+<html>
+  <head>
+    <script src="js/underscore-min.js"></script>
+    <script src="js/jquery.min.js"></script>
+    <script src="js/jquery.flot.js"></script>
+    <script src="js/collect.js"></script>
+    <script src="js/plot.js"></script>
+    <script>    
+      $(document).ready(function() {
+        collect_latest_data(plot_one, JSON_DIR_LIST, JSON_DIR_URL, true);
+      });
+    </script>
+    <link rel="stylesheet" href="css/main.css" type="text/css"/>
+  </head>
+  <body>
+    <h1>Last run view</h1>
+    <p>PyPy with JIT against CPython</p>
+    <div id="placeholder" class="largeplot">
+    </div>
+  </body>
+</html>

Modified: pypy/build/bot2/jsplot/test/jstest_collect_any.js
==============================================================================
--- pypy/build/bot2/jsplot/test/jstest_collect_any.js	(original)
+++ pypy/build/bot2/jsplot/test/jstest_collect_any.js	Sun Jan 24 19:53:16 2010
@@ -7,60 +7,72 @@
                            "slowspitfire", "spambayes"]
 
 Tests = {
-test_extract_benchmark_data: function() {
-    var revnos = [70634, 70632];
-    var loaded_data = [];
-    for (var i in revnos) {
+    test_extract_benchmark_data: function() {
+        var revnos = [70634, 70632];
+        var loaded_data = [];
+        for (var i in revnos) {
+            $.ajax({
+                url: '/test/data/' + revnos[i] + '.json',
+                dataType: 'json',
+                success: function(result) {
+                    loaded_data.push(result);
+                },
+                async: false
+            });
+        }
+        var bench_data = extract_benchmark_data(loaded_data);
+        aisDeeply(bench_data.results.ai, [[70632, 0.43707809448220003],
+                                          [70634, 0.42492904663079994]]);
+        var benchnames = _.keys(bench_data.results);
+        benchnames.sort();
+        aisDeeply(benchnames, expected_benchnames);
+        var benchnames = _.keys(bench_data.cpytimes);
+        benchnames.sort();
+        aisDeeply(benchnames, expected_benchnames);
+        ais(bench_data.cpytimes.ai, 0.43372206687940001);
+        ais(bench_data.lasttimes.ai, "1.0207x faster");
+    },
+
+    test_extract_revnos: function() {
+        var dirdoc;
         $.ajax({
-            url: '/test/data/' + revnos[i] + '.json',
-            dataType: 'json',
-            success: function(result) {
-                loaded_data.push(result);
+            url: "/test/data/dir.html",
+            contentType: "text/xml",
+            dataType: "html",
+            success: function (result) {
+                dirdoc = $(result);
             },
-            async: false
+            async: false,
         });
-    }
-    var bench_data = extract_benchmark_data(loaded_data);
-    aisDeeply(bench_data.results.ai, [[70632, 0.43707809448220003],
-                                      [70634, 0.42492904663079994]]);
-    var benchnames = _.keys(bench_data.results);
-    benchnames.sort();
-    aisDeeply(benchnames, expected_benchnames);
-    var benchnames = _.keys(bench_data.cpytimes);
-    benchnames.sort();
-    aisDeeply(benchnames, expected_benchnames);
-    ais(bench_data.cpytimes.ai, 0.43372206687940001);
-    ais(bench_data.lasttimes.ai, "1.0207x faster");
-},
-
-test_extract_revnos: function() {
-    var dirdoc;
-    $.ajax({
-        url: "/test/data/dir",
-        contentType: "text/xml",
-        dataType: "html",
-        success: function (result) {
-            dirdoc = $(result);
-        },
-        async: false,
-    });
-    var revnos = extract_revnos(dirdoc);
-    aisDeeply(revnos, [70632, 70634, 70641, 70643]);
-},
+        var revnos = extract_revnos(dirdoc);
+        aisDeeply(revnos, [70632, 70634, 70641, 70643]);
+    },
 
-test_collect_data: function() {
-    var checkdata;
-    var benchnames = [];
-    function check(benchname, benchresults, cpyresults) {
-        benchnames.push(benchname);
-        if (benchname == "html5lib") {
-            checkdata = [benchresults, cpyresults];
+    test_collect_data: function() {
+        var checkdata;
+        var benchnames = [];
+        function check(benchname, benchresults, cpyresults) {
+            benchnames.push(benchname);
+            if (benchname == "html5lib") {
+                checkdata = [benchresults, cpyresults];
+            }
         }
-    }
-    collect_data(check, "/test/data/dir", "/test/data/", false);
-    aisDeeply(benchnames, expected_benchnames);
-    aisDeeply(checkdata, [[[70632, 18.3431589603], [70634, 18.2035400867],
-                           [70641, 19.623087883], [70643, 18.1294131279]],
-                          [[70632, 11.7123618126], [70643, 11.7123618126]]]);
-}
+        collect_data(check, "/test/data/dir.html", "/test/data/", false);
+        aisDeeply(benchnames, expected_benchnames);
+        aisDeeply(checkdata, [[[70632, 18.3431589603], [70634, 18.2035400867],
+                               [70641, 19.623087883], [70643, 18.1294131279]],
+                              [[70632, 11.7123618126],
+                               [70643, 11.7123618126]]]);
+    },
+
+    test_collect_latest_data: function() {
+        var checkdata;
+        function check(data) {
+            checkdata = data;
+        };
+        collect_latest_data(check, "/test/data/dir.html", "/test/data/", false);
+        ais(checkdata.results[0][0], 0.4273978233336)
+        ais(checkdata.results[1][0], 0.43415923118599997);
+        ais(checkdata.benchnames[0], 'ai');
+    },
 }



More information about the Pypy-commit mailing list