<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>window.performance.now exists</title>
<link rel="author" title="W3C" href="http://www.w3.org/" />
<link rel="help" href="http://www.w3.org/TR/hr-time/#sec-extenstions-performance-interface"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(function() {
  assert_equals(typeof window.performance, "object");
}, "window.performance is defined", {assert: "The window.performance attribute provides a hosting area for performance related attributes."});

test(function() {
  assert_not_equals(window.performance.now, undefined, 'window.performance.now is defined');
}, "High Resolution Time extension to the Performance interface", {assert: "window.performance.now exists"});

test(function() {
  assert_equals(typeof window.performance.now, "function", "window.performance.now is a function");
}, "window.performance.now() function", {assert: "window.performance.now is a function"});

test(function() {
  assert_equals(typeof window.performance.now(), "number", "window.performance.now() returns a number");
}, "window.performance.now() returns a number", {assert: "The now method MUST return a DOMHighResTimeStamp"});

async_test(function() {
  // Check whether the performance.now() method is close to Date() within 30ms (due to inaccuracies)
  var initial_hrt = performance.now();
  var initial_date = Date.now();
  this.step_timeout(function() {
    var final_hrt = performance.now();
    var final_date = Date.now();
    assert_approx_equals(final_hrt - initial_hrt, final_date - initial_date, 30, 'High resolution time value increased by approximately the same amount as time from date object');
    this.done();
  }, 2000);
}, 'High resolution time has approximately the right relative magnitude');
</script>
</head>
<body>
<h1>Description</h1>
<p>This test validates that window.performance.now() exist and is a function.</p>

<div id="log"></div>

</body>
</html>
