// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(async function() {
  TestRunner.addResult(`Tests the instrumentation of a UserTiming events\n`);
  await TestRunner.loadModule('performance_test_runner');
  await TestRunner.showPanel('timeline');
  await TestRunner.evaluateInPagePromise(`
    function makeUserTimings()
    {
      let fulfill;
      const promise = new Promise(resolve => fulfill = resolve);

      setTimeout(_ => performance.mark('astart'), 0);
      setTimeout(_ => performance.mark('aend'), 100);

      setTimeout(_ => performance.mark('bstart'), 20);
      setTimeout(_ => performance.mark('bend'),  220);

      setTimeout(_ => performance.mark('cstart'), 40);
      setTimeout(_ => performance.mark('cend'),   41);

      setTimeout(_ => {
        performance.measure('timespan', 'astart', 'aend');
        performance.measure('timespan', 'bstart', 'bend');
        performance.measure('timespan', 'cstart', 'cend');
      }, 250);

      setTimeout(fulfill, 300);
      return promise;
    }
  `);

  PerformanceTestRunner.invokeWithTracing('makeUserTimings', TestRunner.safeWrap(onTracingComplete));
  TestRunner.addResult(`Expecting three measures with durations (in this order): 100, 200, 0`);

  var userTimingEventCount = 0;
  function onTracingComplete() {

    PerformanceTestRunner.tracingModel().sortedProcesses().forEach(process => {
      process.sortedThreads().forEach(thread => thread.asyncEvents().forEach(processAsyncEvent));
    });

    TestRunner.assertEquals(3, userTimingEventCount);
    TestRunner.completeTest();

    function processAsyncEvent(event) {
      if (!event._parsedCategories.has('blink.user_timing')) return;

      const roundedDuration = Math.round(event.duration / 100) * 100;
      TestRunner.addResult(`Got Async Event. Duration: ${roundedDuration}`);
      ++userTimingEventCount;
    }
  }
})();
