11cb0ef41Sopenharmony_citest(function() {
21cb0ef41Sopenharmony_ci  assert_true((self.performance !== undefined), "self.performance exists");
31cb0ef41Sopenharmony_ci  assert_equals(typeof self.performance, "object", "self.performance is an object");
41cb0ef41Sopenharmony_ci  assert_equals((typeof self.performance.now), "function", "self.performance.now() is a function");
51cb0ef41Sopenharmony_ci  assert_equals(typeof self.performance.now(), "number", "self.performance.now() returns a number");
61cb0ef41Sopenharmony_ci}, "self.performance.now() is a function that returns a number");
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_citest(function() {
91cb0ef41Sopenharmony_ci  assert_true(self.performance.now() > 0);
101cb0ef41Sopenharmony_ci}, "self.performance.now() returns a positive number");
111cb0ef41Sopenharmony_ci
121cb0ef41Sopenharmony_citest(function() {
131cb0ef41Sopenharmony_ci    var now1 = self.performance.now();
141cb0ef41Sopenharmony_ci    var now2 = self.performance.now();
151cb0ef41Sopenharmony_ci    assert_true((now2-now1) >= 0);
161cb0ef41Sopenharmony_ci  }, "self.performance.now() difference is not negative");
171cb0ef41Sopenharmony_ci
181cb0ef41Sopenharmony_ciasync_test(function() {
191cb0ef41Sopenharmony_ci  // Check whether the performance.now() method is close to Date() within 30ms (due to inaccuracies)
201cb0ef41Sopenharmony_ci  var initial_hrt = self.performance.now();
211cb0ef41Sopenharmony_ci  var initial_date = Date.now();
221cb0ef41Sopenharmony_ci  this.step_timeout(function() {
231cb0ef41Sopenharmony_ci    var final_hrt = self.performance.now();
241cb0ef41Sopenharmony_ci    var final_date = Date.now();
251cb0ef41Sopenharmony_ci    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');
261cb0ef41Sopenharmony_ci    this.done();
271cb0ef41Sopenharmony_ci  }, 2000);
281cb0ef41Sopenharmony_ci}, 'High resolution time has approximately the right relative magnitude');
291cb0ef41Sopenharmony_ci
301cb0ef41Sopenharmony_citest(function() {
311cb0ef41Sopenharmony_ci  var didHandle = false;
321cb0ef41Sopenharmony_ci  self.performance.addEventListener("testEvent", function() {
331cb0ef41Sopenharmony_ci    didHandle = true;
341cb0ef41Sopenharmony_ci  }, { once: true} );
351cb0ef41Sopenharmony_ci  self.performance.dispatchEvent(new Event("testEvent"));
361cb0ef41Sopenharmony_ci  assert_true(didHandle, "Performance extends EventTarget, so event dispatching should work.");
371cb0ef41Sopenharmony_ci}, "Performance interface extends EventTarget.");
38