| <!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'> |
| <script |
| src="https://www.gstatic.com/charts/loader.js"></script> |
| <script |
| src="https://cdnjs.cloudflare.com/ajax/libs/pako/1.0.6/pako_inflate.min.js" |
| integrity="sha256-N1z6ddQzX83fjw8v7uSNe7/MgOmMKdwFUv1+AJMDqNM=" |
| crossorigin="anonymous"></script> |
| |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/oboe.js/2.1.5/oboe-browser.min.js" |
| crossorigin="anonymous"></script> |
| <script src="helper.js"></script> |
| |
| <script type="module" src="details-selection.js"></script> |
| <script type="module" src="global-timeline.js"></script> |
| <script type="module" src="histogram-viewer.js"></script> |
| <script type="module" src="trace-file-reader.js"></script> |
| |
| <style> |
| body { |
| font-family: 'Roboto', sans-serif; |
| margin-left: 5%; |
| margin-right: 5%; |
| } |
| |
| </style> |
| <script> |
| 'use strict'; |
| |
| google.charts.load('current', {'packages':['line', 'corechart', 'bar']}); |
| |
| 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; |
| $('#histogram-viewer').selection = state.selection; |
| $('#histogram-viewer').data = state.data; |
| $('#details-selection').data = state.data; |
| } |
| |
| function globalSelectionChangedA(e) { |
| state.selection = e.detail; |
| console.log(state.selection); |
| $('#global-timeline').selection = state.selection; |
| $('#histogram-viewer').selection = state.selection; |
| } |
| |
| </script> |
| </head> |
| |
| <body> |
| <h1>V8 Heap Statistics</h1> |
| <trace-file-reader onchange="globalDataChanged(event)"></trace-file-reader> |
| |
| <details-selection id="details-selection" onchange="globalSelectionChangedA(event)"></details-selection> |
| <global-timeline id="global-timeline"></global-timeline> |
| <histogram-viewer id="histogram-viewer"></histogram-viewer> |
| |
| <p>Visualize object statistics that have been gathered using</p> |
| <ul> |
| <li><code>--trace-gc-object-stats</code> on V8</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>. |
| </li> |
| </ul> |
| <p> |
| Note that you only get a data point on major GCs. You can enforce this by |
| using the <code>--gc-global</code> flag. |
| </p> |
| <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> |
| </body> |
| |
| </html> |