// 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 that worker events are properly filtered in timeline.\n`);
  await TestRunner.loadModule('performance_test_runner');
  await TestRunner.showPanel('timeline');
  await TestRunner.evaluateInPagePromise(`
      // Save references to the worker objects to make sure they are not GC'ed.
      let worker1;
      let worker2;

      function startFirstWorker()
      {
          worker1 = new Worker("resources/worker.js");
          worker1.postMessage("");
          return new Promise((fulfill) => worker1.onmessage = fulfill);
      }

      function startSecondWorker()
      {
          worker2 = new Worker("resources/worker.js");
          worker2.postMessage("");
          return new Promise((fulfill) => worker2.onmessage = fulfill);
      }
  `);

  await TestRunner.evaluateInPageAsync(`startFirstWorker()`);
  await PerformanceTestRunner.invokeAsyncWithTimeline('startSecondWorker');

  // TODO(1034374): We flakily get 1 worker event instead of 2. Why do we even
  // expect 2 when the timeline is only recording during startSecondWorker()?
  const allEvents = PerformanceTestRunner.timelineModel().inspectedTargetEvents();
  const workerEvents = allEvents.filter(e => e.name === TimelineModel.TimelineModel.DevToolsMetadataEvent.TracingSessionIdForWorker);
  TestRunner.addResult(`Got ${workerEvents.length} worker metadata events`);
  TestRunner.completeTest();
})();
