Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions codespeed/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
]

urlpatterns += [
re_path(r'^embed/comparison/$', views.embed_comparison, name='embed-comparison'),
re_path(r'^historical/json/$', views.gethistoricaldata, name='gethistoricaldata'),
re_path(r'^reports/$', views.reports, name='reports'),
re_path(r'^changes/$', views.changes, name='changes'),
Expand Down
19 changes: 19 additions & 0 deletions codespeed/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from django.shortcuts import get_object_or_404, render
from django.views.decorators.http import require_GET, require_POST
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.generic.base import TemplateView

from .auth import basic_auth_required
Expand Down Expand Up @@ -93,6 +94,24 @@ def get_context_data(self, **kwargs):
return context


@require_GET
@xframe_options_exempt
def embed_comparison(request):
"""Frame-exempt page rendering only the baseline-comparison
for embedding on pypy.org"""
context = {}
try:
context['baseline'] = Executable.objects.get(
name=settings.DEF_BASELINES[0]['executable'])
def_name = settings.DEF_EXECUTABLES[0]['name']
def_project = Project.objects.get(name=settings.DEF_EXECUTABLES[0]['project'])
context['default_exe'] = Executable.objects.get(
name=def_name, project=def_project)
except Exception as e:
logger.error('embed_comparison: %s', e)
return render(request, 'embed_comparison.html', context)


@require_GET
def gethistoricaldata(request):
data = {'results': {}, 'benchmarks': []}
Expand Down
88 changes: 88 additions & 0 deletions speed_pypy/templates/embed_comparison.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>PyPy vs CPython benchmark comparison</title>
<style>
html, body { margin: 0; padding: 0; background: transparent; }
#baseline-comparison-plot {
position: relative;
width: 100%;
height: 480px;
font-family: sans-serif;
}
</style>
</head>
<body>
<div id="baseline-comparison-plot"></div>

<script type="text/javascript" src="{% static 'js/jquery-1.12.3.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/chart.umd.min.js' %}"></script>
<script type="text/javascript">
Chart.Tooltip.positioners.cursor = function(_items, eventPosition) {
return {x: eventPosition.x, y: eventPosition.y};
};

function renderplot(data) {
var wrap = document.getElementById('baseline-comparison-plot');
if (data === null || data.length === 0 ||
typeof data === 'string' || data instanceof String) {
wrap.innerHTML = 'Error retrieving data';
return;
}

var benchmarks = [], latestValues = [], baselineValues = [];
var tagged_data = [];
for (var i in data['tagged_revs']) { tagged_data[i] = []; }

for (var bench in data['benchmarks']) {
var benchname = data['benchmarks'][bench];
var add_to_tagged_data = true;
for (var i in data['tagged_revs']) {
var rev = data['tagged_revs'][i];
if (data['results'][benchname][rev] === 0) { add_to_tagged_data = false; break; }
tagged_data[i].push(data['results'][benchname][rev] / data['results'][benchname][data['baseline']]);
}
if (!add_to_tagged_data) { continue; }
benchmarks.push(benchname);
var rel = data['results'][benchname]['latest'] / data['results'][benchname][data['baseline']];
latestValues.push(rel);
baselineValues.push(1.0);
}

var canvas1 = document.createElement('canvas');
wrap.appendChild(canvas1);
new Chart(canvas1, {
type: 'bar',
data: {
labels: benchmarks,
datasets: [
{label: 'latest {{ default_exe }}', data: latestValues, backgroundColor: '#4e79a7'},
{label: data['baseline'], data: baselineValues, type: 'line',
borderColor: '#f28e2b', backgroundColor: 'transparent',
pointRadius: 0, borderWidth: 2, fill: false}
]
},
options: {
animation: false,
responsive: true,
maintainAspectRatio: false,
plugins: {
tooltip: {position: 'cursor'}
},
scales: {
x: {ticks: {maxRotation: 70, minRotation: 70, autoSkip: false, font: {size: 11}}},
y: {min: 0, max: 2.0, ticks: {callback: function(v) { return v.toFixed(2); }}}
}
}
});
}

$(function() {
$.getJSON("{% url 'gethistoricaldata' %}", renderplot);
});
</script>
</body>
</html>
1 change: 1 addition & 0 deletions speed_pypy/templates/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ <h3>How has PyPy performance evolved over time?</h3>
$('#geofaster').html((1 / trunk_geomean).toFixed(1));

// Plot 1: per-benchmark normalized comparison
// Needs to be kept in sync with the plot in embed_comparison.html
var wrap1 = document.getElementById('baseline-comparison-plot');
var canvas1 = document.createElement('canvas');
wrap1.appendChild(canvas1);
Expand Down
Loading