<!--
  Copyright (C) 2015-2017 Apple Inc. All rights reserved.

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:
  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  THE POSSIBILITY OF SUCH DAMAGE.
-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no">

    <title>MotionMark 1.0</title>

    <link rel="stylesheet" href="resources/runner/motionmark.css">

    <script src="resources/strings.js" defer></script>
    <script src="resources/extensions.js" defer></script>
    <script src="resources/statistics.js" defer></script>

    <script src="resources/runner/tests.js" charset="utf-8" defer></script>
    <script src="resources/runner/motionmark.js" defer></script>

    <script src="resources/runner/benchmark-runner.js" defer></script>

    <script>
        window.addEventListener("load", function() {
            // Start the fade in animation.
            document.body.classList.add("images-loaded");
        });
    </script>
</head>
<body class="showing-intro">
    <main>
        <section id="intro" class="selected">
            <svg class="logo"><use xlink:href="resources/runner/logo.svg#root"></svg>
            <div class="body">
                <p>MotionMark is a graphics benchmark that measures a browser’s capability to animate complex scenes at a target frame rate.</p>

                <p><a href="about.html">More details</a> about the benchmark are available. Bigger scores are better.</p>
                <p>For accurate results, please take your browser window full screen, or rotate your device to landscape orientation.</p>
                <p class="portrait-orientation-check"><b>Please rotate your device.</b></p>
                <button class="landscape-orientation-check" onclick="benchmarkController.startBenchmark()">Run Benchmark</button>
            </div>
        </section>

        <section id="test-container" class="frame-container"></section>

        <section id="results">
            <svg class="logo"><use xlink:href="resources/runner/logo.svg#root"></svg>
            <div class="body">
                <div class="score-container">
                    <div class="score"></div>
                    <div class="confidence"></div>
                    <div class="detail">
                        <span class="small">on a small screen (phone)</span>
                        <span class="medium">on a medium screen (laptop, tablet)</span>
                        <span class="large">on a large screen (desktop)</span>
                    </div>
                </div>
                <div class="table-container">
                    <div>
                        <table id="results-score"></table>
                        <table id="results-data"></table>
                    </div>
                    <table id="results-header"></table>
                </div>
                <button onclick="benchmarkController.startBenchmark()">Test Again</button>
            </div>
        </section>
    </main>
</body>
</html>
