<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "https://www.web3d.org/specifications/x3d-4.0.dtd">
<X3D profile='Immersive' version='4.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.0.xsd'>
  <head>
    <meta content='ECMAScriptSaiPerFrameNotification.x3d' name='title'/>
    <meta content='Java Scene Authoring Interface (JSAI) scene and source code example that show how to use per frame notification to produce a frame rate annotation.' name='description'/>
    <meta content='X3D Working Group' name='creator'/>
    <meta content='23 February 2005' name='created'/>
    <meta content='28 September 2025' name='modified'/>
    <meta content='https://www.web3d.org/files/specifications/19777-1/V3.3/Part1/X3D_ECMAScript.html' name='reference'/>
    <meta content='X3D language bindings, ISO/IEC 19777-1, Part 1: ECMAScript, B.4 Per frame notification' name='specificationSection'/>
    <meta content='https://www.web3d.org/files/specifications/19777-1/V3.3/Part1/examples.html#PerFrameNotification' name='specificationUrl'/>
    <meta content='X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit' name='generator'/>
    <meta content='https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/ECMAScriptSaiPerFrameNotification.x3d' name='identifier'/>
    <meta content='../license.html' name='license'/>
  </head>
  <Scene>
    <WorldInfo title='ECMAScriptSaiPerFrameNotification.x3d'/>
    <Script DEF='SC'>
      <![CDATA[
ecmascript:
var lastStartTime;

function initialize() {
    date = new Date();
    lastStartTime = date.getTime();
}

// Called each frame
function prepareEvents() {
    date = new Date();
    frameTime = (date.getTime() - lastStartTime) / 1000.0;
    lastStartTime = date.getTime();
    fps = 1.0 / frameTime;
    Browser.println('FPS: ' + fps);
}
]]>
    </Script>
  </Scene>
</X3D>