[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