<!DOCTYPE HTML>
<html>
  <head>
    <title>{{benchmark}} - Benchmarks - Go Dashboard</title>
    <link rel="stylesheet" type="text/css" href="/static/style.css">
  </head>

  <body>
    <ul class="menu">
      <li><a href="/">Build Status</a></li>
      <li><a href="/package">Packages</a></li>
      <li><a href="/benchmarks">Benchmarks</a></li>
      <li><a href="http://golang.org/">golang.org</a></li>
    </ul>

    <h1>Go Dashboard</h1>

    <h2>{{benchmark}}</h2>

    <a href="{{benchmark}}?fmt=json">json</a>

    {% for g in graphs %}
      <h3>{{g.builder}}</h3>
      {% if g.url %}
        <img src="{{g.url}}&chs=600x150&chf=bg,s,00000000&chco=000000ff&chls=1,1,0">
      {% else %}
        (no data available)
      {% endif %}
    {% endfor %}
    
    <br><br>
    
    <table class="alternate" cellpadding="0" cellspacing="0">
      <tr>
        <th></th>
        {% for b in builders %}
          <th class="builder">{{b.goos}}<br>{{b.goarch}}<br>{{b.note}}</th>
        {% endfor %}
        <th></th>
        <th></th>
        <th></th>
      </tr>

      {% for r in revs %}
      <tr>
        <td class="revision"><span class="hash"><a href="https://code.google.com/p/go/source/detail?r={{r.node}}">{{r.node|slice:":12"}}</a></span></td>

        {% for ns in r.ns_by_builder %}
          <td class="result">
          {% if ns %}
            {{ns}}
          {% endif %}
          </td>
        {% endfor %}
        <td class="user">{{r.user|escape}}</td>
        <td class="date">{{r.date|escape}}</td>
        <td class="desc">{{r.shortdesc|escape}}</td>
      </tr>
      {% endfor %}
  </body>
</html>
