<!DOCTYPE html>
<!--
Copyright (c) 2013 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.
-->

<link rel="import" href="/tracing/base/xhr.html">
<link rel="import" href="/tracing/core/test_utils.html">
<link rel="import" href="/tracing/extras/importer/trace_event_importer.html">
<link rel="import" href="/tracing/model/model.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  var eventStrings = {};

  // @const
  var TEST_NAMES = ['simple_trace', 'lthi_cats'];
  // @const
  var TEST_FILES_PATHS = ['/test_data/simple_trace.json',
                          '/test_data/lthi_cats.json.gz'];

  function getEvents(url) {
    if (url in eventStrings)
      return eventStrings[url];
    eventStrings[url] = tr.b.getSync(url);
    return eventStrings[url];
  }

  function timedPerfTestWithEvents(name, testFn, initialOptions) {
    if (initialOptions.setUp)
      throw new Error(
          'Per-test setUp not supported. Trivial to fix if needed.');

    var options = {};
    for (var k in initialOptions)
      options[k] = initialOptions[k];
    options.setUp = function() {
      TEST_FILES_PATHS.forEach(
          function warmup(url) {
            getEvents(url);
          });
    };
    timedPerfTest(name, testFn, options);
  }

  var n110100 = [1, 10, 100];
  n110100.forEach(function(val) {
    timedPerfTestWithEvents(TEST_NAMES[0] + '_' + val, function() {
      var events = getEvents(TEST_FILES_PATHS[0]);
      var m = tr.c.TestUtils.newModelWithEvents([events], {
        shiftWorldToZero: false,
        pruneContainers: false
      });
    }, {iterations: val});
  });

  timedPerfTestWithEvents(TEST_NAMES[1] + '_1', function() {
    var events = getEvents(TEST_FILES_PATHS[1]);
    var m = tr.c.TestUtils.newModelWithEvents([events], {
      shiftWorldToZero: false,
      pruneContainers: false
    });
  }, {iterations: 1});
});
</script>

