For Micro-benchmarks for 'with'
authorhablich <hablich@chromium.org>
Mon, 1 Jun 2015 07:40:02 +0000 (00:40 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 1 Jun 2015 07:40:11 +0000 (07:40 +0000)
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
test/js-perf-test/Scope/run.js [new file with mode: 0644]
test/js-perf-test/Scope/with.js [new file with mode: 0644]

index b71257b..77b6770 100644 (file)
       "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 (file)
index 0000000..9ce00a1
--- /dev/null
@@ -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 (file)
index 0000000..8ec2d30
--- /dev/null
@@ -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;
+}