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