<!DOCTYPE html> 
 | 
<html lang="en"> 
 | 
<head> 
 | 
{# Scripts, for visualization#} 
 | 
<!--START-OF-SCRIPTS--> 
 | 
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
 | 
<script type="text/javascript"> 
 | 
google.charts.load('current', {'packages':['corechart']}); 
 | 
var chartsDrawing = 0; 
 | 
</script> 
 | 
  
 | 
{# Render measurement result charts #} 
 | 
{% for test in test_data %} 
 | 
  {% if test.status == 'SUCCESS' %} 
 | 
    {% for measurement in test.measurements %} 
 | 
      {% set chart_elem_id = test.name + '_' + measurement.name + '_chart' %} 
 | 
      {% include 'measurement_chart.html' %} 
 | 
    {% endfor %} 
 | 
  {% endif %} 
 | 
{% endfor %} 
 | 
  
 | 
<!--END-OF-SCRIPTS--> 
 | 
  
 | 
{# Styles #} 
 | 
<style> 
 | 
.meta-table { 
 | 
  font-size: 14px; 
 | 
  text-align: left; 
 | 
  border-collapse: collapse; 
 | 
} 
 | 
.meta-table tr:nth-child(even){background-color: #f2f2f2} 
 | 
meta-table th, .meta-table td { 
 | 
  padding: 4px; 
 | 
} 
 | 
.summary { 
 | 
  margin: 0; 
 | 
  font-size: 14px; 
 | 
  text-align: left; 
 | 
  border-collapse: collapse; 
 | 
} 
 | 
summary th, .meta-table td { 
 | 
  padding: 4px; 
 | 
} 
 | 
.measurement { 
 | 
  padding: 8px 0px 8px 8px; 
 | 
  border: 2px solid #f0f0f0; 
 | 
  margin-bottom: 10px; 
 | 
} 
 | 
.details { 
 | 
  margin: 0; 
 | 
  font-size: 12px; 
 | 
  text-align: left; 
 | 
  border-collapse: collapse; 
 | 
} 
 | 
.details th { 
 | 
  padding-right: 8px; 
 | 
} 
 | 
.details.plain th { 
 | 
  font-weight: normal; 
 | 
} 
 | 
.preformatted { 
 | 
  font-family: monospace; 
 | 
  white-space: pre-wrap; 
 | 
  background-color: #f0f0f0; 
 | 
  margin-left: 10px; 
 | 
} 
 | 
hr { 
 | 
  color: #f0f0f0; 
 | 
} 
 | 
h2 { 
 | 
  font-size: 20px; 
 | 
  margin-bottom: 0px; 
 | 
  color: #707070; 
 | 
} 
 | 
h3 { 
 | 
  font-size: 16px; 
 | 
  margin: 0px; 
 | 
  color: #707070; 
 | 
} 
 | 
</style> 
 | 
  
 | 
<title>{{ title }}</title> 
 | 
</head> 
 | 
  
 | 
{% macro poky_link(commit) -%} 
 | 
    <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?id={{ commit }}">{{ commit[0:11] }}</a> 
 | 
{%- endmacro %} 
 | 
  
 | 
<body><div style="width: 700px"> 
 | 
  {# Test metadata #} 
 | 
  <h2>General</h2> 
 | 
  <hr> 
 | 
  <table class="meta-table" style="width: 100%"> 
 | 
    <tr> 
 | 
      <th></th> 
 | 
      <th>Current commit</th> 
 | 
      <th>Comparing with</th> 
 | 
    </tr> 
 | 
    {% for key, item in metadata.items() %} 
 | 
    <tr> 
 | 
      <th>{{ item.title }}</th> 
 | 
      {%if key == 'commit' %} 
 | 
        <td>{{ poky_link(item.value) }}</td> 
 | 
        <td>{{ poky_link(item.value_old) }}</td> 
 | 
      {% else %} 
 | 
        <td>{{ item.value }}</td> 
 | 
        <td>{{ item.value_old }}</td> 
 | 
      {% endif %} 
 | 
    </tr> 
 | 
    {% endfor %} 
 | 
  </table> 
 | 
  
 | 
  {# Test result summary #} 
 | 
  <h2>Test result summary</h2> 
 | 
  <hr> 
 | 
  <table class="summary" style="width: 100%"> 
 | 
    {% for test in test_data %} 
 | 
      {% if loop.index is even %} 
 | 
        {% set row_style = 'style="background-color: #f2f2f2"' %} 
 | 
      {% else %} 
 | 
        {% set row_style = 'style="background-color: #ffffff"' %} 
 | 
      {% endif %} 
 | 
      {% if test.status == 'SUCCESS' %} 
 | 
        {% for measurement in test.measurements %} 
 | 
          <tr {{ row_style }}> 
 | 
            {% if loop.index == 1 %} 
 | 
              <td>{{ test.name }}: {{ test.description }}</td> 
 | 
            {% else %} 
 | 
              {# add empty cell in place of the test name#} 
 | 
              <td></td> 
 | 
            {% endif %} 
 | 
            {% if measurement.absdiff > 0 %} 
 | 
              {% set result_style = "color: red" %} 
 | 
            {% elif measurement.absdiff == measurement.absdiff %} 
 | 
              {% set result_style = "color: green" %} 
 | 
            {% else %} 
 | 
              {% set result_style = "color: orange" %} 
 | 
            {%endif %} 
 | 
            {% if measurement.reldiff|abs > 2 %} 
 | 
              {% set result_style = result_style + "; font-weight: bold" %} 
 | 
            {% endif %} 
 | 
            <td>{{ measurement.description }}</td> 
 | 
            <td style="font-weight: bold">{{ measurement.value.mean }}</td> 
 | 
            <td style="{{ result_style }}">{{ measurement.absdiff_str }}</td> 
 | 
            <td style="{{ result_style }}">{{ measurement.reldiff_str }}</td> 
 | 
          </tr> 
 | 
        {% endfor %} 
 | 
      {% else %} 
 | 
        <td style="font-weight: bold; color: red;">{{test.status }}</td> 
 | 
        <td></td> <td></td> <td></td> <td></td> 
 | 
      {% endif %} 
 | 
    {% endfor %} 
 | 
  </table> 
 | 
  
 | 
  {# Detailed test results #} 
 | 
  {% for test in test_data %} 
 | 
  <h2>{{ test.name }}: {{ test.description }}</h2> 
 | 
  <hr> 
 | 
    {% if test.status == 'SUCCESS' %} 
 | 
      {% for measurement in test.measurements %} 
 | 
        <div class="measurement"> 
 | 
          <h3>{{ measurement.description }}</h3> 
 | 
          <div style="font-weight:bold;"> 
 | 
            <span style="font-size: 23px;">{{ measurement.value.mean }}</span> 
 | 
            <span style="font-size: 20px; margin-left: 12px"> 
 | 
            {% if measurement.absdiff > 0 %} 
 | 
            <span style="color: red"> 
 | 
            {% elif measurement.absdiff == measurement.absdiff %} 
 | 
            <span style="color: green"> 
 | 
            {% else %} 
 | 
            <span style="color: orange"> 
 | 
            {% endif %} 
 | 
            {{ measurement.absdiff_str }} ({{measurement.reldiff_str}}) 
 | 
            </span></span> 
 | 
          </div> 
 | 
          {# Table for trendchart and the statistics #} 
 | 
          <table style="width: 100%"> 
 | 
            <tr> 
 | 
              <td style="width: 75%"> 
 | 
                {# Linechart #} 
 | 
                <div id="{{ test.name }}_{{ measurement.name }}_chart"></div> 
 | 
              </td> 
 | 
              <td> 
 | 
                {# Measurement statistics #} 
 | 
                <table class="details plain"> 
 | 
                  <tr> 
 | 
                    <th>Test runs</th><td>{{ measurement.value.sample_cnt }}</td> 
 | 
                  </tr><tr> 
 | 
                    <th>-/+</th><td>-{{ measurement.value.minus }} / +{{ measurement.value.plus }}</td> 
 | 
                  </tr><tr> 
 | 
                    <th>Min</th><td>{{ measurement.value.min }}</td> 
 | 
                  </tr><tr> 
 | 
                    <th>Max</th><td>{{ measurement.value.max }}</td> 
 | 
                  </tr><tr> 
 | 
                    <th>Stdev</th><td>{{ measurement.value.stdev }}</td> 
 | 
                  </tr><tr> 
 | 
                    <th><div id="{{ test.name }}_{{ measurement.name }}_chart_png"></div></th> 
 | 
                    <td></td> 
 | 
                  </tr> 
 | 
                </table> 
 | 
              </td> 
 | 
            </tr> 
 | 
          </table> 
 | 
  
 | 
          {# Task and recipe summary from buildstats #} 
 | 
          {% if 'buildstats' in measurement %} 
 | 
            Task resource usage 
 | 
            <table class="details" style="width:100%"> 
 | 
              <tr> 
 | 
                <th>Number of tasks</th> 
 | 
                <th>Top consumers of cputime</th> 
 | 
              </tr> 
 | 
              <tr> 
 | 
                <td style="vertical-align: top">{{ measurement.buildstats.tasks.count }} ({{ measurement.buildstats.tasks.change }})</td> 
 | 
                {# Table of most resource-hungry tasks #} 
 | 
                <td> 
 | 
                  <table class="details plain"> 
 | 
                    {% for diff in measurement.buildstats.top_consumer|reverse %} 
 | 
                    <tr> 
 | 
                      <th>{{ diff.pkg }}.{{ diff.task }}</th> 
 | 
                      <td>{{ '%0.0f' % diff.value2 }} s</td> 
 | 
                    </tr> 
 | 
                    {% endfor %} 
 | 
                  </table> 
 | 
                </td> 
 | 
              </tr> 
 | 
              <tr> 
 | 
                <th>Biggest increase in cputime</th> 
 | 
                <th>Biggest decrease in cputime</th> 
 | 
              </tr> 
 | 
              <tr> 
 | 
                {# Table biggest increase in resource usage #} 
 | 
                <td> 
 | 
                  <table class="details plain"> 
 | 
                    {% for diff in measurement.buildstats.top_increase|reverse %} 
 | 
                    <tr> 
 | 
                      <th>{{ diff.pkg }}.{{ diff.task }}</th> 
 | 
                      <td>{{ '%+0.0f' % diff.absdiff }} s</td> 
 | 
                    </tr> 
 | 
                    {% endfor %} 
 | 
                  </table> 
 | 
                </td> 
 | 
                {# Table biggest decrease in resource usage #} 
 | 
                <td> 
 | 
                  <table class="details plain"> 
 | 
                    {% for diff in measurement.buildstats.top_decrease %} 
 | 
                    <tr> 
 | 
                      <th>{{ diff.pkg }}.{{ diff.task }}</th> 
 | 
                      <td>{{ '%+0.0f' % diff.absdiff }} s</td> 
 | 
                    </tr> 
 | 
                    {% endfor %} 
 | 
                  </table> 
 | 
                </td> 
 | 
              </tr> 
 | 
            </table> 
 | 
  
 | 
            {# Recipe version differences #} 
 | 
            {% if measurement.buildstats.ver_diff %} 
 | 
              <div style="margin-top: 16px">Recipe version changes</div> 
 | 
              <table class="details"> 
 | 
                {% for head, recipes in measurement.buildstats.ver_diff.items() %} 
 | 
                  <tr> 
 | 
                    <th colspan="2">{{ head }}</th> 
 | 
                  </tr> 
 | 
                  {% for name, info in recipes|sort %} 
 | 
                    <tr> 
 | 
                      <td>{{ name }}</td> 
 | 
                      <td>{{ info }}</td> 
 | 
                    </tr> 
 | 
                  {% endfor %} 
 | 
                {% endfor %} 
 | 
              </table> 
 | 
            {% else %} 
 | 
              <div style="margin-top: 16px">No recipe version changes detected</div> 
 | 
            {% endif %} 
 | 
          {% endif %} 
 | 
        </div> 
 | 
      {% endfor %} 
 | 
    {# Unsuccessful test #} 
 | 
    {% else %} 
 | 
      <span style="font-size: 150%; font-weight: bold; color: red;">{{ test.status }} 
 | 
      {% if test.err_type %}<span style="font-size: 75%; font-weight: normal">({{ test.err_type }})</span>{% endif %} 
 | 
      </span> 
 | 
      <div class="preformatted">{{ test.message }}</div> 
 | 
    {% endif %} 
 | 
  {% endfor %} 
 | 
</div></body> 
 | 
</html> 
 |