<!DOCTYPE html>
<!-- Copyright 2018 the V8 project authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->

<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>V8 Heap Statistics</title>
  <link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

  <link rel="import" href="details-selection.html">
  <link rel="import" href="global-timeline.html">
  <link rel="import" href="trace-file-reader.html">

  <style type="text/css">

body {
  font-family: 'Roboto', sans-serif;
  margin-left: 5%;
  margin-right: 5%;
}

  </style>
  <script type="text/javascript">

'use strict';

google.charts.load('current', {'packages':['line', 'corechart']});

function $(id) { return document.querySelector(id); }

function removeAllChildren(node) {
  while (node.firstChild) {
    node.removeChild(node.firstChild);
  }
}

let state = Object.create(null);

function globalDataChanged(e) {
  state.data = e.detail;
  // Emit one entry with the whole model for debugging purposes.
  console.log(state.data);
  state.selection = null;
  $('#global-timeline').selection = state.selection;
  $('#global-timeline').data = state.data;
  $('#type-details').selection = state.selection;
  $('#type-details').data = state.data;
  $('#details-selection').data = state.data;
}

function globalSelectionChangedA(e) {
  state.selection = e.detail;
  $('#global-timeline').selection = state.selection;
  $('#type-details').selection = state.selection;
}

  </script>
</head>

<body>
  <trace-file-reader onchange="globalDataChanged(event)"></trace-file-reader>
  <h1>V8 Heap Statistics</h1>
  <p>Visualize object statistics that have been gathered using</p>
  <ul>
    <li><code>--trace-gc-object-stats on V8</code></li>
    <li>
      <a
        href="https://www.chromium.org/developers/how-tos/trace-event-profiling-tool">Chrome's
        tracing infrastructure</a> collecting data for the category
      <code>v8.gc_stats</code>. The trace file needs to be unpacked (e.g. using
      <code>gunzip</code>).
    </li>
  </ul>
  <p>
    Note that the visualizer needs to run on a web server due to HTML imports
    requiring <a
         href="https://en.wikipedia.org/wiki/Cross-origin_resource_sharing">CORS</a>.
  </p>
  <details-selection id="details-selection" onchange="globalSelectionChangedA(event)"></details-selection>
  <global-timeline id="global-timeline"></global-timeline>
  <type-details id="type-details"></type-details>
</body>

</html>
