// Copyright 2017 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 extracting information about original functions from bound ones\n`);
  await TestRunner.loadModule('performance_test_runner');
  await TestRunner.showPanel('timeline');
  await TestRunner.loadHTML(`
      <button id="btn"></button>
    `);
  await TestRunner.evaluateInPagePromise(`
      function original() { }

      function performActions()
      {
          var b = document.getElementById("btn");
          var foo = original.bind();
          b.onclick = foo;
          b.click();
      }
  `);

  await PerformanceTestRunner.evaluateWithTimeline('performActions()');

  PerformanceTestRunner.mainTrackEvents().forEach(event => {
    if (event.name !== TimelineModel.TimelineModel.RecordType.FunctionCall)
      return;
    var data = event.args['data'];
    var scriptName = data.scriptName;
    var scriptNameShort = scriptName.substring(scriptName.lastIndexOf('/') + 1);
    TestRunner.addResult(`${event.name} ${scriptNameShort}: ${data.scriptLine}`);
  });
  TestRunner.completeTest();
})();
