<!DOCTYPE html>
<!-- Copyright 2013 the V8 project authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of Google Inc. nor the names of its
      contributors may be used to endorse or promote products derived
      from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->

<html lang="en-us">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>V8 profile log plotter</title>
  <link rel="stylesheet" type="text/css" href="profviz.css">
  <script src="profviz.js"></script>
</head>

<body onload="onload()">
  <div id="content">
  
  <img src="" id="plot" type="image/svg+xml" class="display"
      width="1200" height="600" class="float-right"/>

  <textarea id="prof" class="display" disabled=true></textarea>
  <br/>

  <table width="1200">
    <tr>
      <td width="330">
        <button id="start" onclick="start()">
          Start
        </button>
        <button id="reset" onclick="ui.reset(); worker.reset();">
          Reset
        </button>
        <button id="toggledisplay" onclick="ui.toggle();">
          Show profile
        </button>
      </td>
      <td width="220">
        <input type="file" id="file" onchange="ui.reset();"/>
      </td>
      <td width="300">
      <label title="You can manually choose the range
to plot only part of the log file.">
        <span class="tooltip">Range</span>:
      </label>
      <input type="text" id="range_start" class="range"/>
      <label>to</label>
      <input type="text" id="range_end" class="range"/>
      </td>
      <td width="350">
        <label title="We model profiling overhead by accounting a constant
execution delay to each log entry. Adjust to better suit
your computer's performance.">
          <span class="tooltip">Delay per log entry</span>:
        </label>
        <input type="text" id="distortion" class="range" value="4500"/>
        <label>picoseconds</label>
      </td>
    </tr>
  </table>

  <br/>
  <textarea class="log" id="log" rows="8" disabled=true></textarea>

  <div class="text">
    <h1>
      <a href="javascript:ui.info('instructions');" class="unroll">
        Instructions
      </a>
    </h1>
    <div id="instructions">
    <ol>
      <li>
        Run V8 with
        <span class="tt">--prof --log-timer-events</span>,
        or alternatively,<br/>
        Chrome with
        <span class="tt">
          --no-sandbox --js-flags="--prof --log-timer-events"
        </span> to produce <span class="tt">v8.log</span>.
      </li>
      <li>
        Open
        <span class="tt">v8.log</span>
        on this page. Don't worry, it won't be uploaded anywhere.
      </li>
      <li>
        Click "Start" to start number crunching. This will take a while.
      </li>
      <li>
        Click "Show plot/profile" to switch between the statistical profile and
        the timeline plot.<br/>
        C++ items are missing in the statistical profile because symbol
        information is not available.<br>
        Consider using the
        <a href="https://code.google.com/p/v8/wiki/V8Profiler">
          command-line utility
        </a> instead.
      </li>
    </ol>
    If you expect multiple V8 instances to run concurrently, for example
    with several tabs in Chrome,<br/>
    add the V8 flag <span class="tt">--logfile=v8.%p.log</span>
    so that each instance writes to its own log file.
    </div>
  </div>

  <div class="text">
    <h1>
      <a href="javascript:ui.info('credits');" class="unroll">
        Credits
      </a>
    </h1>
    <div id="credits">
    <ul>
      <li>
        Christian Huettig for the
        <a href="http://gnuplot.respawned.com/">Javascript port</a>
        of Gnuplot 4.6.3.
      </li>
      <li>
        The
        <a href="https://github.com/kripken/emscripten">Emscripten compiler</a>
        that made the port possible.
      </li>
      <li>
        The <a href="http://www.gnuplot.info/">Gnuplot project</a>.
      </li>
      <li>
        The <a href="https://developers.google.com/v8/">V8 project</a>.
      </li>
    </ul>
    </div>
  </div>

</div>
</body>
</html>
