summaryrefslogtreecommitdiff
path: root/deps/v8/test/js-perf-test/Object/create.js
blob: 49ebe5c1bf757189cfd1a2dd012fcac1109b4252 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ----------------------------------------------------------------------------

function shallowClone(object) {
  return Object.create(object.__proto__,
      Object.getOwnPropertyDescriptors(object));
}

function makeSlowCopy(object) {
  object = shallowClone(object);
  object.__foo__ = 1;
  delete object.__foo__;
  return object;
}

function convertToPropertyDescriptors(dict) {
  for (var key in dict) {
    var propertiesObject = dict[key];
    dict[key] = Object.getOwnPropertyDescriptors(propertiesObject);
  }
  return dict;
}

var properties_5 = { a:1, b:2, c:3, d:4, e:5 };
var TEST_PROPERTIES = convertToPropertyDescriptors({
  empty: {},
  array_5: [1, 2, 3, 4, 5],
  properties_5: properties_5,
  properties_10: { a:1, b:2, c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10 },
  properties_dict: makeSlowCopy(properties_5)
});

var TEST_PROTOTYPES = {
  null: null,
  empty: {},
  'Object.prototype': Object.prototype,
  'Array.prototype': Array.prototype
};

// ----------------------------------------------------------------------------

var testFunction = () => {
  return Object.create(prototype, properties);
}

function createTestFunction(prototype, properties) {
  // Force a new function for each test-object to avoid side-effects due to ICs.
  var random_comment = "\n// random comment" + Math.random() + "\n";
  return eval(random_comment + testFunction.toString());
}

// ----------------------------------------------------------------------------

var benchmarks = []

for (var proto_name in TEST_PROTOTYPES) {
  var prototype = TEST_PROTOTYPES[proto_name];
  for (var prop_name in TEST_PROPERTIES) {
    var properties = TEST_PROPERTIES[prop_name];
    var name = 'Create proto:' + proto_name + " properties:" + prop_name;
    benchmarks.push(
        new Benchmark(name, false, false, 0,
          createTestFunction(prototype, properties)));
  }
}

new BenchmarkSuite('Create', [1000], benchmarks);