From f62d5ce9122b86527d97c11c82cc1d22327f563d Mon Sep 17 00:00:00 2001 From: hablich Date: Mon, 1 Jun 2015 00:40:02 -0700 Subject: [PATCH] For Micro-benchmarks for 'with' R=arv@chromium.org, mstarzinger@chromium.org BUG=v8:4131 LOG=n Review URL: https://codereview.chromium.org/1153363002 Cr-Commit-Position: refs/heads/master@{#28714} --- test/js-perf-test/JSTests.json | 10 +++++ test/js-perf-test/Scope/run.js | 26 ++++++++++++ test/js-perf-test/Scope/with.js | 90 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 test/js-perf-test/Scope/run.js create mode 100644 test/js-perf-test/Scope/with.js diff --git a/test/js-perf-test/JSTests.json b/test/js-perf-test/JSTests.json index b71257b..77b6770 100644 --- a/test/js-perf-test/JSTests.json +++ b/test/js-perf-test/JSTests.json @@ -106,6 +106,16 @@ "tests": [ {"name": "Assign"} ] + }, + { + "name": "Scope", + "path": ["Scope"], + "main": "run.js", + "resources": ["with.js"], + "results_regexp": "^%s\\-Scope\\(Score\\): (.+)$", + "tests": [ + {"name": "With"} + ] } ] } diff --git a/test/js-perf-test/Scope/run.js b/test/js-perf-test/Scope/run.js new file mode 100644 index 0000000..9ce00a1 --- /dev/null +++ b/test/js-perf-test/Scope/run.js @@ -0,0 +1,26 @@ +// Copyright 2015 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. + + +load('../base.js'); +load('with.js'); + +var success = true; + +function PrintResult(name, result) { + print(name + '-Scope(Score): ' + result); +} + + +function PrintError(name, error) { + PrintResult(name, error); + success = false; +} + + +BenchmarkSuite.config.doWarmup = undefined; +BenchmarkSuite.config.doDeterministic = undefined; + +BenchmarkSuite.RunSuites({ NotifyResult: PrintResult, + NotifyError: PrintError }); diff --git a/test/js-perf-test/Scope/with.js b/test/js-perf-test/Scope/with.js new file mode 100644 index 0000000..8ec2d30 --- /dev/null +++ b/test/js-perf-test/Scope/with.js @@ -0,0 +1,90 @@ +// Copyright 2015 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. + +new BenchmarkSuite( 'With', [1000], [ + new Benchmark('AccessOnSameLevel', false, false, 0, + AccessOnSameLevel, AccessOnSameLevelSetup, + AccessOnSameLevelTearDown), + new Benchmark('SetOnSameLevel', false, false, 0, + SetOnSameLevel, SetOnSameLevelSetup, + SetOnSameLevelTearDown), + new Benchmark('AccessOverPrototypeChain', false, false, 0, + AccessOverPrototypeChainSetup, AccessOverPrototypeChainSetup, + AccessOverPrototypeChainTearDown), + new Benchmark('CompetingScope', false, false, 0, + CompetingScope, CompetingScopeSetup, CompetingScopeTearDown) +]); + +var objectUnderTest; +var objectUnderTestExtended; +var resultStore; +var VALUE_OF_PROPERTY = 'Simply a string'; +var SOME_OTHER_VALUE = 'Another value'; + +// ---------------------------------------------------------------------------- + +function AccessOnSameLevelSetup() { + objectUnderTest = {first: VALUE_OF_PROPERTY}; +} + +function AccessOnSameLevel() { + with (objectUnderTest) { + resultStore = first; + } +} + +function AccessOnSameLevelTearDown() { + return objectUnderTest.first === resultStore; +} + +// ---------------------------------------------------------------------------- + +function AccessOverPrototypeChainSetup() { + objectUnderTest = {first: VALUE_OF_PROPERTY}; + objectUnderTestExtended = Object.create(objectUnderTest); + objectUnderTestExtended.second = 'Another string'; +} + +function AccessOverPrototypeChain() { + with (objectUnderTestExtended) { + resultStore = first; + } +} + +function AccessOverPrototypeChainTearDown() { + return objectUnderTest.first === resultStore; +} + +// ---------------------------------------------------------------------------- + +function CompetingScopeSetup() { + objectUnderTest = {first: VALUE_OF_PROPERTY}; +} + +function CompetingScope() { + var first = 'Not correct'; + with (objectUnderTest) { + resultStore = first; + } +} + +function CompetingScopeTearDown() { + return objectUnderTest.first === resultStore; +} + +// ---------------------------------------------------------------------------- + +function SetOnSameLevelSetup() { + objectUnderTest = {first: VALUE_OF_PROPERTY}; +} + +function SetOnSameLevel() { + with (objectUnderTest) { + first = SOME_OTHER_VALUE; + } +} + +function SetOnSameLevelTearDown() { + return objectUnderTest.first === SOME_OTHER_VALUE; +} -- 2.7.4