|  | // 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); |