<html>
<head>
  <title>triage-status-sk demo</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
  <script src="/res/common/js/common.js"></script>
  <script src="/res/imp/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <link rel="stylesheet" href="/res/common/css/md.css">
  <link rel="import" href="/res/imp/bower_components/polymer/polymer.html">
  <script type="text/javascript" charset="utf-8">
    // Mock out sk.get() to return the login info.
    sk.get = function(url) {
      return new Promise(function (resolve, reject) {
        resolve('{"Email":"user@google.com","LoginURL":"https://accounts.google.com/"}');
      });
    };
    sk.post = function(url) {
      return new Promise(function (resolve, reject) {
        resolve('[{"offset":24748,"source":"master","author":"msarett@google.com","message":"313c463 - Safely handle unsupported color xforms in SkCodec","url":"https://skia.googlesource.com/skia/+/313c4635e3f1005e6807f5b0ad52805f30902d66","ts":1476984695}]');
      });
    };
  </script>
  <link rel="import" href="triage-status.html">
  <style type="text/css" media="screen">
    button {
      display: inline-block;
    }

    body {
      font-family: Arial, sans-serif;
    }

    triage-status-sk {
      display: block;
    }
  </style>
</head>
<body>
  <h1>Triage Status</h1>

  <triage-status-sk id=status query="source_type=skp&sub_result=min_ms"></triage-status-sk>

  <h3>Events</h3>
  <pre><code id=events></code></pre>

  <script type="text/javascript" charset="utf-8">
    (function () {
      var summary = {
      "centroid":[-1.0826576,0.33417022,0.8747909,0.11694965,0.76775414,-0.21376616,0.026059598,-0.08791064,0.13508978,-0.38292113,-0.4874483],
        "keys":[
          ",arch=x86_64,bench_type=skandroidcodec,compiler=Clang,config=nonrendering,cpu_or_gpu=CPU,cpu_or_gpu_value=AVX,extra_config=GN,model=MacMini6.2,name=AndroidCodec_01_original.jpg_SampleSize2,os=Mac,source_type=image,sub_result=min_ms,test=AndroidCodec_01_original.jpg_SampleSize2_640_480,",
          ",arch=arm,bench_type=skandroidcodec,compiler=Clang,config=nonrendering,cpu_or_gpu=CPU,cpu_or_gpu_value=MT6582,extra_config=GN_Android,model=AndroidOne,name=AndroidCodec_01_original.jpg_SampleSize2,os=Android,source_type=image,sub_result=min_ms,test=AndroidCodec_01_original.jpg_SampleSize2_640_480,",
          ",arch=x86,bench_type=skandroidcodec,compiler=Clang,config=nonrendering,cpu_or_gpu=CPU,cpu_or_gpu_value=Moorefield,extra_config=GN_Android,model=NexusPlayer,name=AndroidCodec_01_original.jpg_SampleSize2,os=Android,source_type=image,sub_result=min_ms,test=AndroidCodec_01_original.jpg_SampleSize2_640_480,",
          ",arch=arm64,bench_type=skandroidcodec,compiler=Clang,config=nonrendering,cpu_or_gpu=CPU,cpu_or_gpu_value=Snapdragon810,extra_config=GN_Android,model=Nexus6p,name=AndroidCodec_01_original.jpg_SampleSize2,os=Android,source_type=image,sub_result=min_ms,test=AndroidCodec_01_original.jpg_SampleSize2_640_480,"
        ],
        "param_summaries": {
          "arch":[
            {"value":"arm","weight":15},
            {"value":"arm64","weight":15},
            {"value":"x86","weight":15},
            {"value":"x86_64","weight":15}
          ],
          "bench_type":[
            {"value":"skandroidcodec","weight":26}
          ],
          "compiler":[
            {"value":"Clang","weight":26}
          ],
          "config":[
            {"value":"nonrendering","weight":26}
          ],
          "cpu_or_gpu":[
            {"value":"CPU","weight":26}
          ],
        },
        "step_fit":{
          "least_squares":0.12262289,
          "turning_point":5,
          "step_size":-1.1909344,
          "regression":-199.712171,
          "status":"Low"
        },
        "step_point":{
          "source":"master",
          "offset":24749,
          "timestamp":1476985138
        },
        "num":4,
      };
      var frame = {
        "dataframe":{
          "traceset":{},
          "header":[
            {"source":"master","offset":24744,"timestamp":1476982874},
            {"source":"master","offset":24745,"timestamp":1476983221},
            {"source":"master","offset":24746,"timestamp":1476983487},
            {"source":"master","offset":24747,"timestamp":1476983833},
            {"source":"master","offset":24748,"timestamp":1476984695},
            {"source":"master","offset":24749,"timestamp":1476985138},
            {"source":"master","offset":24750,"timestamp":1476985844},
            {"source":"master","offset":24751,"timestamp":1476986630},
            {"source":"master","offset":24752,"timestamp":1476986672},
            {"source":"master","offset":24753,"timestamp":1476986679},
            {"source":"master","offset":24754,"timestamp":1476987166}
          ],
          "paramset":{
            "arch":["arm","arm64","x86","x86_64"],
            "bench_type":["skandroidcodec"],
            "compiler":["Clang","GCC","MSVC"],
            "config":["nonrendering"],
            "cpu_or_gpu":["CPU"],
          },
          "skip":0
        },
        "ticks":[],
        "skps":[],
        "msg":""
      };
      var full_summary = {
        summary: summary,
        frame: frame,
      };

      $$$('#status').full_summary = full_summary;

      var triage = {
        status: "untriaged",
        message: "Nothing to see here.",
      };
      $$$('#status').triage = triage;

      $$$('#status').addEventListener("triaged", function(e) {
        $$$('#events').textContent = JSON.stringify(e.detail, null, ' ');
      });
    })();
  </script>
</body>
</html>
