<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>BrowserBench.org &mdash; Browser Benchmarks</title>
    <link rel="stylesheet" href="resources/main.css">
    <script>
    function chooseAsset(img) {
        var ratio = window.devicePixelRatio;
        var srcset = img.getAttribute('srcset');
        if (!srcset)
            return null;
        var tokens = srcset.split(/\s*,\s*/);
        for (var i = 0; i < tokens.length; i++) {
            var parsedToken = tokens[i].match(/(.+)\s+(\d)x/);
            if (parsedToken && parseInt(parsedToken[2]) == ratio)
                return parsedToken[1];
        }
        return null;
    }

    if (!HTMLImageElement.prototype.srcset) {
        window.addEventListener('DOMContentLoaded', function () {
            var images = document.querySelectorAll('img');
            for (var i = 0; i < images.length; i++) {
                if (!images[i].srcset)
                    images[i].src = chooseAsset(images[i]);
            }
        });
    }
    </script>
</head>
<body>
<main>

<div id="logo">
<span class="light">browser</span><span class="normal">bench</span><span class="highlight">.</span><span class="light">org</span>
</div>

<hr>

<section class="benchmarks">
    
<a class="benchmark" href="ARES-6" tabindex="0">
<img id="ares-6-logo" srcset="resources/ARES-6-Logo.png 1x, resources/ARES-6-Logo@2x.png 2x" alt="ARES-6">
<p>ARES-6 is a benchmark designed to test ECMAScript 6 applications.</p>
</a>

<a class="benchmark" href="MotionMark" tabindex="0">
<img id="motionmark-logo" srcset="resources/MotionMark-Logo.png 1x, resources/MotionMark-Logo@2x.png 2x" alt="MotionMark">
<p>MotionMark is a benchmark designed to put browser graphics systems to the test.</p>
</a>

<a class="benchmark" href="Speedometer2.0" tabindex="0">
<img id="speedometer-logo"
    srcset="resources/Speedometer-Logo.png 1x, resources/Speedometer-Logo@2x.png 2x" alt="Speedometer">
<p>Speedometer is a browser benchmark that measures the responsiveness of web applications.</p>
</a>

<a class="benchmark" href="JetStream" tabindex="0">
<img id="jetstream-logo"
    srcset="resources/JetStream-Logo.png 1x, resources/JetStream-Logo@2x.png 2x" alt="JetStream">
<p>JetStream is a JavaScript benchmark suite focused on the most advanced web applications.</p>
</a>
</section>
</main>
</body>
</html>
