| <!DOCTYPE html> | |
| <!-- Copyright 2020 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>Indicium</title> | |
| <!-- <link rel="icon" type="image/png" href="/images/favicon.png"/> --> | |
| <link rel="modulepreload" href="./log-file-reader.mjs" > | |
| <link rel="modulepreload" href="./helper.mjs" > | |
| <link rel="preload" href="./log-file-reader-template.html" as="fetch" crossorigin="anonymous"> | |
| <script type="module"> | |
| // Force instatiating the log-reader before anything else. | |
| import "./log-file-reader.mjs"; | |
| // Delay loading of the main App | |
| (async function() { | |
| let module = await import('./index.mjs'); | |
| globalThis.app = new module.App("#log-file-reader", "#map-panel", "#map-stats-panel", | |
| "#timeline-panel", "#ic-panel", "#map-track", "#ic-track", "#deopt-track", | |
| "#source-panel"); | |
| })(); | |
| </script> | |
| <link rel="stylesheet" type="text/css" href="./index.css"> | |
| <style> | |
| .theme-switch-wrapper { | |
| display: inline-block; | |
| align-items: center; | |
| } | |
| .theme-switch { | |
| display: inline-block; | |
| height: 16px; | |
| position: relative; | |
| width: 38px; | |
| } | |
| .theme-switch input { | |
| display: none; | |
| } | |
| .slider { | |
| background-color: var(--primary-color); | |
| bottom: 0; | |
| cursor: pointer; | |
| left: 0; | |
| position: absolute; | |
| right: 0; | |
| top: 0; | |
| border-radius: 34px; | |
| } | |
| .slider:before { | |
| background-color: var(--surface-color); | |
| position: absolute; | |
| height: 10px; | |
| width: 10px; | |
| bottom: 3px; | |
| content: ""; | |
| left: 4px; | |
| border-radius: 50%; | |
| } | |
| input:checked+.slider:before { | |
| transform: translateX(20px); | |
| } | |
| #container.initial { | |
| display: none; | |
| } | |
| #timeline-panel { | |
| width: 100%; | |
| } | |
| .panels{ | |
| display: grid; | |
| align-content: center; | |
| grid-template-columns: repeat(auto-fill, minmax(500px, 1fr)); | |
| grid-auto-flow: row dense; | |
| grid-gap: 10px; | |
| margin-top: 10px; | |
| } | |
| dt::after { | |
| content: ":"; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <section id="file-reader"> | |
| <log-file-reader id="log-file-reader"></log-file-reader> | |
| </section> | |
| <section id="container" class="initial"> | |
| <timeline-panel id="timeline-panel"> | |
| <timeline-track id="map-track"></timeline-track> | |
| <timeline-track id="ic-track"></timeline-track> | |
| <timeline-track id="deopt-track"></timeline-track> | |
| </timeline-panel> | |
| <div class="panels"> | |
| <map-panel id="map-panel"></map-panel> | |
| <stats-panel id="map-stats-panel"></stats-panel> | |
| <ic-panel id="ic-panel" onchange="app.handleSelectIc(event)"></ic-panel> | |
| <source-panel id="source-panel"></source-panel> | |
| </div> | |
| </section> | |
| <div class="panels"> | |
| <section id="settings" class="panel"> | |
| <h2>Settings</h2> | |
| <span>Theme:</span> | |
| <div class="theme-switch-wrapper"> | |
| <label class="theme-switch" for="theme-switch-input"> | |
| <input type="checkbox" id="theme-switch-input" /> | |
| <div class="slider"></div> | |
| </label> | |
| </div> | |
| </section> | |
| <section id="instructions" class="panel"> | |
| <h2>Instructions</h2> | |
| <p> | |
| Unified web interface to analyse runtime information stored in the v8 log. | |
| </p> | |
| For generating a v8.log file from <a href="https://v8.dev/docs/build">d8</a>: | |
| <ul> | |
| <li> | |
| <code>/path/do/d8 --trace-maps --trace_ic --log-source-code $FILE</code> | |
| </li> | |
| </ul> | |
| For generating a v8.log file from Chrome: | |
| <ul> | |
| <li> | |
| <code>/path/to/chrome --user-data-dir=/var/tmp/chr$RANDOM --no-sandbox | |
| --js-flags='--trace-ic --trace-maps --log-source-code’ | |
| $WEBSITE_URL</code> | |
| </li> | |
| </ul> | |
| <h3>Log Options:</h3> | |
| <dl class="d8-options"> | |
| <dt><code>--trace-maps</code></dt> | |
| <dd>Log<a href="https://v8.dev/blog/fast-properties" target="_blank"> | |
| Maps</a></dd> | |
| <dt><code>--trace-ic</code></dt> | |
| <dd>Log | |
| <a href="https://mathiasbynens.be/notes/shapes-ics" target="_blank"> | |
| ICs</a></dd> | |
| <dt><code>--log-source-code</code></dt> | |
| <dd>Log source code</dd> | |
| </dl> | |
| <h3>Keyboard Shortcuts for Navigation</h3> | |
| <dl> | |
| <dt><kbd>SHIFT</kbd> + <kbd>Arrow Up</kbd></dt> | |
| <dd>Follow Map transition forward (first child)</dd> | |
| <dt><kbd>SHIFT</kbd> + <kbd>Arrow Down</kbd></dt> | |
| <dd>Follow Map transition backwards</dd> | |
| <dt><kbd>Arrow Up</kbd></dt> | |
| <dd>Go to previous Map chunk</dd> | |
| <dt><kbd>Arrow Down</kbd></dt> | |
| <dd>Go to next Map in chunk</dd> | |
| <dt><kbd>Arrow Left</kbd></dt> | |
| <dd>Go to previous chunk</dd> | |
| <dt><kbd>Arrow Right</kbd></dt> | |
| <dd>Go to next chunk</dd> | |
| <dt><kbd>+</kbd></dt> | |
| <dd>Timeline zoom in</dd> | |
| <dt><kbd>-</kbd></dt> | |
| <dd>Timeline zoom out</dd> | |
| </dl> | |
| </section> | |
| </div> | |
| </body> | |
| </html> |