<html>
<head>
  <title>cluster-summary2-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="cluster2.html">
  <style type="text/css" media="screen">
    button {
      display: inline-block;
    }

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

    cluster-summary2-sk {
      display: block;
    }
  </style>
</head>
<body>
  <h1>Cluster</h1>

  <h2>A cluster </h2>
  <cluster-summary2-sk id=cluster></cluster-summary2-sk>

  <h2>A cluster with triaging </h2>
  <cluster-summary2-sk id=nostatus></cluster-summary2-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":1,
          "step_size":-1.1909344,
          "regression":-199.712171,
          "status":"Low"
        },
        "step_point":{
          "source":"master",
          "offset":24745,
          "timestamp":1476983221
        },
        "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,
      };

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

      var summary2 = JSON.parse(JSON.stringify(full_summary));
      var triage = {
        status: "untriaged",
        message: "Nothing to see here.",
      };
      summary2.summary.step_fit.status = "High";
      summary2.summary.step_fit.regression = 201;
      $$$('#nostatus').full_summary = summary2;
      $$$('#nostatus').triage = triage;

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