// Copyright 2019 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 addBenchmark(name, test) { new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 0, test) ]); } addBenchmark('Smi-Value', smiValue); addBenchmark('Prototype-Chain-Value', functionOnPrototypeValue); // TODO(all): might be a good idea to also do with receivers: double, HeapObject // with map, HeapObject, tagged, empty getter / accessor. // Also, element keyed loads (in another file, probably?) both with strings and // numbers for normal, cons,and sliced strings (for named properties). // Also, monomorphic vs poly vs mega. function smiValue() { function constructSmi() { this.smi = 0; } let o = new constructSmi(); for (var i = 0; i < 1000; ++i) { o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; o.smi; } } function functionOnPrototypeValue() { function objectWithPrototypeChain() { } objectWithPrototypeChain.prototype.__proto__ = {__proto__:{__proto__:{__proto__:{f(){}}}}}; let o = new objectWithPrototypeChain(); for (var i = 0; i < 1000; ++i) { o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; o.f; } }