Title: [263454] trunk
Revision
263454
Author
ca...@igalia.com
Date
2020-06-24 07:48:34 -0700 (Wed, 24 Jun 2020)

Log Message

[JSC] add microbenchmark for op_get_private_name
https://bugs.webkit.org/show_bug.cgi?id=213544

Reviewed by Yusuke Suzuki.

Add machinery to add --usePrivateClassFields flag in a family of
microbenchmarks.

* Scripts/run-jsc-benchmarks:

Modified Paths

Added Paths

Diff

Added: trunk/JSTests/microbenchmarks/class-fields-private/get-private-name.js (0 => 263454)


--- trunk/JSTests/microbenchmarks/class-fields-private/get-private-name.js	                        (rev 0)
+++ trunk/JSTests/microbenchmarks/class-fields-private/get-private-name.js	2020-06-24 14:48:34 UTC (rev 263454)
@@ -0,0 +1,29 @@
+//@ requireOptions("--usePrivateClassFields=true")
+
+function assert(b, m = "Assertion failed") {
+    if (!b)
+        throw new Error(m);
+}
+
+function test1() {
+    function factory(i) {
+        return new class {
+            #x = i;
+            get() { return this.#x; }
+        };
+    }
+
+    function foo(o, i) {
+        return o.get();
+    }
+    noInline(foo);
+
+    let a = factory(42);
+    let b = factory(43);
+    let start = Date.now();
+    for (let i = 0; i < 10000000; ++i) {
+        assert(foo(a, "a") === 42);
+        assert(foo(b, "b") === 43);
+    }
+}
+test1();

Modified: trunk/Tools/ChangeLog (263453 => 263454)


--- trunk/Tools/ChangeLog	2020-06-24 14:07:32 UTC (rev 263453)
+++ trunk/Tools/ChangeLog	2020-06-24 14:48:34 UTC (rev 263454)
@@ -1,3 +1,15 @@
+2020-06-24  Caitlin Potter  <ca...@igalia.com>
+
+        [JSC] add microbenchmark for op_get_private_name
+        https://bugs.webkit.org/show_bug.cgi?id=213544
+
+        Reviewed by Yusuke Suzuki.
+
+        Add machinery to add --usePrivateClassFields flag in a family of
+        microbenchmarks.
+ 
+        * Scripts/run-jsc-benchmarks:
+
 2020-06-24  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK][WPE] Add API to allow applications to handle the HTTP authentication credential storage

Modified: trunk/Tools/Scripts/run-jsc-benchmarks (263453 => 263454)


--- trunk/Tools/Scripts/run-jsc-benchmarks	2020-06-24 14:07:32 UTC (rev 263453)
+++ trunk/Tools/Scripts/run-jsc-benchmarks	2020-06-24 14:48:34 UTC (rev 263454)
@@ -51,6 +51,7 @@
 TAILBENCH_PATH = PERFORMANCETESTS_PATH + "TailBench9000"
 BIGINTBENCH_PATH = PERFORMANCETESTS_PATH + "BigIntBench"
 MICROBENCHMARKS_PATH = OPENSOURCE_PATH + "JSTests" + "microbenchmarks"
+PRIVATEFIELDSBENCH_PATH = MICROBENCHMARKS_PATH + "class-fields-private"
 SLOW_MICROBENCHMARKS_PATH = OPENSOURCE_PATH + "JSTests" + "slowMicrobenchmarks"
 OPENSOURCE_OCTANE_PATH = PERFORMANCETESTS_PATH + "Octane"
 OCTANE_WRAPPER_PATH = OPENSOURCE_OCTANE_PATH + "wrappers"
@@ -235,6 +236,7 @@
 $includeSixSpeed = false
 $includeTailBench = true
 $includeBigIntBench = false
+$includePrivateFieldsBench = false
 $measureGC=false
 $benchmarkPattern=nil
 $verbosity=0
@@ -1767,7 +1769,22 @@
   end
 end
 
+class PrivateFieldsBenchmark
+    include Benchmark
 
+    def initialize(name)
+        @name = name
+    end
+
+    def emitRunCode(plan)
+        emitBenchRunCode(fullname, plan, SingleFileTimedBenchmarkParameters.new(ensureFile("PrivateFieldsBench-#{@name}", "#{PRIVATEFIELDSBENCH_PATH}/#{@name}.js")))
+    end
+
+    def environment
+        {"JSC_usePrivateClassFields" => "true"}
+    end
+end
+
 class MicrobenchmarksBenchmark
   include Benchmark
   
@@ -2866,6 +2883,7 @@
                  ['--six-speed', GetoptLong::NO_ARGUMENT],
                  ['--tail-bench', GetoptLong::NO_ARGUMENT],
                  ['--big-int-bench', GetoptLong::NO_ARGUMENT],
+                 ['--private-fields-bench', GetoptLong::NO_ARGUMENT],
                  ['--benchmarks', GetoptLong::REQUIRED_ARGUMENT],
                  ['--measure-gc', GetoptLong::OPTIONAL_ARGUMENT],
                  ['--force-vm-kind', GetoptLong::REQUIRED_ARGUMENT],
@@ -2984,6 +3002,9 @@
     when '--big-int-bench'
       resetBenchOptionsIfNecessary
       $includeBigIntBench = true
+    when '--private-fields-bench'
+      resetBenchOptionsIfNecessary
+      $includePrivateFieldsBench = true
     when '--benchmarks'
       $benchmarkPattern = Regexp.new(arg)
     when '--measure-gc'
@@ -3221,6 +3242,15 @@
     end
   }
 
+  PRIVATEFIELDSBENCH = BenchmarkSuite.new("PrivateFieldsBench", :geometricMean, 0)
+  Dir.foreach(PRIVATEFIELDSBENCH_PATH) {
+    | filename |
+    if filename =~ /\.js$/
+        name = $~.pre_match
+        PRIVATEFIELDSBENCH.add PrivateFieldsBenchmark.new(name)
+    end
+  }
+
   MICROBENCHMARKS = BenchmarkSuite.new("Microbenchmarks", :geometricMean, 0)
   Dir.foreach(MICROBENCHMARKS_PATH) {
     | filename |
@@ -3392,6 +3422,10 @@
     $suites << BIGINTBENCH
   end
 
+  if $includePrivateFieldsBench and not PRIVATEFIELDSBENCH.empty?
+    $suites << PRIVATEFIELDSBENCH
+  end
+
   if $includeAsmBench and not ASMBENCH.empty?
     if ASMBENCH_PATH
       $suites << ASMBENCH
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to